SQL?join中on和where的區(qū)別解析
更新時間:2025年08月11日 09:52:09 作者:茅坑的小石頭
本文詳細介紹SQL join中on和where的區(qū)別,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,感興趣的朋友跟隨小編一起看看吧
0.結論
- 兩個表在,join時,首先做一個笛卡爾積,on后面的條件是對這個笛卡爾積做一個過濾形成一張臨時表,如果沒有where就直接返回結果,如果有where就對上一步的臨時表再進行過濾。
- 先on,再join,再where
- 在使用left join時,on和where條件的區(qū)別如下:
- 1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
- 2、where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉
1.數(shù)據(jù)準備
DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `c_id` int DEFAULT NULL COMMENT '班級ID', `c_name` varchar(50) DEFAULT NULL COMMENT '班級名' ); DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `s_id` int DEFAULT NULL COMMENT '學生ID', `s_name` varchar(50) DEFAULT NULL COMMENT '學生名', `c_id` int DEFAULT NULL COMMENT '班級ID' ); INSERT INTO `class` (`c_id`, `c_name`) VALUES (1, '一班'), (2, '二班'), (3, '三班'); INSERT INTO `student` (`s_id`, `s_name`, `c_id`) VALUES (1, '張三', 1), (2, '李四', 2), (3, '王五', 4);
2.測試
-- 單表 select * from class c; select * from student s; -- 笛卡爾積 select * from class c inner join student s order by c.c_id, s.s_id; -- 內連 select * from class c inner join student s on c.c_id = s.c_id order by c.c_id, s.s_id; -- 左外連(先on,再join,再where) select * from class c left join student s on c.c_id = s.c_id order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id and c.c_id <> 2 order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id where c.c_id <> 2 order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id and s.c_id <> 2 order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id where s.c_id <> 2 order by c.c_id, s.s_id;
2.1.普通
2.1.1.class單表
2.1.2.student單表
2.1.3.笛卡爾積
2.1.4. 內連接
2.2.5.普通外連
2.2.重點來啦-外連接
2.2.1.一
2.2.2.二
2.2.3.三
2.2.4.四
3.參考資料
相關文章
存儲過程配合UpdateDaset方法批量插入Dataset數(shù)據(jù)實現(xiàn)代碼
用存儲過程配合UpdateDaset方法批量插入Dataset數(shù)據(jù),感興趣的你可不要錯過了哈,希望本文提供知識點可以幫助到你2013-02-02SQLSERVER數(shù)據(jù)備份文件的分割備份方法
這篇文章主要介紹了SQLSERVER數(shù)據(jù)備份文件的分割備份方法 ,需要的朋友可以參考下2014-12-12SQL Server統(tǒng)計信息更新時采樣百分比對數(shù)據(jù)預估準確性的影響詳解
這篇文章主要給大家介紹了關于SQL Server統(tǒng)計信息更新時采樣百分比對數(shù)據(jù)預估準確性影響的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2018-09-09由于系統(tǒng)錯誤 126 (SQL Server),指定驅動程序無法加載
今天下午在給客戶安裝用友T3標準版時碰到一個非常棘手的問題,MSDE2000數(shù)據(jù)庫和用友T3軟件都安裝好了,但是打開系統(tǒng)管理的時候提示:AUTOMATION錯誤,然后將數(shù)據(jù)庫徹底卸載干凈,用友通T3軟件也徹底卸載干凈,重新安裝了一下,仍然是這個情況2021-03-03Godaddy 導入導出MSSQL數(shù)據(jù)庫的實現(xiàn)步驟
可以從限制文件中導入SQL共享服務器數(shù)據(jù)庫。如果想把存放在其他地方的數(shù)據(jù)導入,需要先把其內容拷到限制文件中。(2010-02-02SQL Server數(shù)據(jù)類型char、nchar、varchar、nvarchar的區(qū)別淺析
這篇文章主要介紹了SQL Server數(shù)據(jù)類型char、nchar、varchar、nvarchar的區(qū)別淺析,本文寫的比較容易明白,需要的朋友可以參考下2014-06-06