多表關聯查詢

關聯查詢/ 多表查詢

當查詢的結果來自多張表的時候,使用關聯查詢。

SELECT * FROM EMP ;
SELECT * FROM DEPT;


SELECT E.*,D.*
FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO;

內關聯

取2個表的交集部門,通過關聯字段比較,如果匹配不到的,就不取值。

  1. oracle 內關聯寫法
    這些寫法,區別不大,既是關聯條件也是過濾條件。只是執行順序不同而已
--
SELECT * 
FROM EMP E, DEPT D   -- 如果不寫下面的關聯條件,那麼直接查詢2張表,會產生笛卡爾積
WHERE  E.deptno = D.deptno;  -- 關聯字段

  /*  WHERE 條件1
    AND 條件2

在這裏插入圖片描述

SELECT * 
FROM EMP E, DEPT D   -- 如果不寫下面的關聯條件,那麼直接查詢2張表,會產生笛卡爾積
--WHERE  E.deptno = D.deptno;  -- 關聯字段

在這裏插入圖片描述
2. MYSQL 寫法

SELECT * 
FROM EMP E  INNER JOIN DEPT D 
ON   E.deptno = d.deptno ;
   INNER JOIN 
      ON  條件1
      WHERE  條件2
      
   這種寫法 ON 後面跟的是關聯條件, WHERE 後面纔是過濾條件。

外關聯

左外/右外

1.ORACLE 寫法

 SELECT * 
 FROM EMP E  ,  DEPT D
 WHERE E.deptno = D.deptno(+) ;  --左外
 SELECT * 
 FROM EMP E  ,  DEPT D
 WHERE E.deptno(+) = D.deptno ;  --右外

2.MYSQL寫法

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 ;

全外關聯
ORACLE 和 SQL 寫法一樣

SELECT * 
FROM EMP E  FULL  /*OUTER*/ JOIN DEPT D 
ON   E.deptno = d.deptno ;  

在這裏插入圖片描述

CREATE TABLE TESTA(C1 NUMBER);
CREATE TABLE TESTB(C2 NUMBER);


SELECT * 
FROM TESTA FULL JOIN TESTB 
ON C1 = C2

等值關聯

SELECT  * 
FROM EMP E ,DEPT D 
WHERE E.deptno = D.deptno ;

不等值關聯

假設dept表示球隊信息表,通過SQL查出各個球隊可能的比賽組合

  1. 不考慮主客場的比賽組合
SELECT A.deptno , B.deptno
FROM DEPT A ,DEPT B
WHERE A.deptno > B.deptno ;

在這裏插入圖片描述
2. 主客場的比賽組合

 SELECT A.deptno , B.deptno
FROM DEPT A ,DEPT B
WHERE A.deptno != B.deptno ;

在這裏插入圖片描述

3.查出領導的姓名 ,員工的姓名

SELECT E.ENAME ,--領導姓名
	   F.ename -- 員工姓名
FROM EMP E ,EMP F
WHERE E.empno = F.mgr;--一張表當兩張表用,關聯條件

在這裏插入圖片描述

4.查出員工的工資等級

SELECT E.ENAME ,
       E.SAL ,
       S.*
FROM EMP E, salgrade S --員工等級表
WHERE E.SAL BETWEEN S.losal AND S.hisal;

在這裏插入圖片描述

發佈了46 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章