Mysql数据库(4)-Select语句进阶
Mysql数据库-Select语句进阶
一.Mysql分页查询
其实是分页显示,基本语法:
select 列名 from 表名
order by 列名
limit a, b
解释:limit a:每页要显示的记录数*(页数-1),b:每页显示的记录数,从a+1行开始取数据,取b行作为一页显示
二.数据分组
数据分组各子句顺序:
SELECT deptno, AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno
HAVING avg_sal > 1000
ORDER BY avg_sal DESC
LIMIT 0,2
三.Mysql多表查询
1.分析与引出
需求的数据在不止一个表中怎么办? --使用多表查询
直接select * from 表a,表b会导致结果为笛卡尔集,因此需要设置多表查询时的条件以保证不会产生笛卡尔集。
在多表查询中,当多个表的列不重复时,才可以直接写列名, 否则需指定使用谁的列
SELECT ename,sal,dname,emp.deptno
FROM emp, dept
WHERE emp.deptno = dept.deptno
2.(查询条件数>=表的个数-1)才不会产生笛卡尔集,查询条件的要根据表与表之间列的联系进行确定
四.Mysql自连接
在同一张表的连接查询--将一张表看成两张表,取别名使用
实例:
-- 员工和上级是通过 emp 表的 mgr 列关联:
-- 自连接的特点 1. 把同一张表当做两张表使用
-- 2. 需要给表取别名 表名 表别名
-- 3. 列名不明确,可以指定列的别名 列名 as 列的别名
SELECT worker.ename AS '职员名' , boss.ename AS '上级名'
FROM emp worker, emp boss
WHERE worker.mgr = boss.empno;
SELECT * FROM emp
五.Mysql嵌套查询(子查询)
子查询是指嵌入在其它 sql 语句中的 select 语句,也叫嵌套查询
1.多行子查询:返回多行数据,关键字in
将子查询结果做为where子句条件的一部分使用
select ename, job, sal, deptno
from emp
where job in (
SELECT DISTINCT job
FROM emp
WHERE deptno = 10
) and deptno <> 10
2.多行子查询all与any的使用
eg:select sal,xx,... from emp
where sal > all/any(查询语句)
3.多列子查询
SELECT * FROM emp
WHERE (列名, 列名) = (查询语句)
4.(子查询结果也可以当成一张临时表来使用),可以在结合其他表使用多表查询
SELECT ename, sal, temp.max_sal, emp.deptno
FROM emp, (
SELECT deptno, MAX(sal) AS max_sal
FROM emp
GROUP BY deptno
) temp
WHERE emp.deptno = temp.deptno AND emp.sal = temp.max_sal

浙公网安备 33010602011771号