成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL 語句中 LEFT JOIN 后用 ON 還是 WHERE:深入解析與實(shí)例

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
在 LEFT JOIN? 中,ON? 和 WHERE? 子句的使用有顯著區(qū)別。ON? 子句用于指定連接條件,而 WHERE? 子句用于過濾結(jié)果。

在 SQL 查詢中,LEFT JOIN 是一種常用的連接類型,用于從左表(主表)中返回所有記錄,以及右表(連接表)中滿足連接條件的記錄。當(dāng) LEFT JOIN 與 ON 和 WHERE 子句結(jié)合使用時(shí),其行為和結(jié)果可能會(huì)有顯著不同。本文將深入探討這種差異,并通過實(shí)例代碼進(jìn)行詳細(xì)解析。

1. LEFT JOIN 與 ON

ON 子句用于指定 LEFT JOIN 的連接條件。當(dāng)使用 ON 子句時(shí),即使在右表中沒有匹配的記錄,左表的所有記錄也會(huì)被返回,右表的字段在這種情況下會(huì)填充 NULL。

示例代碼

假設(shè)我們有兩個(gè)表:employees(員工表)和 departments(部門表)。

-- 創(chuàng)建示例表
CREATE TABLE employees (
    id INT,
    name VARCHAR(100),
    department_id INT
);

CREATE TABLE departments (
    id INT,
    department_name VARCHAR(100)
);

-- 插入示例數(shù)據(jù)
INSERT INTO employees (id, name, department_id) VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', NULL);

INSERT INTO departments (id, department_name) VALUES
(1, 'HR'),
(2, 'Engineering');

現(xiàn)在我們想要查詢所有員工及其對(duì)應(yīng)的部門名稱,即使某些員工沒有分配部門。

-- 使用 LEFT JOIN 和 ON 子句
SELECT 
    e.id,
    e.name,
    d.department_name
FROM 
    employees e
LEFT JOIN 
    departments d
ON 
    e.department_id = d.id;

輸出結(jié)果:

id

name

department_name

1

Alice

HR

2

Bob

Engineering

3

Charlie

NULL

2. LEFT JOIN 與 WHERE

WHERE 子句用于過濾查詢結(jié)果。當(dāng)在 LEFT JOIN 后使用 WHERE 子句時(shí),它會(huì)過濾掉所有不滿足條件的記錄,包括因?yàn)?LEFT JOIN 而產(chǎn)生的 NULL 值。

示例代碼

如果我們錯(cuò)誤地將連接條件放在 WHERE 子句中:

-- 使用 LEFT JOIN 和錯(cuò)誤的 WHERE 子句
SELECT 
    e.id,
    e.name,
    d.department_name
FROM 
    employees e
LEFT JOIN 
    departments d
ON 
    1=1  -- 這里故意使用一個(gè)總是為真的條件
WHERE 
    e.department_id = d.id;

輸出結(jié)果:

id

name

department_name

1

Alice

HR

2

Bob

Engineering

注意到 Charlie 被排除了,因?yàn)?WHERE 子句過濾掉了 department_id 不匹配的記錄,包括那些因?yàn)?LEFT JOIN 本應(yīng)返回 NULL 的記錄。

3. 正確使用 ON 和 WHERE

場(chǎng)景一:過濾連接后的結(jié)果

如果我們想要查詢所有員工及其部門名稱,但只顯示那些部門名稱不為空的記錄,可以這樣做:

-- 使用 LEFT JOIN 和正確的 WHERE 子句
SELECT 
    e.id,
    e.name,
    d.department_name
FROM 
    employees e
LEFT JOIN 
    departments d
ON 
    e.department_id = d.id
WHERE 
    d.department_name IS NOT NULL;

輸出結(jié)果:

id

name

department_name

1

Alice

HR

2

Bob

Engineering

場(chǎng)景二:額外的過濾條件

如果我們想要查詢所有在“Engineering”部門的員工,同時(shí)保留其他員工的記錄但部門名稱為空,可以這樣做:

-- 使用 LEFT JOIN、ON 和額外的過濾條件
SELECT 
    e.id,
    e.name,
    d.department_name
FROM 
    employees e
LEFT JOIN 
    departments d
ON 
    e.department_id = d.id
AND 
    d.department_name = 'Engineering';  -- 這個(gè)條件放在 ON 中

輸出結(jié)果:

id

name

department_name

1

Alice

NULL

2

Bob

Engineering

3

Charlie

NULL

注意到 Alice 和 Charlie 仍然保留在結(jié)果中,但他們的部門名稱顯示為 NULL,因?yàn)樗麄儾粚儆凇癊ngineering”部門。

結(jié)論

在 LEFT JOIN 中,ON 和 WHERE 子句的使用有顯著區(qū)別。ON 子句用于指定連接條件,而 WHERE 子句用于過濾結(jié)果。將連接條件錯(cuò)誤地放在 WHERE 子句中會(huì)導(dǎo)致 LEFT JOIN 的行為類似于 INNER JOIN,從而失去左表中的一些記錄。正確理解和使用 ON 和 WHERE 子句對(duì)于獲得預(yù)期的查詢結(jié)果至關(guān)重要。

責(zé)任編輯:武曉燕 來源: 程序員編程日記
相關(guān)推薦

2010-05-18 14:14:03

MySQL關(guān)聯(lián)left

2010-09-07 14:56:49

SQL語句CASE WHEN

2021-05-28 07:36:18

MySQLWhereHive

2010-09-03 15:47:40

SQL語句鎖定

2010-09-03 14:39:15

SQLSELECT語句

2010-09-03 14:47:50

SQLSELECT語句

2010-09-07 13:41:50

SQL語句

2010-09-07 16:38:36

SQL語句SELECT DIST

2010-09-03 11:25:58

SQL刪除

2024-10-15 16:53:07

2020-11-05 09:33:37

SQL數(shù)據(jù)庫(kù)編程

2020-11-06 07:09:06

SQL注入編程

2022-11-05 08:37:00

MySQL數(shù)據(jù)索引

2021-09-16 06:44:07

數(shù)據(jù)庫(kù)SQL語句

2009-05-21 09:09:47

where查詢條件邏輯值

2009-09-16 17:07:00

linq實(shí)現(xiàn)Left

2010-05-21 17:30:28

2010-04-13 14:43:37

Oracle性能檢測(cè)

2010-09-07 10:19:31

SQL語句

2010-09-17 14:48:28

SQL條件語句
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产成人精品免费视频 | 日本欧美黄色片 | 天天玩天天操天天干 | 欧州一区二区三区 | 麻豆视频在线免费看 | 69av片| a在线视频观看 | 国产视频中文字幕 | 久久精品一 | 国产农村一级片 | 国产成人在线观看免费 | 久草新在线 | 欧美日韩国产精品 | 成人av一区二区亚洲精 | 一级黄色片免费 | 欧美久久一区二区三区 | 欧美成人精品激情在线观看 | 国产91网址 | 欧美福利精品 | 亚洲成人午夜在线 | 日韩精品在线看 | 一区二区三区四区在线 | 午夜无码国产理论在线 | 九九伦理电影 | 一区二区免费 | 国产精品日韩欧美一区二区 | 精品一二区| 久草视频观看 | 少妇特黄a一区二区三区88av | 国产精品福利一区二区三区 | 国产精品成人一区 | 久久国产电影 | 成人在线免费观看 | 拍拍无遮挡人做人爱视频免费观看 | 久久噜噜噜精品国产亚洲综合 | 91视频麻豆 | 免费观看成人av | 91夜夜夜| 在线观看视频91 | 亚洲一区二区三区在线视频 | 色综合天天天天做夜夜夜夜做 |