關于mysql中多表查詢詳解

多表查詢
? 1. 分類:
??? * 合并結果集(了解)
??? * 連接查詢
??? * 子查詢

合并結果集
? * 要求被合并的表中,列的類型和列數相同
? * union,去除重復行
? * union all,不去除重復行

?select?*?FROM?cd/*cd表*/UNION?ALLSELECT?*?FROM?ab;/*ab表*

連接查詢
? 1. 分類
??? * 內連接
??? * 外連接
????? > 左外連接
????? > 右外連接
????? > 全外連接(MySQL不支持)
??? * 自然連接(屬于一種簡化方式)

? 2. 內連接
??? * 方言:SELECT * FROM 表1 別名1, 表2 別名2 WHERE 別名1.xx=別名2.xx
??? * 標準:SELECT * FROM 表1 別名1 INNER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
??? * 自然:SELECT * FROM 表1 別名1 NATURAL JOIN 表2 別名2
??? * 內連接查詢出的所有記錄都滿足條件。
?
? 3. 外連接
??? * 左外SELECT * FROM 表1 別名1 LEFT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
????? > 左表記錄無論是否滿足條件都會查詢出來,而右表只有滿足條件才能出來。左表中不滿足條件的記錄,右表部分都為NULL
??? * 左外自然SELECT * FROM 表1 別名1 NATURAL LEFT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
??? * 右外SELECT * FROM 表1 別名1 RIGHT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
????? > 右表記錄無論是否滿足條件都會查詢出來,而左表只有滿足條件才能出來。右表不滿足條件的記錄,其左表部分都為NULL
??? * 右外自然SELECT * FROM 表1 別名1 NATURAL RIGHT OUTER JOIN 表2 別名2 ON 別名1.xx=別名2.xx
??? * 全鏈接:可以使用UNION來完成全鏈接

子查詢
  :查詢中有查詢(查看select關鍵字的個數!)
? 1. 出現的位置:
??? * where后作為條件存在
??? * from后作為表存在(多行多列)

? 2. 條件
??? * (***)單行單列:SELECT * FROM 表1 別名1 WHERE 列1 [=、>、=、(SELECT 列 FROM 表2 別名2 WHERE 條件)
??? * (**)多行單列:SELECT * FROM 表1 別名1 WHERE 列1 [IN, ALL, ANY] (SELECT 列 FROM 表2 別名2 WHERE 條件)
??? * (*)單行多列:SELECT * FROM 表1 別名1 WHERE (列1,列2) IN (SELECT 列1, 列2 FROM 表2 別名2 WHERE 條件)
??? * (***)多行多列:SELECT * FROM 表1 別名1 , (SELECT ….) 別名2 WHERE 條件

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享