SQL - EXCEPT 運算子:初學者的全面指南

你好,有志於SQL的熱情者!今天,我們將踏上一段令人興奮的旅程,進入SQL的世界,特別聚焦於EXCEPT運算子。別擔心你對編程是新手——我將成為你的友好導遊,一步步解釋一切。那麼,我們來一起深入了解吧!

SQL - EXCEPT Operator

SQL EXCEPT 運算子

EXCEPT 運算子是什麼?

EXCEPT運算子在SQL中就像一根魔杖,讓我們可以比較兩個結果集,並從第一個集合中返回不在第二個集合中的唯一行。這就像找到兩組事物之間的差異。

想像你有兩個水果籃。第一個籃子有蘋果、橙子和香蕉。第二個籃子有橙子和梨。如果我們使用EXCEPT運算子,我們將會得到只是蘋果和香蕉——那些在第一個籃子中但不在第二個籃子中的水果。

基本語法

這是我們通常如何寫一個EXCEPT語句:

SELECT column1, column2, ...
FROM table1
EXCEPT
SELECT column1, column2, ...
FROM table2;

一個簡單的例子

假設我們有兩個表:employeesmanagers。我們想要找到所有不是經理的員工。

SELECT employee_id, name
FROM employees
EXCEPT
SELECT employee_id, name
FROM managers;

這個查詢將返回所有不在經理表中的員工。挺厲害的,不是嗎?

EXCEPT 與 BETWEEN 運算子

現在,讓我們給事情增加一點趣味,將EXCEPT與BETWEEN運算子結合起來。BETWEEN運算子讓我們可以選擇給定範圍內的值。

示例:找到非高級員工

假設我們想要找到不在高級年齡範圍內的員工(我們假設是50-65歲)。

SELECT employee_id, name, age
FROM employees
EXCEPT
SELECT employee_id, name, age
FROM employees
WHERE age BETWEEN 50 AND 65;

這個查詢將給我們所有不在50到65歲年齡範圍內的員工。這就像在我們公司中找到年輕的射手和超級老將!

EXCEPT 與 IN 運算子

IN運算子讓我們在WHERE子句中指定多個值。當與EXCEPT結合時,它可能非常強大。

示例:不在特定部門的員工

讓我們找到不在IT、HR或財務部的員工。

SELECT employee_id, name, department
FROM employees
EXCEPT
SELECT employee_id, name, department
FROM employees
WHERE department IN ('IT', 'HR', 'Finance');

這個查詢將返回所有在IT、HR和財務部以外的部門工作的員工。這就像在我們公司中找到獨特的雪花!

EXCEPT 與 LIKE 運算子

LIKE運算子在WHERE子句中用於搜索列中指定的模式。當我們將它與EXCEPT結合時,我們可以做些非常酷的事情。

示例:職稱中不含'經理'的員工

讓我們找到所有職稱中不包括'經理'這個詞的員工。

SELECT employee_id, name, job_title
FROM employees
EXCEPT
SELECT employee_id, name, job_title
FROM employees
WHERE job_title LIKE '%Manager%';

這個查詢將給我們所有職稱中不包含'經理'的員工。這就像在我們的企業蜂群中找到所有的工蜂!

把所有東西結合起來

現在我們已經學習了這些不同的運算子,讓我們在更複雜的例子中將它們結合起來。

示例:複雜的員工查詢

讓我們找到所有滿足以下條件的員工:

  1. 不是經理
  2. 年齡在25到40歲之間
  3. 不在IT或HR部門工作
  4. 職稱中不含'專家'
SELECT employee_id, name, age, department, job_title
FROM employees
EXCEPT
SELECT employee_id, name, age, department, job_title
FROM employees
WHERE employee_id IN (SELECT employee_id FROM managers)
OR age NOT BETWEEN 25 AND 40
OR department IN ('IT', 'HR')
OR job_title LIKE '%Specialist%';

這個查詢可能一開始看起來很複雜,但如果你分解它,它只是我們學過的所有概念的組合!

常見 EXCEPT 方法

這是一個總結我們討論過的方法的表格:

方法 描述 示例
基本EXCEPT 找到第一個集合中不在第二個集合中的行 SELECT * FROM A EXCEPT SELECT * FROM B
EXCEPT與BETWEEN 排除在範圍內的行 ... EXCEPT ... WHERE col BETWEEN x AND y
EXCEPT與IN 排除匹配指定值的行 ... EXCEPT ... WHERE col IN (a, b, c)
EXCEPT與LIKE 排除匹配模式的行 ... EXCEPT ... WHERE col LIKE '%pattern%'

記住,熟能生巧!嘗試使用這些運算子自己寫查詢。不要害怕犯錯誤——這是我們學習和成長的方式。

我希望這個指南能夠幫助你解開EXCEPT運算子和它的朋友的神秘。SQL可能一開始看起來很令人生畏,但隨著時間和練習,你將能夠像專業人士一樣編寫複雜的查詢。持續編程,保持好奇心,最重要的是,玩得開心!

Credits: Image by storyset