MySQL----left join & right join & inner join的使用
阿新 • • 發佈:2019-01-09
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.每個表格單獨存在的資訊,都不顯示在最終的結果中。