MySQL的join类型
剛收到網(wǎng)易面試通知,順便回顧了下網(wǎng)易的筆試題,發(fā)現(xiàn)有一道題目理解不是很透,寫(xiě)個(gè)隨筆記錄下。
題目?jī)?nèi)容是這樣的:數(shù)據(jù)庫(kù)理論中取出右側(cè)關(guān)系中所有與左側(cè)關(guān)系的任一元組都不匹配的元組,用空值來(lái)填充所有來(lái)自左側(cè)關(guān)系的屬性,再把產(chǎn)生的元組加到自然連接的結(jié)果上,這種連接運(yùn)算為_(kāi)____。
在MySQL中,連接操作主要有五種:
1.交叉連接(CROSS JOIN)
交叉連接是最簡(jiǎn)單的連接類(lèi)型,它對(duì)所有涉及連接的表相乘,然后創(chuàng)建一個(gè)包含所有內(nèi)容的產(chǎn)物。例如有兩個(gè)表attribute和color內(nèi)容如下:
mysql> select * from attribute;
+-----------+
| attribute |
+-----------+
| eyes |
| hair |
+-----------+
2 rows in set (0.00 sec)
?
mysql> select * from color;
+-------+
| color |
+-------+
| brown |
| black |
| gray |
+-------+
3 rows in set (0.00 sec)
執(zhí)行交叉連接操作:
SELECT * FROM color,attribute; 或者SELECT * FROM color CROSS JOIN attribute;
結(jié)果如下:
+-------+-----------+
| color | attribute |
+-------+-----------+
| brown | eyes |
| brown | hair |
| black | eyes |
| black | hair |
| gray | eyes |
| gray | hair |
+-------+-----------+
6 rows in set (0.00 sec)
連接的結(jié)果為所有可能的結(jié)果集。
?
2.內(nèi)連接(INNER JOIN)
內(nèi)連接是構(gòu)建一個(gè)兩個(gè)表中連接部分相匹配的部分的結(jié)果集,不匹配的行將被排除在最后的結(jié)果集之外。也就是說(shuō)有匹配就返回,沒(méi)匹配就排除,http://www.w3cschool.cn/sql_join.html?中有介紹。語(yǔ)句:
SELECT * FROM tableA ,tableB WHERE tableA.id = tableB.id;
或者
SELECT * FROM tableA INNER JOIN tableB WHERE tableA.id = tableB.id;
?
3.外連接(LEFT JOIN,RIGHT JOIN)
交叉連接和內(nèi)連接是是對(duì)稱(chēng)的,也就是連接的雙方相互匹配,而外連接則是不對(duì)稱(chēng)的,連接的一方的所有行都包含在最后的記錄中,不管它們是否魚(yú)連接的另外一方匹配。
左外連接SELECT * FROM tableA LEFT JOIN tableB USING(id);
SELECT * FROM tableA LEFT JOIN tableB ON tableA.id = tableB.id;
右外連接
SELECT * FROM tableA RIGHT JOIN tableB USING(id);
SELECT * FROM tableA RIGHT JOIN tableB ON tableA.id = tableB.id;
上面是連接的用法,具體來(lái)說(shuō)當(dāng)兩個(gè)表中有同樣的字段的時(shí)候,可以用USING關(guān)鍵字(也可以用ON),而有不同字段的時(shí)候使用ON。
而左外連接的時(shí)候左邊的內(nèi)容都要出現(xiàn)在結(jié)果集中,而右外連接的時(shí)候右邊的內(nèi)容都要出現(xiàn)在結(jié)果集中。
?
4.自連接
自連接就是取出表中彼此關(guān)聯(lián)的數(shù)據(jù)內(nèi)容,假設(shè)有一個(gè)存儲(chǔ)目錄結(jié)構(gòu)的表, id表示本目錄ID,parent表示目錄的上級(jí)目錄,
SELECT a.label AS parent,b.label AS child FROM menu AS a, menu AS b WHERE a.id = b.parent;系統(tǒng)創(chuàng)建兩個(gè)虛擬表,然后進(jìn)行join操作。
5.聯(lián)合(UNION)
UNION將多個(gè)查詢的結(jié)果輸出連接到一個(gè)單獨(dú)結(jié)果集。
?
做題時(shí)不理解自然連接的概念,但是大致方向應(yīng)該是right join,所以寫(xiě)了,結(jié)果也是對(duì)了...
看了下數(shù)據(jù)庫(kù)系統(tǒng)概述,原來(lái)自然連接就是內(nèi)連接...害我糾結(jié)老半天。
預(yù)祝自己27號(hào)面試成功...
轉(zhuǎn)載于:https://www.cnblogs.com/bigdog/archive/2011/10/25/2224247.html
總結(jié)
以上是生活随笔為你收集整理的MySQL的join类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: onekey怎么用
- 下一篇: 几种常见SQL分页方式效率比较