多表連接查詢
表與表之間的連接分為內(nèi)連接和外連接
- 內(nèi)連接:僅選出兩張表互相匹配的記錄
- 外連接:既包括兩張表匹配的記錄,也包括不匹配的記錄,同時(shí)外連接又分為左外連接(左連接)和右外連接(右連接)
內(nèi)連接
首先準(zhǔn)備兩張表
學(xué)生student表
![](/d/20211017/ca27c56352e7a1ad890277b1f7ad7572.gif)
分?jǐn)?shù)score表
![](/d/20211017/33774c839a24a685c27eff0832466e39.gif)
內(nèi)連接:在每個(gè)表中找出符合條件的共有記錄
查詢student表中的學(xué)生姓名和分?jǐn)?shù)
第一種寫法:只使用where
select a.s_name, b.s_score from student a,score b where a.s_id = b.s_id;
第二種寫法:join … on…
select a.s_name, b.s_score from student a join score b on a.s_id = b.s_id
第三種寫法:inner join … on…
select a.s_name, b.s_score from student a inner join score b on a.s_id = b.s_id
![](/d/20211017/85244cf967b404f453b3d5df5c0ef12d.gif)
左連接
左連接:根據(jù)左表的記錄,在被連接的右表中找出符合條件的記錄與之匹配,如果找不到與左表匹配的,用null表示
第一種寫法:left join … on …
select a.s_name,b.s_score from student a left join score b on a.s_id = b.s_id
第二種寫法:left outer join … on …
select a.s_name,b.s_score from student a left outer join score b on a.s_id = b.s_id
![](/d/20211017/73d622c85318c234349ca70001b1c8ca.gif)
右連接
**右連接:**根據(jù)右表的記錄,在被連接的左表中找出符合條件的記錄與之匹配,如果找不到匹配的,用null表示
第一種寫法:right join … on …
select a.s_name,b.s_score from student a right join score b on a.s_id = b.s_id;
第二種寫法:right outer join … on …
select a.s_name,b.s_score from student a right outer join score b on a.s_id = b.s_id;
![](/d/20211017/233372a364da2efab58a3ae119cd42f3.gif)
子查詢
子查詢:是多表連接查詢的一種實(shí)現(xiàn)方式,在一個(gè)select語(yǔ)句的from子句或where子句中嵌套了另一個(gè)select語(yǔ)句,外層的select查詢語(yǔ)句成為主查詢,換句話將就是WHERE或FORM中的查詢語(yǔ)句稱為子查詢
WHERE子句中的子查詢:子查詢返回的值作為主查詢的查詢條件
FROM子句中的子查詢:子查詢返回的是一張?zhí)摂M的表,主查詢從該查詢從臨時(shí)表查詢出滿足的條件
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
您可能感興趣的文章:- MySQL的時(shí)間差函數(shù)TIMESTAMPDIFF、DATEDIFF的用法
- MySQL的時(shí)間差函數(shù)(TIMESTAMPDIFF、DATEDIFF)、日期轉(zhuǎn)換計(jì)算函數(shù)(date_add、day、date_format、str_to_date)
- 實(shí)現(xiàn)MySQL + PostgreSQL批量插入更新insertOrUpdate
- MYSQL row_number()與over()函數(shù)用法詳解
- MySQL隱式類型轉(zhuǎn)換導(dǎo)致索引失效的解決
- 淺談MySQL數(shù)據(jù)查詢太多會(huì)OOM嗎
- Django搭建MySQL主從實(shí)現(xiàn)讀寫分離
- mysql中TIMESTAMPDIFF案例詳解