欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL?join中on和where的區(qū)別解析

 更新時(shí)間:2025年08月11日 09:52:09   作者:茅坑的小石頭  
本文詳細(xì)介紹SQL join中on和where的區(qū)別,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨小編一起看看吧

0.結(jié)論

  • 兩個(gè)表在,join時(shí),首先做一個(gè)笛卡爾積,on后面的條件是對(duì)這個(gè)笛卡爾積做一個(gè)過(guò)濾形成一張臨時(shí)表,如果沒(méi)有where就直接返回結(jié)果,如果有where就對(duì)上一步的臨時(shí)表再進(jìn)行過(guò)濾。
    • 先on,再join,再where
    • 在使用left join時(shí),on和where條件的區(qū)別如下:
  • 1、on條件是在生成臨時(shí)表時(shí)使用的條件,它不管on中的條件是否為真,都會(huì)返回左邊表中的記錄。
  • 2、where條件是在臨時(shí)表生成好后,再對(duì)臨時(shí)表進(jìn)行過(guò)濾的條件。這時(shí)已經(jīng)沒(méi)有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過(guò)濾掉

1.數(shù)據(jù)準(zhǔn)備

DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`
(
    `c_id`   int          DEFAULT NULL COMMENT '班級(jí)ID',
    `c_name` varchar(50) DEFAULT NULL COMMENT '班級(jí)名'
);
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`
(
    `s_id`   int          DEFAULT NULL COMMENT '學(xué)生ID',
    `s_name` varchar(50) DEFAULT NULL COMMENT '學(xué)生名',
    `c_id`   int          DEFAULT NULL COMMENT '班級(jí)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.測(cè)試

-- 單表
select * from class c;
select * from student s;
-- 笛卡爾積
select * from class c inner join student s 										order by c.c_id, s.s_id;
-- 內(nèi)連
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. 內(nèi)連接

2.2.5.普通外連

2.2.重點(diǎn)來(lái)啦-外連接

2.2.1.一

2.2.2.二

2.2.3.三

2.2.4.四

3.參考資料

SQL語(yǔ)句中LEFT JOIN的ON和WHERE有什么區(qū)別

相關(guān)文章

最新評(píng)論