posted on 2007-01-05 17:01 SYBIL@BLOGJAVA 閱讀(872) 評論(1) 編輯 收藏
7.13 JOIN句法 MySQL支持下列用于SELECT語句的JOIN句法: table_reference, table_reference table_reference [CROSS] JOIN table_reference table_reference INNER JOIN table_reference table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr table_reference LEFT [OUTER] JOIN table_reference USING (column_list) table_reference NATURAL LEFT [OUTER] JOIN table_reference { oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr } 上述最后的LEFT OUTER JOIN的句法只是為了與ODBC兼容而存在的。 一個表可以是使用aliasedtbl_name AS alias_name或tbl_name alias_name的起的別名。 mysql> select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.name; INNER JOIN和,(逗號)在語義上是等價的,都是進行一個在使用的表之間的全聯結。通常,你指定表應該如何用WHERE條件聯結起來。 ON條件是可以用在一個WHERE子句形式的任何條件。 如果在一個LEFT JOIN中沒有右表的匹配記錄,一個所有列設置為NULL的行被用于右表。你可以使用這個事實指出表中在另一個表中沒有對應記錄的記錄: mysql> select table1.* from table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id is NULL; 這個例子找出在table1中所有的行,其id值在table2中不存在(即,所有table1中的在table2中沒有對應行的行)。當然這假定table2.id被聲明為NOT NULL。 USING (column_list)子句命名一系列必須存在于兩個表中的列。 例如一個USING子句: A LEFT JOIN B USING (C1,C2,C3,...) 被定義成在語義上等同一個這樣的ON表達式: A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,... 2個表的NATURAL LEFT JOIN被定義為在語義上等同于一個有USING子句命名在兩表中存在的所有列的一個LEFT JOIN。 STRAIGHT_JOIN等同于JOIN,除了左表在右表之前被讀入,這能用于這些情況,聯結優化器將表的順序放錯了。 一些例子: mysql> select * from table1,table2 where table1.id=table2.id; mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id; mysql> select * from table1 LEFT JOIN table2 USING (id); mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id; 回復 更多評論
Powered by: BlogJava Copyright © SYBIL@BLOGJAVA