目錄
多表查詢
-
笛卡爾積查詢
select * from 表一,表二; ''' 上面這個語句的執行是想查出來兩張表中所有的數據,但是發現執行結果多出來好多數據,當聯表查詢的時候,mysql不知道如何連接兩孩子那個表的關系,也不知道你想要查詢那些數據,mysql就會將兩張表中所有可能組合起來的數據,全部組合起來返回給你,當然這樣的好處是,幫你把所有可能的組合都做好,方便查詢數據,但是效率慢, ''' select * from emp,dep;#將兩張表拼在一起 select * from emp,dep where dep.id = emp.dep_id; #找到兩張表中對應的關系記錄 select emp.name from dep,emp where dep.id = emp.dep_id and dep.name='技術'; #拿到篩選后的技術部門數據中emp.name的數據
-
inner join on 內連接
''' 在寫sql語句的時候,讓我們對語句有一個清晰的區分,增強代碼的可讀性,聯表的操作和查詢的操作有個明確的區分,就用到了內連接,左鏈接,右鏈接的方式inner join on就是內連接的意思,內連接的方式就一個弊端就是,當兩個表的數據中無法通過聯表指定的字段對應上的時候,就無法顯示這些數據,類似集合中交集的意思, ''' 第一步:連表 select * from dep inner join emp on dep.id=emp.dep_id; 第二步: 過濾 select * from dep inner join emp on dep.id=emp.dep_id where dep.name='技術'; 第三步:找對應字段數據 select emp.name from dep inner join emp on dep.id=emp.dep_id where dep.name='技術';
-
left join on 左連接(外連接)
''' 左連接的意思就是在內連接的基礎上增加左邊有,右邊沒有的數據,將左邊的表作為主表,右邊的表作為輔表,當輔表的數據沒辦法對應上左表的數據時,就通過null來表示(把左表的所有數據都顯示) ''' select * from dep left join emp on dep.id=emp.dep_id;
-
right join on 右鏈接(外連接)
''' 右連接於左連接的用法使一樣的,不過右連接是將右表作為主表,左表作為輔表 ''' select * from dep right join emp on dep.id=emp.dep_id;
-
union 全連接
''' 不管是內連接還是左連接,右連接,都會由一些數據使無法顯示出來的,那么就可以用全連接的方式來鏈接,寫法是寫一個左連接,一個右鏈接,中間用union 來連接 ''' select * from dep left join emp on dep.id=emp.dep_id union select * from dep right join emp on dep.id=emp.dep_id;
-
子查詢
''' 子查詢是將一個查詢的結果作為另一個查詢的條件 ''' select name from emp where dep_id = (select id from dep where name = '技術');