数据库
1.创建表中的字段时先写名字在写类型,类型中确定长度
desc 名字 看表结构
show create table 名字 查看检表结构
drop table 名字 删除表
增、删、改、查sql语句
增 insert into 名字 values();插入数据
查 select * from 名 看表中的数据
改 update 名 set sname=‘我’,sex=‘你’ where sno=2;修改表
删 delete from 名 where sno=1;删除数据
去掉where sno=1;就是删除所有数据
select语句的运行顺序
from–>where–>group by–>select–>having–>order by
(1)where后不能使用分组函数
(2)在分组时出现在select后的字段,必须出现在分组函数的后边
2.DDL语句:
create database 名 新建数据库
alter table 名 add score double(5,2)firse;或after sey
新增一列叫score数据,类型为double(5,2)一共5位取2位小数
fires:添加到第一列 after sex:添加到最后
alter table 名 drop score 删除score列
修改指定字段的数据类型
alter table 名 MODIFY score double(4,1)
对字段名进行重新命名
alter table 名 change score score2 double(4,1)
修改表名
alter table stu【修改后的名】rename to 名
3.列表约束
create table person(
主键约束
pid int(4) primary key auto_increment,
检查约束,只能写男或女
psex varchar(2) default ‘男’ check (psex =‘男’ or psex=‘女’),
非空约束
pname varchar(10) not null,
唯一约束
pemail VARCHAR(20) unique,
检查约束,年龄只能在1~150之间
page int(3) check(page >=1 and page <=150)
);
4.表级约束
主键约束
constraint pk_student PRIMARY key (pid),
唯一约束
constraint uk_student_pemail unique (pemail),
检查约束,年龄只能在1~150之间
constraint ck_student_page check (page >1 and page <=150),
检查约束,只能写男或女
constraint ck_student_psex check(psex =‘男’ or psex =‘女’)
约束条件 | 约束描述 |
---|---|
PRIMARY KEY | 主键约束,约束字段的值可唯一地标识对应的记录 |
NOT NULL | 非空约束,约束字段的值不能为空 |
UNIQUE | 唯一约束,约束字段的值是唯一的 |
CHECK | 检查约束,限制某个字段的取值范围 |
DEFAULT | 默认值约束,约束字段的默认值 |
AUTO_INCREMENT | 自动增加约束,约束字段的值自动递增 |
FOREIGN KEY | 外键约束,约束表与表之间的关系 |
5.外键约束
constraint 约束自定义名 约束名称 字段名 references 另一张表的主键
constraint fk_student_clssno foreign key (classno) references class(cid)
级联操作
RESTRICT 严格的 当子表中含有数据 不能进行删除和更新 no action
delete from class where cid =2
删除外键 如果查看时没有删除 将 窗口关闭再打开
alter table c_student drop FOREIGN key fk_student_clssno;
constraint 约束自定义名 约束名称 字段名 references 另一张表的主键
alter table c_student add constraint fk_student_clssno foreign key(classno) references
class(cid) on delete set null on update CASCADE;
on delete set null on update set null 当父表数据删除 或者更新时 子表的外键的字段变为null
添加外键并且设置级联规则 级联更新
删除父表数据时 子表也会删除 更新父表数据时 子表也会更改
alter table student add constraint fk_student_clssno foreign key(classno) references
class(cid) on delete cascade on update cascade;
6.where语句:
查询指定的字段值
select ename,job,sal from emp;
设置别名
select ename ‘姓名’,job ‘工作’,sal ‘工资’ from emp;
采用算数运算符 + - * / %
select ename,job,sal*12 ‘年薪’ from emp;
select ename,job,sal+1000’薪水’from emp;
select ename,job,sal%600’薪水’from emp;
去重 distinct
select distinct job,sal from emp;
对两个字段的共同组合执行去重操作
select distinct job,sal from emp;
排序 默认按照 从小到大排序 desc 逆序排序
select * from emp order by sal asc;
当入职时间一样 按照工资从高到低排序
select * from emp order BY hiredate,sal desc;
排序 默认按照 从小到大排序 desc 逆序排序
select * from emp order by sal asc;
当入职时间一样 按照工资从高到低排序
select * from emp order BY hiredate,sal desc;
where 子句
比较运算符 > < >= <= !=
select * from emp ORDER BY sal;
select * from emp where sal >2000;
不等于
SELECT * FROM emp WHERE ename != ‘blake’;
and 并且 between a and b [a,b]
select * from emp where sal between 1600 and 3000;
不在此范围之内 not
select * from emp where sal not between 1600 and 3000;
or或者
select * from emp where job =‘clerk’ or job = ‘salesman’ ;
可以使用小括号改变运算
like %:
代表任意个字符 _: 代表任意一个字符
只要有一个字母是a即可
select * from emp where ename like ‘%a%’;
in 在什么范围之内
查找10部门或者20部门的员工信息
select * from emp where deptno in(10,20);
is null 判断字段是否为null
select * from emp where comm is null;
is not null 不是null的数据进行输出
select * from emp where comm is not null;
7.字符串
拼接
select ename,concat(ename,‘你好’,‘哈喽’)from emp;
SELECT concat(‘在吗’,‘不在’,‘无聊’)from dual;
mysql数据库内容的下标从1开始
select ename,insert(ename,1,2,‘HEELLO||’) from emp;
返回字符串内元素的个数 空格也占一个位置
select ename,length(’ a ') from emp;
变大写 变小写
select ename,lower(ename),upper(ename) from emp;
获取左/右边的n个字符
select ename,left(ename,2),right(ename,3) from emp;
从左边开始添加字符 直到达到指定的个数
select lpad(“Hello”,12,’|你|’) from dual;
当指定的长度 小于 字符串长度 则进行切割 舍掉后面的内容
select lpad(“Hello”,2,’|你|’) from dual
select ltrim(’ a ') from dual
select rtrim(’ a ') from dual
select trim(’ a ') from dual
截取字符串
select SUBSTRING(“hello”,2)from dual
字符串的反转
select reverse(“hello”)from dual
8.单多行函数
单行函数对一行数据进行处理
select ename,lower(ename) from emp;
多行函数
select count(*) from emp;
单行函数不要和多行函数一起使用 即使成功也没有意义
9.流程函数
X?Y:Z if(条件,t,f)
select if(1=1,‘yes’,‘no’) from dual
ifnull判断第一个是否为空,如果空输出后边的
select ifnull(null,20),ifnull(10,20) from dual
这用就可以把里边是空的不用计算
select ename,sal * 12 + ifnull(comm,0) ‘年 薪’ from emp;
用来判断是否相同 相同返回null
select nullif(1,2) from dual
等值校验
select ename ‘姓名’,deptno,case deptno when 10 then ‘财务部’
when 20 then ‘信息部’
when 30 then ‘销售部’
– else ‘技术部’
end ‘部门名称’
from emp;
进行范围校验
select ename,sal,case when sal >=5000 then “A”
when sal >=4000 then ‘B’
when sal >=3000 then ‘C’
when sal >=2000 then ‘D’
else ‘E’ end ‘薪水等级’
from emp order by sal desc;
10.多行函数
处理多行内容但是只返回一个结果
select max(sal),min(sal),avg(sal),sum(sal),count(sal) from emp;
avg sum 只能用于数值类型 max min count 适用其他数据类型
进行数据统计时 会忽略null值
用于统计记录的个数
select count(1) from emp;
统计去重后的数量
select count(distinct job) from emp;
11.分组函数
distinct去重
select DISTINCT deptno from emp;
统计各个部门的平均工资
select deptno,avg(sal) from emp GROUP BY deptno
统计各个部门的平均工资(只显示平均工资2000以上的)
having是用来执行分组后的函数的
select deptno,avg(sal)
from emp – 不可以在这用where avg(sal)>2000
group by deptno
having avg(sal) >2000
统计各个岗位的平均工资,除了MANAGER
select job’工作’,avg(sal)‘平均工资’
from emp – where job!=‘MANAGER’
group by job
having job != ‘MANAGER’
order by ‘平均工资’ desc;
12.数学函数
绝对值
select abs(-9),abs(9) from dual
PI3.1415926
select PI() from dual
ceil 向上取整 floor 向下取整
select ceil(3.1),floor(9.9) from dual
求n ^x 次方
select pow(2,3) ,power(3,3)from dual
随机数
select rand(),rand(),rand()
四舍五入
select round(5.3) from dual
select round(5.7) from dual
13.日期函数
select current_date(),current_time()
获取当前时间
select now(),sysdate() from dual;
select now(),sysdate(),sleep(5) ,now(),sysdate() from dual
14.内连接
交叉连接
select * from emp cross join dept;
自然连,接同名列只显示一次
select * from emp natural join dept;
对表进行设置别名 可以对很长的表名进行简化
select e.ename,e.EMPNO,job,d.DEPTNO,d.DNAME from emp e natural join dept d;
natural join 会 把所有的列进行查找匹配
using(deptno) 按照指定的列进匹配
select * from emp JOIN dept using(deptno)
使用on 作为连接条件
select * from emp e join dept d on e.deptno = d.deptno
15.sql99和sql92:
sql99:
连接条件和筛选条件是分开的
sql92:
连接条件和筛选条件是放到一起的