My SQL資料表多表查詢
多表連線查詢
資料表的連線查詢常用的有內連線和外連線兩種,其中外連線又分為左連線和右連線。
內連線查詢
通過INNER JOIN……ON關鍵字實現 命令如下: SELECT field1,field2,……fieldn from table_name INNER JOIN join_table ON join_condition; ***ON 後面的欄位其實就是外來鍵約束中兩個對應的列名
外連線查詢
命令如下: SELECT field1,field2,……fieldn from table_name LEFT / RIGHT JOIN join_table ON join_condition;
**左連線和右連線查詢的區別是: 左連線的主表是 'table_name',右連線的主表是'join_table' 查詢時以主表資料為準,主表中有的資料才會顯示,主表中沒有的資料及時附表中有也不顯示在結果中!!
子查詢
子查詢可以將一張表的資料作為條件去查另一張表
單行單列
SELECT */field from table_a WHERE field1 > (SELECT field1 from table_b where field2 = '舉例';
釋義:從B表中查詢出欄位=‘舉例’的資料對應的欄位1,那麼這個查詢結果一定是一個單行單列的資料,再用這個資料查詢最終想要輸出的資料 要求兩個表起碼有一個共有欄位,括號內返回的值必須是單行單列的值!
單行多列
SELECT */field from table_a WHERE (field1,field2) > (SELECT (field1,field2) from table_b where field2 = '舉例'; 釋義:從B表中查詢出欄位=‘舉例’的資料對應的欄位1和欄位2,再用這兩個資料查詢最終想要輸出的資料 要求兩個表起碼有兩個共有欄位,括號內的返回值和查詢的列名必須一致!
單列多行
SELECT */field from table_a WHERE field1 in (SELECT field1 from table_b); →查詢結果在返回欄位結果內 與其對應的是 not in
SELECT */field from table_a where field1 >= ANY(SELECT field1 from table_b); →只能查詢數值,滿足ANY後面的返回結果中的任意一個就返回查詢結果
SELECT */field from table_a where field1 >= ALL(SELECT field1 from table_b); →只能查詢數值,滿足ALL後面的返回結果中的全部數值才返回查詢結果