sql鏈接詳解

笛卡爾乘積:mysql

A={a, b},集合B={0, 1, 2},則AxB的笛卡爾積爲{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)};sql

(AxB≠BxA)數據庫

數據庫中內鏈接與多表查詢的區別  性能

sql = "select [我的信息$].*,[工做經歷$].* from [我的信息$],[工做經歷$] where [我的信息$].UID=[工做經歷$].UID"blog

sql = "select [我的信息$].*,[工做經歷$].* from [我的信息$] inner  join [工做經歷$] on [我的信息$].UID=[工做經歷$].UID"  hash

第一種是普通的多表查詢,內部仍是笛卡爾積的逐行的搜索機制,若是查詢的幾張表數據量大的話會下降性能;io

第二種是內鏈接。兩種方式獲得的結果是一致的。inner join(等值鏈接) 只返回兩個表中聯結字段相等的行的記錄。          效率

從結果上看同樣。        select

 可是從實現上看,多個from是笛卡爾集,再篩選,效率是O(n^2),不好。                                    搜索

 join是先作hash,再匹配,效率是O(logN),很好。          

推薦使用內鏈接。SQL規格推薦也是用join的。

鏈接查詢的分類

1. 交叉鏈接(就是沒有鏈接條件的「所有鏈接」)

形式: from  表1  [cross]  join  表2  或 from  表1,表2;

結果:兩張表的笛卡爾積

2. 內鏈接

形式:from  表1  [inner] join  表2  on  表1.字段1 = 表2.字段2;

結果:取得一個「交叉鏈接」的結果中,知足所設定的鏈接條件(就是on後面的條件)的那些行的數據。

 

3. 左(外)鏈接 

形式:from  表1  left [outer] join  表2  on  表1.字段1 = 表2.字段2;

結果:內鏈接數據+左表不知足鏈接條件的列,null(一對多時,左表列會重複。學生表->學生成績表)

是將兩個表的知足鏈接條件的全部數據(即內鏈接數據), 再加上那些「左邊」表中,不能知足鏈接條件的數據的總和。 對於左邊表中不能知足條件的數據,在結果中的右邊部分,都補上「null」

4. 右(外)鏈接

參考左外鏈接。

5. 全(外)鏈接

形式:from  表1  full [outer]  join  表2  on  表1.字段1 = 表2.字段2;

左外連接和右外鏈接之並集。mysql不支持全外鏈接,能夠用union替代。

相關文章
相關標籤/搜索