mysql复习(1)

                     MySQL复习(2)

/*
多表查询 : 同时查询两张表及以上就称为多表查询

笛卡尔积:笛卡尔全集  存在大量错误数据不能直接使用的
学习多表查询: 本质就是学习如何从笛卡尔积中筛选出正确的数据

连接条件 :当我们进行N(>=2)张表查询时,所需的连接至少是N-1个 

内连接 :

自然连接

左外连接

右外连接

自连接	

*/
– 等值连接
– 查询员工姓名、员工部门编号以及员工名称,要求值查询10部门的员工
SELECT e.ENAME,e.DEPTNO,d.DEPTNO,d.DNAME FROM emp e,dept d
WHERE e.DEPTNO=d.DEPTNO AND e.DEPTNO=10;

– 不等值连接的情况
– 查询员工姓名、月薪、月薪等级
SELECT e.ENAME,e.SAL,s.GRADE
FROM emp e, salgrade s
WHERE e.SAL BETWEEN s.LOSAL AND s.HISAL;

– INNER JOIN 内连接 INNER关键字可以省略
SELECT e.ENAME,e.DEPTNO,d.DEPTNO,d.DNAME
FROM emp e INNER JOIN dept d
ON e.DEPTNO = d.DEPTNO AND e.DEPTNO=10; – 连接查询时 连接条件需要写在on子句

– NATURAL JOIN 自然连接
– 自然连接: 会自动提取两张表中相同的字段进行比较,并且会消除重复字段,只保留一个
SELECT *
FROM emp e NATURAL JOIN dept d; – 自然连接不能有ON e.DEPTNO = d.DEPTNO

– LEFT JOIN 左外链接
– 统计各部门员工人数
– 以左边的表(部门表)为基准,用右边表(员工表)的数据进行匹配
– 使用左外连接时,只要是左边表存在的数据一定会查询出来,即使不满足连接条件
SELECT d.DEPTNO,COUNT(e.EMPNO)
FROM dept d LEFT JOIN emp e
ON d.DEPTNO = e.DEPTNO
GROUP BY d.DEPTNO

– RIGHT JOIN 右外连接
SELECT d.DEPTNO,COUNT(e.EMPNO)
FROM emp e RIGHT JOIN dept d
ON d.DEPTNO = e.DEPTNO
GROUP BY d.DEPTNO

– 全外连接 mysql不支持
SELECT d.DEPTNO,COUNT(e.EMPNO)
FROM emp e full JOIN dept d
ON d.DEPTNO = e.DEPTNO
GROUP BY d.DEPTNO;

– 自连接: 核心思想是将一张表看成两张表
– 查询出每个员工直接上司的姓名(要求显示 员工编号、姓名、上司的姓名)
SELECT e1.EMPNO,e1.ENAME,e2.ENAME
FROM emp e1,emp e2
WHERE e1.MGR = e2.EMPNO;

– UNION 合并两条查询结果(取并集) 去除重复数据
SELECT EMPNO,ENAME FROM emp WHERE SAL BETWEEN 1000 AND 1500 – 5
UNION
SELECT EMPNO,ENAME FROM emp WHERE COMM IS NOT NULL – 4

– UNION ALL 直接合并查询结果 不会去除重复数据
SELECT EMPNO,ENAME FROM emp WHERE SAL BETWEEN 1000 AND 1500 – 5
UNION ALL
SELECT EMPNO,ENAME FROM emp WHERE COMM IS NOT NULL – 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值