mysql多表查詢(xún)連接方式

內(nèi)連接
  • 語(yǔ)法
    SELECT 字段列表 FROM A表 INNER JOIN B表 ON 關(guān)聯(lián)條件 WHERE 等其他子句;
  • 示范
    SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id);


    image.png
外連接(OUTER JOIN)
  • 左外連接
  • 語(yǔ)法
    A SELECT 字段列表 FROM A表 LEFT JOIN B表 ON 關(guān)聯(lián)條件 WHERE 等其他子句;
  • 示范
    SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ;


    image.png

    左連接會(huì)把join左邊的表左右數(shù)據(jù)都顯示出來(lái),右邊表符合條件的顯示出來(lái)

  • 右外連接
  • 語(yǔ)法
    FROM A表 RIGHT JOIN B表 ON 關(guān)聯(lián)條件 WHERE 等其他子句;
  • 示范
    SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ;


    image.png
滿(mǎn)外連接(FULL OUTER JOIN)

滿(mǎn)外連接的結(jié)果 = 左右表匹配的數(shù)據(jù) + 左表沒(méi)有匹配到的數(shù)據(jù) + 右表沒(méi)有匹配到的數(shù)據(jù)。
SQL99是支持滿(mǎn)外連接的。使用FULL JOIN 或 FULL OUTER JOIN來(lái)實(shí)現(xiàn)。
需要注意的是,MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替。

union的使用
  • union
    合并查詢(xún)結(jié)果 利用UNION關(guān)鍵字,可以給出多條SELECT語(yǔ)句,并將它們的結(jié)果組合成單個(gè)結(jié)果集。合并
    時(shí),兩個(gè)表對(duì)應(yīng)的列數(shù)和數(shù)據(jù)類(lèi)型必須相同,并且相互對(duì)應(yīng)。各個(gè)SELECT語(yǔ)句之間使用UNION或UNION ALL關(guān)鍵字分隔。
  • 語(yǔ)法格式
    SELECT column,... FROM table1 UNION [ALL] SELECT column,... FROM table2
    UNION 操作符返回兩個(gè)查詢(xún)的結(jié)果集的并集,去除重復(fù)記錄。
  • UNION ALL
    UNION ALL操作符返回兩個(gè)查詢(xún)的結(jié)果集的并集。對(duì)于兩個(gè)結(jié)果集的重復(fù)部分,不去重。
    注意:執(zhí)行UNION ALL語(yǔ)句時(shí)所需要的資源比UNION語(yǔ)句少。如果明確知道合并數(shù)據(jù)后的結(jié)果數(shù)據(jù)
    不存在重復(fù)數(shù)據(jù),或者不需要去除重復(fù)的數(shù)據(jù),則盡量使用UNION ALL語(yǔ)句,以提高數(shù)據(jù)查詢(xún)的效
    率。
7種sql join的實(shí)現(xiàn)
image.png
  • 代碼實(shí)現(xiàn)
中圖:內(nèi)連接 A∩B SELECT employee_id,last_name,department_name FROM employees e JOIN departments d ON e.`department_id` = d.`department_id`;
左上圖:左外連接 SELECT employee_id,last_name,department_name FROM employees e LEFT JOIN departments d ON e.`department_id` = d.`department_id`;
右上圖:右外連接 SELECT employee_id,last_name,department_name FROM employees e RIGHT JOIN departments d ON e.`department_id` = d.`department_id`;
左中圖:A - A∩B SELECT employee_id,last_name,department_name FROM employees e LEFT JOIN departments d ON e.`department_id` = d.`department_id` WHERE d.`department_id` IS NULL
右中圖:B-A∩BSELECT employee_id,last_name,department_name FROM employees e RIGHT JOIN departments d ON e.`department_id` = d.`department_id` WHERE e.`department_id` IS NULL
左中圖 + 右中圖 A ∪B- A∩B 或者 (A - A∩B) ∪ (B - A∩B) SELECT employee_id,last_name,department_name FROM employees e LEFT JOIN departments d ON e.`department_id` = d.`department_id` WHERE d.`department_id` IS NULL UNION ALL SELECT employee_id,last_name,department_name FROM employees e RIGHT JOIN departments d ON e.`department_id` = d.`department_id` WHERE e.`department_id` IS NULL
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容