MySQL中的各種JOIN(CROSS JOIN, INNER JOIN, LEFT [OUTER]

MySQL中的各種JOIN

1. 笛卡爾積(交叉連接)
在MySQL中可以爲CROSS JOIN或者省略CROSS即JOIN,或者使用’,’

SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2

由於其返回的結果爲被連接的兩個數據表的乘積,因此當有WHERE, ON或USING條件的時候一般不建議使用,因爲當數據表項目太多的時候,會非常慢。
一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

2. 內連接INNER JOIN
在MySQL中把INNER JOIN叫做等值連接,即需要指定等值連接條件
在MySQL中CROSS和INNER JOIN被劃分在一起,不明白。
參看MySQL幫助手冊
http://dev.mysql.com/doc/refman/5.0/en/join.html
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]

3. MySQL中的外連接,分爲左外連接和右連接,
即除了返回符合連接條件的結果之外,還要返回左表(左連接)或者右表(右連接)中不符合連接條件的結果,相對應的使用NULL對應。

a. LEFT [OUTER] JOIN
SELECT column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.column=table2.column
除了返回符合連接條件的結果之外,還需要顯示左表中不符合連接條件的數據列,相對應使用NULL對應

b. RIGHT [OUTER] JOIN
SELECT column_name FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column=table2.column
RIGHT與LEFT JOIN相似不同的僅僅是除了顯示符合連接條件的結果之外,還需要顯示右表中不符合連接條件的數據列,相應使用NULL對應

——————————————–
添加顯示條件WHERE, ON, USING
1. WHERE子句
2. ON
3. USING子句,如果連接的兩個表連接條件的兩個列具有相同的名字的話可以使用USING
例如
SELECT <column_name> FROM <table1> LEFT JOIN <table2> USING (<column_name>)

連接多餘兩個表的情況
舉例:
mysql> SELECT artists.Artist, cds.title, genres.genre
-> FROM cds
-> LEFT JOIN genres
-> ON cds.genreID = genres.genreID
-> LEFT JOIN artists
-> ON cds.artistID = artists.artistID;
或者
mysql> SELECT artists.Artist, cds.title, genres.genre
-> FROM cds
-> LEFT JOIN genres
-> ON cds.genreID = genres.genreID
-> LEFT JOIN artists
-> ON cds.artistID = artists.artistID
-> WHERE (genres.genre = ‘Pop’);
——————————————–

另外需要注意的地方

在MySQL中涉及到多表查詢的時候,需要根據查詢的情況,想好使用哪種連接方式效率更高。
1. 交叉連接(笛卡爾積)或者內連接
[INNER | CROSS] JOIN
2. 左外連接LEFT [OUTER] JOIN或者右外連接RIGHT [OUTER] JOIN

注意指定連接條件WHERE, ON,USING.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章