1.简单查询 —— 分页查询
查询的结果有太多数据,一次显示不完可以做成分页显示
需要提供两个条件:当前的页码、每页的数据量
每页开始查询的值 = (当前的页码 - 1)* 每页的数据量 |
2.复杂查询
(1)聚合查询/分组查询
select 聚合函数(列名) from 表名;
函数:是一个功能体,提供若干个数据,返回结果 聚合函数: count() / sum() / avg() / max() / min() 数量 总和 平均 最大 最小 |
分组查询通常只能查询分组条件列和聚合函数
select 聚合函数(列名)..... from 表名 group by 列名;
year() 获取日期中的年份 md5() 加密的函数 |
select * from 表名 where year(日期列名)='年份';
(2)子查询
子查询是多个SQL命令的组合,把一个SQL命令的结果作为另一个SQL命令的条件 |
示例:查询出工资最高的员工是谁
步骤1:查询出工资的最高值 —— 50000
select max(salary) from emp;
步骤2:查询出工资为50000的员工
select * from emp where salary=50000;
综合:
select * from emp where salary=(select max(salary) from emp);
(3)多表查询
要查询的列分别在多个表中,前提表之间要有关联
示例:查询出所有的员工姓名及其部门名称
select ename,dname from emp,dept where deptId=did;
select emp.ename,dept.dname from emp,dept where emp.deptId=dept.did;
内连接
select ename,dname from emp inner join dept on deptId=did;
和之前的查询结果一样
左外连接
select ename,dname from emp left outer join dept on deptId=did;
显示左侧表中所有的记录,先写哪个表哪个就是左,outer可以省略
右外连接
select ename,dname from emp right outer join dept on deptId=did;
显示右侧表中所有的记录,后写哪个表哪个就是右,outer可以省略
全连接
full join on
mysql不支持全连接
联合(全连接的解决的方法)
union 联合后合并相同的记录
union all 联合后不合并相同的记录
(select ename,dname from emp left outer join dept on deptId=did) union (select ename,dname from emp right outer join dept on deptId=did); |
显示左侧和右侧所有的记录