JOIN的含義就如英文單詞“join”一樣,連接兩張表,大致分為內(nèi)連接,外連接,右連接,左連接,自然連接。這里描述先甩出一張用爛了的圖,然后插入測(cè)試數(shù)據(jù)。 ![]() 笛卡爾積:CROSS JOIN要理解各種JOIN首先要理解笛卡爾積。笛卡爾積就是將A表的每一條記錄與B表的每一條記錄強(qiáng)行拼在一起。所以,如果A表有n條記錄,B表有m條記錄,笛卡爾積產(chǎn)生的結(jié)果就會(huì)產(chǎn)生n*m條記錄。下面的例子,t_blog有10條記錄,t_type有5條記錄,所有他們倆的笛卡爾積有50條記錄。有五種產(chǎn)生笛卡爾積的方式如下。 ![]() 內(nèi)連接:INNER JOIN內(nèi)連接INNER JOIN是最常用的連接操作。從數(shù)學(xué)的角度講就是求兩個(gè)表的交集,從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄。有INNER JOIN,WHERE(等值連接),STRAIGHT_JOIN,JOIN(省略INNER)四種寫(xiě)法。至于哪種好我會(huì)在MySQL的JOIN(二):優(yōu)化講述。示例如下。 SELECT * FROM t_blog INNER JOIN t_type ON t_blog.typeId=t_type.id; SELECT * FROM t_blog,t_type WHERE t_blog.typeId=t_type.id; SELECT * FROM t_blog STRAIGHT_JOIN t_type ON t_blog.typeId=t_type.id; --注意STRIGHT_JOIN有個(gè)下劃線 SELECT * FROM t_blog JOIN t_type ON t_blog.typeId=t_type.id;
左連接:LEFT JOIN左連接LEFT JOIN的含義就是求兩個(gè)表的交集外加左表剩下的數(shù)據(jù)。依舊從笛卡爾積的角度講,就是先從笛卡爾積中挑出ON子句條件成立的記錄,然后加上左表中剩余的記錄(見(jiàn)最后三條)。 SELECT * FROM t_blog LEFT JOIN t_type ON t_blog.typeId=t_type.id;
右連接:RIGHT JOIN同理右連接RIGHT JOIN就是求兩個(gè)表的交集外加右表剩下的數(shù)據(jù)。再次從笛卡爾積的角度描述,右連接就是從笛卡爾積中挑出ON子句條件成立的記錄,然后加上右表中剩余的記錄(見(jiàn)最后一條)。 SELECT * FROM t_blog RIGHT JOIN t_type ON t_blog.typeId=t_type.id; 外連接:OUTER JOIN外連接就是求兩個(gè)集合的并集。從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄,然后加上左表中剩余的記錄,最后加上右表中剩余的記錄。另外MySQL不支持OUTER JOIN,但是我們可以對(duì)左連接和右連接的結(jié)果做UNION操作來(lái)實(shí)現(xiàn)。 SELECT * FROM t_blog LEFT JOIN t_type ON t_blog.typeId=t_type.id UNION SELECT * FROM t_blog RIGHT JOIN t_type ON t_blog.typeId=t_type.id; USING子句MySQL中連接SQL語(yǔ)句中,ON子句的語(yǔ)法格式為:table1.column_name = table2.column_name。當(dāng)模式設(shè)計(jì)對(duì)聯(lián)接表的列采用了相同的命名樣式時(shí),就可以使用 USING 語(yǔ)法來(lái)簡(jiǎn)化 ON 語(yǔ)法,格式為:USING(column_name)。 SELECT * FROM t_blog INNER JOIN t_type ON t_blog.typeId =t_type.id; +----+-------+--------+----+------+ | id | title | typeId | id | name | +----+-------+--------+----+------+ | 1 | aaa | 1 | 1 | C++ | | 2 | bbb | 2 | 2 | C | | 7 | ggg | 2 | 2 | C | | 3 | ccc | 3 | 3 | Java | | 6 | fff | 3 | 3 | Java | | 4 | ddd | 4 | 4 | C# | | 5 | eee | 4 | 4 | C# | +----+-------+--------+----+------+ 自然連接:NATURE JOIN自然連接就是USING子句的簡(jiǎn)化版,它找出兩個(gè)表中相同的列作為連接條件進(jìn)行連接。有左自然連接,右自然連接和普通自然連接之分。在t_blog和t_type示例中,兩個(gè)表相同的列是id,所以會(huì)拿id作為連接條件。 ![]() 補(bǔ)充博客開(kāi)頭給出的第一張圖除去講了的內(nèi)連接、左連接、右連接、外連接,還有一些特殊的韋恩圖,這里補(bǔ)充一下。 ![]() 寫(xiě)完這篇博客發(fā)現(xiàn)有點(diǎn)“孔乙己:茴字的四種寫(xiě)法的感覺(jué)”,但還是有收獲的。另外,等三面通知等的好急啊!! 引用http://www.cnblogs.com/fudashi/p/6572101.html http://blog.csdn.net/wjc19911118/article/details/9716391 |
|