1. 程式人生 > >資料庫-連線查詢

資料庫-連線查詢

1、連線查詢的幾個概念

連線方式

  • 內連線-INNER  JOIN

顯示左表及右表符合連線條件的記錄

  • 左外連線-LEFT  JOIN

顯示左表的全部記錄及右表符合連線條件的記錄,右表不符合條件的顯示NULL

  • 右外連線-RIGHT  JOIN

顯示右表的全部記錄及左表符合連線條件的記錄,左表不符合條件的顯示NULL

2、等值連線

內連線

  • INNER  JOIN

內連線,也稱為等值連線

顯示左表及右表符合連線條件(欄位匹配關係)的記錄

將兩張表的列組合在一起,產出新的結果集,結果集是兩個表的公共部分

on的方式,using:select  *  from  boys  inner  on  girls  using(matchNum);

  • 隱式內連線、JOIN、CROSS  JOIN

不使用on語法時,join、inner  join、逗號、cross  join結果相同,都是取2個表的笛卡爾積

3、左外連線

  • LEFT  JOIN
  • 讀取左表全部資料,即便右表沒有對應資料
  • 如果右表沒有匹配記錄,右側結果集欄位將為null
  • A  LEFT  JOIN  B:以A表為基礎連線B查詢結果

查詢出所有A記錄

       SELECT  *  FROM  A   LEFT  JOIN  B  ON  A.KEY=B.KEY;

查詢出不在B表中的A記錄

       SELECT  *  FROM  A  LEFT  JOIN  B  ON  A.KEY=B.KEY   WHERE  B.KEY  IS  NULL;

4、右外連線

  • RIGHT  JOIN
  • 讀取右表全部資料,即便左表沒有對應資料
  • A  RIGHT  JOIN  B:以B表為基礎連線A查詢結果,與LEFT JOIN相反

查詢出所有B記錄:SELECT  *  FROM  A  RIGHT  JOIN  B  ON  A.KEY=B.KEY;

查詢出不在A表中的B記錄:SELECT  *  FROM  A  RIGHT  JOIN  B  ON  A.KEY=B.KEY  WHERE  A.KEY  IS  NULL;

5、完全連線

全連線

  • 完全連線返回左表和右表中的所有行
  • 用UNION  ALL的方式達到FULL  JOIN的效果
  • 查詢A表B表所有資料

SELECT  *  FROM  A  LEFT  JOIN  B  ON  A.KEY=B.KEY  WHERE  B.KEY  IS  NULL;

UNION   ALL

SELECT  *   FROM  A   RIGHT  JOIN  B  ON  A.KEY=B.KEY  WHERE  A.KEY  IS  NULL;

  • UNION是去重查詢結果集,UNION  ALL是不去重結果集

SELECT 1  UNION SELECT 1;
           SELECT 1  UNION ALL SELECT 1;