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;

一个简单的例子

假设我们有两个表:employees(员工)和managers(经理)。我们想要找到所有不是经理的员工。

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结合使用时,我们可以做一些非常酷的事情。

示例:标题中没有'Manager'的员工

让我们找到所有工作标题中不包括单词'Manager'的员工。

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

这个查询将给我们所有工作标题中不包含'Manager'的员工。这就好像在我们公司的蜂群中找到所有的工作蜂!

一切结合

现在我们已经学习了这些不同的运算符,让我们在更复杂的例子中结合它们。

示例:复杂的员工查询

让我们找到所有满足以下条件的员工:

  1. 不是经理
  2. 年龄在25到40岁之间
  3. 不在IT或HR部门工作
  4. 工作标题中没有'Specialist'
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一开始可能看起来很吓人,但随着时间和练习,你将能够像专业人士一样编写复杂的查询。继续编码,保持好奇心,最重要的是,享受SQL的乐趣!

Credits: Image by storyset