SQL - EXCEPT运算符:初学者的全面指南
你好,有抱负的SQL爱好者们!今天,我们将踏上一段激动人心的SQL世界之旅,特别是关注EXCEPT运算符。如果你是编程新手,不用担心——我会成为你的友好向导,一步一步地解释一切。那么,让我们开始吧!
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'的员工。这就好像在我们公司的蜂群中找到所有的工作蜂!
一切结合
现在我们已经学习了这些不同的运算符,让我们在更复杂的例子中结合它们。
示例:复杂的员工查询
让我们找到所有满足以下条件的员工:
- 不是经理
- 年龄在25到40岁之间
- 不在IT或HR部门工作
- 工作标题中没有'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