连接查询
定义:将多个表以某个或某列为条件进行连接操作而检索出关联数据的过程称为连接查询。
分类:内关联、外关联(全外关联、左外关联、右外关联)、交叉关联
交叉关联:表与表之间直接进行关联,不加筛选条件
作用:会产生笛卡尔积
--语法结构:SELECT 字段名 FROM 表1 CROSS JOIN 表2; SELECT * FROM EMP E CROSS JOIN DEPT D;
--多表关联 SELECT * FROM EMP E,DEPT D;
内关联:满足筛选条件的数据才显示(显示的是两个表匹配的数据)
--语法结构:SELECT 字段名 FROM 表1 [INNER] JOIN 表2 ON 筛选条件; SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
--多表关联 SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO;
--在内关联后加AND与WHERE条件是没有区别 SELECT E.EMPNO, E.ENAME, E.DEPTNO, E.SAL, D.DEPTNO, D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO AND E.SAL > 2000; SELECT E.EMPNO, E.ENAME, E.DEPTNO, E.SAL, D.DEPTNO, D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO WHERE E.SAL > 2000;
全外关联:不分主表和从表,有的数据就显示,没有的数据就用NULL来代替(两个表的数据不管有没有匹配上,都显示)
--语法结构:SELECT 字段名 FROM 表1 FULL [OUTER] JOIN 表2 ON 筛选条件; SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E FULL OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
左外关联:分主表和从表,主表的显示字段都会有数据,从表的显示字段如果匹配上就有数据,没有匹配上就用NULL代替
--语法结构:SELECT 字段名 FROM 主表 LEFT [OUTER] JOIN 从表 ON 筛选条件; SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO = D.DEPTNO; --多表关联:在左外关联中,筛选条件后面加了(+)的是从表 SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO(+); SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM DEPT D LEFT JOIN EMP E ON E.DEPTNO = D.DEPTNO; --在左外关联后加AND条件与WHERE条件是有区别的 SELECT E.EMPNO, E.ENAME, E.DEPTNO, E.SAL, D.DEPTNO, D.DNAME FROM EMP E LEFT JOIN DEPT D ON (E.DEPTNO = D.DEPTNO AND E.SAL > 2000); SELECT E.EMPNO, E.ENAME, E.DEPTNO, E.SAL, D.DEPTNO, D.DNAME FROM EMP E LEFT JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) WHERE E.SAL > 2000;
右外关联:分主表和从表,主表的显示字段都会有数据,从表的显示字段如果匹配上就有数据,没有匹配上就用null代替
--语法结构:SELECT 字段名 FROM 从表 RIGHT [OUTER] JOIN 主表 ON 筛选条件; SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E RIGHT JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
**********LEFT JOIN ... ON 后面加 WHERE 与 AND 的区别 **********
参考:https://www.cnblogs.com/HKUI/p/8536969.html
**********使用(+)表示从表的后面加 WHERE 与 AND 的区别 **********
原文:https://www.cnblogs.com/ZeroITStudy/p/13760923.html