oracle(16)_SQL_多表联合查询_SQL1999 对 SQL 的支持_交叉连接 & 自然连接 & USING子句 & ON 子句 & 左连接和右连接

版权声明:如需转载,请注明出处 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(+);

如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/88727757