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 |
回复 | 转发 |