MySQL中的各種JOIN
1. 笛卡爾積(交叉連接) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如 SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2 由于其返回的結果為被連接的兩個數據表的乘積,因此當有WHERE<wbr></wbr>, ON或USING條件的時候一般不建議使用,因為當數據表項目太多<wbr></wbr>的時候,會非常慢。 一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN 2. 內連接INNER JOIN 在MySQL中把INNER JOIN叫做等值連接,即需要指定等值連接條件 在MySQL中CROSS和INNER JOIN被劃分在一起,不明白。 參看MySQL幫助手冊 http://dev.mysql.com/doc<wbr></wbr>/refman/5.0/en/join.html join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition] 3. MySQL中的外連接,分為左外連接和右連接, 即除了返回符合連接條件的結果之外,還要返回左表(左連接<wbr></wbr>)或者右表(右連接)中不符合連接條件的結果,相對應的使用NUL<wbr></wbr>L對應。 a. LEFT [OUTER] JOIN SELECT column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.column=table2.column 除了返回符合連接條件的結果之外,還需要顯示左表中不符合連接條件<wbr></wbr>的數據列,相對應使用NULL對應 b. RIGHT [OUTER] JOIN SELECT column_name FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column=table2.column RIGHT與LEFT JOIN相似不同的僅僅是除了顯示符合連接條件的結果之外<wbr></wbr>,還需要顯示右表中不符合連接條件的數據列,相應使用NULL對應 ------------------------------<wbr></wbr>-------------- 添加顯示條件WHERE, ON, USING 1. WHERE子句 2. ON 3. USING子句,如果連接的兩個表連接條件的兩個列具有相同的名字<wbr></wbr>的話可以使用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'); ------------------------------<wbr></wbr>-------------- 另外需要注意的地方 在MySQL中涉及到多表查詢的時候,需要根據查詢的情況<wbr></wbr>,想好使用哪種連接方式效率更高。 1. 交叉連接(笛卡爾積)或者內連接 [INNER | CROSS] JOIN 2. 左外連接LEFT [OUTER] JOIN或者右外連接RIGHT [OUTER] JOIN 注意指定連接條件WHERE, ON,USING. ------------------------------<wbr></wbr>-------------- 看懂MySQL手冊定義的MySQL各種JOIN的用法: //看懂如下的定義方式
MySQL手冊中提到的JOIN需要注意的地方:
In MySQL,
CROSS JOIN
is a syntactic equivalent to
INNER JOIN
(they can replace each other). In standard SQL, they are not equivalent.
INNER JOIN
is used with an
ON
clause,
CROSS JOIN
is used otherwise.
手冊中提到 標準SQL中CROSS JOIN交叉連接(笛卡爾積)和內連接INNER JOIN不同,但是MySQL中兩者是相同的,即有[CROSS | INNER] JOIN,兩者可以互相替代,而且可以只使用JOIN 2. A table reference can be aliased using
or
tbl_name alias_name
:
SELECT t1.name , t2.salary參考資料 http://www.w3schools.com/sql<wbr></wbr>/sql_join.asp http://www.keithjbrown.co.uk<wbr></wbr>/vworks/mysql/mysql_p5.php http://dev.mysql.com/doc<wbr></wbr>/refman/5.0/en/join.html |
回復 | 轉發 |
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
