07多表查询

消除笛卡尔积,必须有关联字段;

SELECT *

FROM emp,dept

WHERE emp.deptno=dept.deptno;

都习惯与将关联字段设置为同名;

任何时候多表查询都必须存在有关联关系,没有关联关系是没有多表查询的;

强烈建议用别名;

SELECT e.*,d.dname

FROM emp e ,dept d

WHERE e.deptno=d.deptno;

案例1:要求查询出每个雇员的编号、姓名、职位、基本工资、部门名称、部门位置

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno=d.deptno;

案例2:要求查询出每个雇员的编号、姓名、职位、基本工资、工资等级

SELECT e.empno,e.ename,e.job,e.sal,s.grade

FROM emp e ,salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

案例3:要求查询出每个雇员的编号、姓名、职位、基本工资、部门名称、工资等级

SELECT e.empno,e.ename,e.job,e.sal,d.dept,s.grade

FROM emp e ,dept d,salgrade s

WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal;

以上用的where字句都是使用了内连接;内连接中不满足条件的不出现;

外连接:左外连接、右外连接、全外连接;如果考虑数据不全的时候就使用外连接;

左外连接

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno=d.deptno(+);--左表不满足条件的出现了;

右外连接

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno(+)=d.deptno;--右表不满足条件的出现了;

SQL:1999语法

左外连接:SELECT * FROM emp e LEFT OUTER JOIN dept d ON (e.deptno=d.deptno);

SELECT * FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno=d.deptno);

SELECT * FROM emp e FULL OUTER JOIN dept d ON (e.deptno=d.deptno);

集合查询

UNION:取消重复元素,将所有集合合并,如果要重复数据用UNION ALL

UNION ALL:

SELECT * FROM EMP

UNION ALL

SELECT * FROM EMP WHERE DEPTNO=10;

INTERSECTT:交集

MINUS:差集

猜你喜欢

转载自blog.csdn.net/weixin_41556724/article/details/86062653