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

 

 

 

                    

posted @ 2022-12-14 23:13  ZitWang  阅读(61)  评论(0)    收藏  举报