MySQL之連接查詢
1.內連接:只列出匹配的記錄
語法:
SELECT … FROM join_table
INNER JOIN join_table2
ON join_condition
WHERE where_defnition
解釋:只列出這些連接表中與連接條件相匹配的數據行。INNER可以不寫,則默認為內連接。[ON join_condition]裏面寫的是連接的條件。
舉例:
select e.name,d.name from employee e inner join department d on e.dept_id=d.id;(常用)
等價於:
select e.name,d.name from employee e join
等價於:
select e.name,d.name from employee e,department d where e.dept_id=d.id;
2.外連接:
左外連接(LEFT [OUTER] JOIN)
右外連接(RIGHT [OUTER] JOIN)
全外連接(FULL [OUTER] JOIN) 註:MySQL5.1的版本暫不支持
解釋:不僅列出與連接條件(on)相匹配的行,還列出左表table1(左外連接)、或右表table2(右外連接)、或兩個表(全外連接)中所有符合WHERE過濾條件的數據行。一般都是用左連接或者外連接.其中,[OUTER]部分可以不寫,(LEFT | RIGHT | FULL)部分要寫其中一個。
2.1 左外連接:左表列出全部,右表只列出匹配的記錄。
舉例:
SELECT m.`name` ,b.name from sys_menu m LEFT OUTER JOIN sys_button b ON m.id=b.menuId
等價於:
SELECT m.`name` ,b.name from sys_menu m LEFT JOIN sys_button b ON m.id=b.menuId
2.2 右外連接 :右表列出全部,左表只列出匹配的記錄。
舉例:
SELECT m.`name` ,b.name from sys_menu m RIGHT JOIN sys_button b ON m.id=b.menuId
等價於:
SELECT m.`name` ,b.name from sys_menu m RIGHT OUTER JOIN
3 交叉連接:
解釋:假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}
其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
等價於:(薦)
SELECT … FROM table1, table2;
4.自連接:
解釋:參與連接的表都是同一張表。(通過給表取別名虛擬出兩張表)
註:非常重要,在JavaWeb中的目錄樹中用的特別多。(使用什麽連接由需求而定)
舉例:
SELECT m.`name` parent ,m2.`name` c from sys_menu m LEFT JOIN sys_menu m2 on m.id=m2.parentId
說明: 查詢當前所有菜單的名稱以及其子菜單的名稱
MySQL之連接查詢