數據庫多表查詢


目錄

多表查詢

  • 笛卡爾積查詢

    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 = '技術');
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM