1. 程式人生 > >MySQL----left join & right join & inner join的使用

MySQL----left join & right join & inner join的使用

1.左連線------left join:

查詢的結果為兩個表匹配到的資料,左表所有資料資訊全部不變,右表再去匹配左表,如果有不存在的資料右表則使用null填充
在這裡插入圖片描述

table: students

id username sex classify score class_id
10000 alien 作家 57 1
10001 zhang 詞人 27 2
10002 ping 醬油 31 3
10003 user-3 詩人 68 3
10004 user-4 作家 6 2
10012 user-12 詞人 54 5
10018 user-18 自由職業 88 8

table: classes

class_id class_object class_name class_address
1 python2018級 張三 1號樓208室
2 java2017級 王五 8號樓606室
3 go2019級 李四 9號樓168室
9 大資料2018級 jack ma 6號樓222室

select * FROM students s left join classes c on s.class_id=c.class_id;

result:

id username sex classify score class_id class_id(1) class_object class_name class_address
10000 alien 作家 57 1 1 python2018級 張三 1號樓208室
10001 zhang 詞人 27 2 2 java2017級 王五 8號樓606室
10004 user-4 作家 6 2 2 java2017級 王五 8號樓606室
10002 ping 醬油 31 3 3 go2019級 李四 9號樓168室
10003 user-3 詩人 68 3 3 go2019級 李四 9號樓168室
10012 user-12 詞人 54 5 null null null null
10018 user-18 自由職業 88 8 null null null null

注意:

  • 1.左表的排序,最終根據左表的class_id正序排列了
  • 2.右表中,沒有滿足s.class_id=c.class_id的資訊,全部都使用null填充了


2.右連線------right join:

查詢的結果為兩個表匹配到的資料,右表所有資料資訊全部不變,左表再去匹配右表,如果有不存在的資料左表則使用null填充
在這裡插入圖片描述


select * FROM students s right join classes c on s.class_id=c.class_id;

result:

id username sex classify score class_id class_id class_object class_name class_address
10000 alien 作家 57 1 1 python2018級 張三 1號樓208室
10001 zhang 詞人 27 2 2 java2017級 王五 8號樓606室
10002 ping 醬油 31 3 3 go2019級 李四 9號樓168室
10003 user-3 詩人 68 3 3 go2019級 李四 9號樓168室
10004 user-4 作家 6 2 2 java2017級 王五 8號樓606室
null null null null null null 9 大資料2018級 jack ma 6號樓222室

注意:

  • 1.所有的classes表的資訊都顯示出來了,且最終顯示出來的結果資訊,classes相關的行數,要比原始的資料多
  • 2.students表中的class_id 沒有在classes表class_id中的,都沒有顯示出來,例如class_id為[5,8]的資訊都沒顯示
  • 3.排序問題,先找到classes表中的class_id,然後再去students表中,從上到下去找對應s.class_id=c.class_id的相關資訊;總體先按照classes原有的排序排列,如果classes表中的資料篩選完了,再去students中查詢,看看是否還有沒有對應classes資訊,如果有就再填補classes資訊,否者不填補篩選結束。


3.內連線------inner join:

查詢的結果為兩個表匹配到的資料,最終顯示完全符合左右2個表格的資料
在這裡插入圖片描述


select * FROM students s inner join classes c on s.class_id=c.class_id;


result:

id username sex classify score class_id class_id class_object class_name class_address
10000 alien 作家 57 1 1 python2018級 張三 1號樓208室
10001 zhang 詞人 27 2 2 java2017級 王五 8號樓606室
10002 ping 醬油 31 3 3 go2019級 李四 9號樓168室
10003 user-3 詩人 68 3 3 go2019級 李四 9號樓168室
10004 user-4 作家 6 2 2 java2017級 王五 8號樓606室
  • 1.inner join 這個關聯查詢,最終得到的結果是2個表格,都符合s.class_id=c.class_id條件的資訊才顯示出來。
  • 2.每個表格單獨存在的資訊,都不顯示在最終的結果中。