【前言】
心里很乱,开车不稳了。无关于学习。
【正文】
一、关于DDL、DML、DCL、DQL:
1.DDL:数据定义语言:主要用于对数据结构上的操作,对数据库,表,字段的CQUD操作。通常写SQL语言都会出现database,table等关键字。
补充几个操作字段的SQL语句:
-添加一个字段:(用add):[alter table 表名 add 字段名 数据类型 约束]:
-修改字段名:(用change):[alter table 表明 change 旧字段名 新字段名 类型 约束]:alter table exam change score english int;
2.DML:数据操作语言: 用来对表里面的数据进行增删改查的操作。在DML中,写SQL语句经常出现以下几个错误:
-SQL语句不会出现table这个关键字的,要操作表直接写表名就好。
-对于是字符串类型的数据,要添加单引号‘'
添加:[insert into ]
修改:[update 表名 set 字段名]update exam set name = '李4' where name = '李四';
删除:[delete from 表名]
二、条件查询:
使用 where 子句,where 子句后面不允许跟聚合函数判断
1.and:并列 —— 查询名字是李四并且英语成绩大于90的学生信息:select * from exam where name = "李四" and english>90;
2.or:或者
3.not:非
1).查询 用户不是姓张的
select * from exam where name not like '张%';
2). 查询 密码不是空的
select * from user where password is not null;
三、模糊查询 like
在like子句中可以使用_或者%作为占位符,_只能代表一个字符,而%可以代表任意多个字符
like '李_':名字必须是两个字
like '李%':名字可以多个字
like '%四' 以四结尾的
like '%王%' 含有王的
四、范围查询in
使用in代表的是一个范围检索
假设我们现在查询英语成绩是:69,75,89的学生的信息;
select * from exam where english in(69,75,89);
五、别名查询 as
可以给查询出的结果赋予一个临时的字段名:其中as可以省略
select dname as 部门 from dpet;
select dname 部门 from dpet;
六、升序降序排序:
asc 升序 desc 降序,默认是升序。一般放在一条SQL语句的最后面。对结果进行排序
1)查询所有的员工,以工资的升序来排序
select * from emp order by sal asc;
2)按照工资降序排列,在工资相同情况下,按照入职日期排序
select * from emp order by sal desc,hiredate asc;
七、复杂查询:
1.聚合函数:
总和:sum()
平均值:avg()
统计个数:count()
最大值:max()
如果是空,用什么代替:ifnull()--比如:ifnull(sal,0):ifnull()比如如果工资如果为空,空不能运算。就用0代替
最小值: min()
2.
工资加奖金的总和:
select sum(sal+comn) from emp;//会出现问题:原因是字段为空不能运算
改进:
select sum(sal+ifnull(count,0)) from emp;
3.求每个人的平均成绩。
select name,avg(chinese+english+math) from exam group by name;
4.查询英语成绩信息(不显示重复的值)
select distinct english from exam;
八、分组查询 group by 和having 关键字
当一个公司有若干部门,求每个部门的人数总和。这样的需求时,就可以把这个表按照部门来分割成若干个表,然后分别统计出每个表的人数。
select job,count(*) from emp group by job;
进行分组后的条件的过滤
使用关键字 having
注意:where的子句不允许跟着聚合函数。
按商品名称统计,花费总金额在5000以上的商品;
select product,sum(price) from orderitem group by product having sum(price)>5000;