mysql連線查詢,子查詢,聯合查詢
一、連線查詢(多表查詢)
emp表
dept表
1.交叉連線
實際上,交叉連線是將兩個表不設定任何條件的連線結果。
交叉連線通常也被叫做“笛卡爾積”——數學上可能比較多。
語法:
from 表1 [cross] join 表2 ; //可見交叉連線只是沒有on條件而已。
cross這個詞也可以省略,還可以使用inner這個詞代替
2.內連線:
語法:
from 表1 [inner] join 表2 on 表1.欄位1=表2.欄位2;
含義:找出(過濾)在交叉連線的結果表中的表1的欄位1的值等於表2的欄位2的值的那些行。
3.左[外]連線:
形式:
from 表1 left [outer] join 表2 on 連線條件。
說明:
1,這裡,left是關鍵字。
2,連線條件跟內連線一樣。
3,含義是:內連線的結果基礎上,加上左邊表中所有不符合連線條件的資料,相應放右邊表的欄位的位置就自動補為“null”值。
4.右[外]連線:
右連線跟左連線恰恰相反:
形式:
from 表1 right [outer] join 表2 on 連線條件。
說明:
1,這裡,right是關鍵字。
2,連線條件跟內連線一樣。
3,含義是:在內連線的結果基礎上,加上右邊表中所有不符合連線條件的資料,相應本應放左邊表的欄位的位置就自動補為“null”值。
二、使用in子查詢
in的基本語法形式為:
where 運算元 in (值1,值2, ....)
則in子查詢就是:
where 運算元 in ( 列子查詢 );
含義:
表示該運算元(欄位值) 等於 該子查詢的其中任意一個只,就算滿足條件。
三、聯合查詢
聯合查詢的關鍵字是: union
聯合查詢就是將兩個
兩個查詢結果的能夠進行“聯合”的先覺條件是:結果欄位數相等。
語法形式:
select 語句1
union [ALL | DISTINCT]
select 語句2;
說明:
1,兩個select語句的輸出段(結果欄位)一樣數目一樣,應用中通常型別一樣才有意義。
2,結果集中的欄位以第一個select語句的欄位為準。
3,第一個select語句的欄位可以做別名,但如果做別名,則後續的where,group,order等子句應該用該別名。
4,聯合查詢預設是會消除重複項的(DISTINCT),要想不消除,則必須明確些“ALL”。
5,如果要對整個聯合結果進行排序或limit,則應該對各自的select語句加括號:
(select 語句1)
union
(select 語句2)
order by ..... limit ....;