版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/88727757
SQL
多表查询
SQL1999 对 SQL 的支持
● 交叉连接(了解)
- 语法:
CROSS JOIN
- 交叉连接会产生笛卡尔积
- 示例图:
● 自然连接(了解)
- 语法:
NATURAL JOIN
- 自然连接会自动的分析管理条件进行连接,去掉笛卡尔积。
- 示例图:
USING 子句(了解)
- 直接管理操作
- 示例图:
ON 子句(重要)
- 自己编写连接条件,相当于 where
- 示例图:
左连接和右连接(重要)
- 语法:
--左连接
LEFT JOIN
--右连接
RIGHT JOIN
- 示例图:
以上操作完整源码:
--员工表和部门表左笛卡尔积
select * from emp , dept;
--交叉连接,等同于上面的笛卡尔积
select * from emp e cross join dept d;
--联合查询员工表和部门表
select * from emp e, dept d where e.deptno = d.deptno;
--自然连接,等同于上面的联合查询
select * from emp natural join dept;
-- 联合查询①
select * from emp e, dept d where e.deptno = d.deptno and d.deptno = 20;
--USING 子句,等同于上面的联合查询①
select * from emp join dept using(deptno) where deptno = 20;
--联合查询员工表和部门表②
select * from emp e , dept d where e.deptno = d.deptno ;
--ON 子句,等同于上面联合查询②
select * from emp e join dept d on e.deptno = d.deptno ;
--以下的 sql1999 的外连接查询(重点)
--左连接
select * from dept d left join emp e on d.deptno = e.deptno;
--相当于
select * from dept d, emp e where d.deptno = e.deptno(+);
--右连接
select * from emp e right join dept d on e.deptno = d.deptno;
--相当于
select * from emp e, dept d where e.deptno(+) = d.deptno;
--查询员工的领导
select e.empno, e.ename, e1.empno, e1.ename
from emp e
left join emp e1
on e.mgr = e1.empno;
--相当于
select e.empno, e.ename, e1.empno, e1.ename
from emp e, emp e1
where e.mgr = e1.empno(+);
如有错误,欢迎指正!