您好,登錄后才能下訂單哦!
1. JOIN語法(精簡后)
table_reference:
table_factor
| join_table
table_factor:
table_subquery [AS] alias
| ( table_references )
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
join_condition:
ON conditional_expr
| USING (column_list)
2. JOIN分類: 內連接, 外連接.
2.1 內連接(INNER JOIN)
a. 在MySQL中, JOIN, CROSS JOIN, and INNER JOIN語法是等價的; 不指定ON條件, 得到的是笛卡爾積(That is, each and every row in the first table is joined to each and every row in the second table).
b. 內連接(INNER JOIN), 或稱等值連接, 其只顯示滿足條件的記錄.
若表left_tbl和right_tbl, 在表示內連接時, 有兩種形式: left_tbl INNER JOIN right_tbl, 和left_tbl,(comma) right_tbl. 該兩種形式在語法上是等價的, 但是JOIN的優先級高于,(comma operator), 混用時可能產生錯誤, 最好使用JOIN.
內連接的兩種表現形式, 分別對應了兩種獲取數據的方式: ON, 和WHERE. 在使用ON時, 也都可以改寫為,(comma). 但ON說明的是: 如何完成表間的JOIN操作, 而WHERE只是在結果集種過濾出滿足條件的記錄, 含義還是有區別的.
2.2 外連接(OUTER JOIN)
a. 外連接有兩種形式: LEFT | RIGHT [OUTER] JOIN(OUTER可省略), 常見用于獲取在表left_tbl, 而不在表right_tbl中的數據.
SELECT left_tbl.* FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id WHERE right_tbl.id IS NULL;
b. 若表a, 和b中有相同的字段, 如c1, c2, c3, 那么下面的兩種寫法是等價的:
a LEFT JOIN b USING (c1, c2, c3)
a LEFT JOIN b ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3
c. 對于a LEFT JOIN b USING (c1, c2, c3), 和a NATURAL LEFT JOIN b獲取的結果集, 有稍許不同, 后者刪除了重復字段. 這里NATURAL暫看成個關鍵字吧, 可和內外連接結合使用, NATURAL JOIN的特點是, 同名字段相連接, 且去重. 其實際作用不大.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。