MySQL的join类型
剛收到網易面試通知,順便回顧了下網易的筆試題,發現有一道題目理解不是很透,寫個隨筆記錄下。
題目內容是這樣的:數據庫理論中取出右側關系中所有與左側關系的任一元組都不匹配的元組,用空值來填充所有來自左側關系的屬性,再把產生的元組加到自然連接的結果上,這種連接運算為_____。
在MySQL中,連接操作主要有五種:
1.交叉連接(CROSS JOIN)
交叉連接是最簡單的連接類型,它對所有涉及連接的表相乘,然后創建一個包含所有內容的產物。例如有兩個表attribute和color內容如下:
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)
執行交叉連接操作:
SELECT * FROM color,attribute; 或者SELECT * FROM color CROSS JOIN attribute;
結果如下:
+-------+-----------+
| color | attribute |
+-------+-----------+
| brown | eyes | 
| brown | hair | 
| black | eyes | 
| black | hair | 
| gray | eyes | 
| gray | hair | 
+-------+-----------+
6 rows in set (0.00 sec)
連接的結果為所有可能的結果集。
?
2.內連接(INNER JOIN)
內連接是構建一個兩個表中連接部分相匹配的部分的結果集,不匹配的行將被排除在最后的結果集之外。也就是說有匹配就返回,沒匹配就排除,http://www.w3cschool.cn/sql_join.html?中有介紹。語句:
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)
交叉連接和內連接是是對稱的,也就是連接的雙方相互匹配,而外連接則是不對稱的,連接的一方的所有行都包含在最后的記錄中,不管它們是否魚連接的另外一方匹配。
左外連接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;
上面是連接的用法,具體來說當兩個表中有同樣的字段的時候,可以用USING關鍵字(也可以用ON),而有不同字段的時候使用ON。
而左外連接的時候左邊的內容都要出現在結果集中,而右外連接的時候右邊的內容都要出現在結果集中。
?
4.自連接
自連接就是取出表中彼此關聯的數據內容,假設有一個存儲目錄結構的表, id表示本目錄ID,parent表示目錄的上級目錄,
SELECT a.label AS parent,b.label AS child FROM menu AS a, menu AS b WHERE a.id = b.parent;系統創建兩個虛擬表,然后進行join操作。
5.聯合(UNION)
UNION將多個查詢的結果輸出連接到一個單獨結果集。
?
做題時不理解自然連接的概念,但是大致方向應該是right join,所以寫了,結果也是對了...
看了下數據庫系統概述,原來自然連接就是內連接...害我糾結老半天。
預祝自己27號面試成功...
轉載于:https://www.cnblogs.com/bigdog/archive/2011/10/25/2224247.html
總結
以上是生活随笔為你收集整理的MySQL的join类型的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: onekey怎么用
- 下一篇: 带有诗意的游戏名字819个
