一、DQL(数据库查询语言)
1.查询数据
select 列名称 from 表名称 [查询条件];
查询表中所有的内容:select * from 表名
按特定条件查询:select 列名称 from 表名称 where 条件;
select * from students where name like "%王%"; 查询名字中带有 "王" 字的所有人信息
select * from students where id<5 and age>20; 查询id小于5且年龄大于20的所有人信息
where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!=、 between...and... 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询。
2.完全重复的记录只一次
select distinct * from 表名;
select distinct 列1,列2 from 表名;
例如:select distinct sal from emp;
查询员工的工资,如果存在相同的工资只显示一次
3.列运算
● 数据类型的列可以做加、减、乘、除运算
select sal*1.5 from emp;
● 字符串类型可以做连接运算
select concat(“$”,sal) from emp;
● 转换null值
有时需要把null转换成其他值,例如com+1000,如果com存在null值,那么null+1000还是null
而我们希望把null当做0来运算,select ifnull(com,0)+1000 from emp;
ifnull(com,0):如果com中存在null值,那么当成0来运算
● 给列起别名
select ifnull(com,0)+1000 as 奖金 from emp; as 可以省略
4.条件控制
● 模糊查询
select * from emp where name like ‘张_’; 其中一个_代表匹配一个字符
select * from emp where name like ‘张%’; %代表匹配0~N个字符
5.排序
● 升序
select * from emp order by sal asc; 按asc排序,升序,可省略
● 降序
select * from emp order by sal desc; 按desc排序,降序,不可省略
● 使用多列作为排序条件
select * from emp order by sal asc,comm desc; 先按sal升序,如果sal相同,按comm降序
6.聚合函数:用来做某列的纵向运算
● count
select count(*) from emp; 计算emp表中所有列都不为null的记录的行数
select count(200) from emp; 与 * 效果一样
select count(comm) from emp; 计算emp表中comm不为null的记录的行数
● max
select max(sal) from emp; 查询最高工资
● min
select min(sal) from emp; 查询最低工资
● sum
select sum(sal) from emp; 查询工资和
● avg
select avg(sal) from emp; 查询平均工资
7. 分组查询:把记录使用某一列进行分组,然后查询组信息
例如:查看所有部门的记录数
select deptno, count(*) from emp group by deptno;
使用deptno分组,查询部门编号和每个部门的记录数
select job, max(sal) from emp group by job;
使用job分组,查询每种工作的最高工资
① 分组前条件
select deptno, count(*) from emp where sal>15000 group by deptno;
分组前先去除sal<=15000的人,在进行分组,记录总数。
② 组条件,分组后条件
以部门分组,查询每组记录数,条件为记录数大于3
select deptno,count(*) from emp group by deptno having count(*)>3;
③ select deptno, count(*) from emp where sal>15000 group by deptno having count(*)>3;
8. limit子句:用来限制查询结果的起始行,以及总行数
例如:查询起始行为第五行,一共查询3行记录
select * from emp limit 4,3 ;
其中4表示第5行开始,其中3表示一共查询3行,即第5,6,7行记录
应用:分页
① 一页的记录数:10行
② 查询第3页
select * from emp limit 20,10;
select * from emp limit (当前页-1)*每页记录数,每页记录数;