1. Except

Except
前言

SQL中,EXCEPT 操作用于检索存在于第一个表中的唯一记录,而不是两个表中共有的记录。这个操作符与SQL的UNION操作符相反。

为了更好地理解,考虑两个具有以下记录的表,如下图所示。

在这里插入图片描述

如果我们对上述两个表执行EXCEPT运算符来检索Name字段,它将只显示来自第一个表的记录,这些记录与第二个表的记录不相同。

在这里,“Dev”在两个表中都是相同的。因此,EXCEPT运算符将排除它,并将“Sara”和“Jay”作为输出检索出来。

Except 语法
SELECT column1, column2,, columnN
FROM table1,
     table2,, tableN
    [Conditions] //optional
    
    EXCEPT
    
SELECT column1, column2,, columnN
FROM table1,
     table2,, tableN
    [Conditions] //optional

Note:两个 SELECT 语句中的列个数和列顺序需要保证相同。

Except 使用举例
-- 建表 STUDENTS
SQL> CREATE TABLE STUDENTS(
   ID INT NOT NULL, 
   NAME VARCHAR(20) NOT NULL, 
   HOBBY VARCHAR(20) NOT NULL, 
   AGE INT NOT NULL, 
   PRIMARY KEY(ID)
);

SQL> SELECT * FROM STUDENTS;

-- Output

+-----+----------+--------------+-------+
| ID  |  NAME    |    HOBBY     |  AGE  |
+-----+----------+--------------+-------+
| 1   |  Vijay   |   Cricket    |   18  |
| 2   |  Varun   |   Football   |   26  |
| 3   |  Surya   |   Cricket    |   19  |
| 4   |  Karthik |   Cricket    |   25  |
| 5   |  Sunny   |   Football   |   26  |
| 6   |  Dev     |   Cricket    |   23  |
+-----+----------+--------------+-------+
-- 建表 ASSOCIATES
SQL> CREATE TABLE ASSOCIATES(
   ID INT NOT NULL, 
   NAME VARCHAR(20) NOT NULL, 
   SUBJECT VARCHAR(20) NOT NULL, 
   AGE INT NOT NULL, 
   HOBBY VARCHAR(20) NOT NULL, 
   PRIMARY KEY(ID)
);

SQL> SELECT * FROM ASSOCIATES;

-- Output

+-----+----------+---------------+-------+----------+
| ID  |  NAME    |    SUBJECT    |  AGE  |  HOBBY   |
+-----+----------+---------------+-------+----------+
| 1   |  Naina   |   Mathematics |   24  | Cricket  |
| 2   |  Varun   |   Physics     |   26  | Football | 
| 3   |  Dev     |   Mathematics |   23  | Cricket  |
| 4   |  Priya   |   Physics     |   25  | Cricket  |
| 5   |  Adithya |   Chemistry   |   21  | Cricket  |
| 6   |  Kalyan  |   Mathematics |   30  | Football |
+-----+----------+--------------+-------+-----------+

接下来,使用 Except 查询检索出仅出现在第一个表中的记录。

SQL> SELECT NAME, HOBBY, AGE
FROM STUDENTS

EXCEPT 	

SELECT NAME, HOBBY, AGE
FROM ASSOCIATES

-- Output

+-----------+--------------+-------+
|   NAME    |    HOBBY     |  AGE  |
+-----+----------+---------+-------+
|   Karthik |   Cricket    |   25  |
|   Sunny   |   Football   |   26  |
|   Surya   |   Cricket    |   19  |
|   Vijay   |   Cricket    |   18  |
+-----------+--------------+-------+
结合其他关键字使用
EXCEPT with BETWEEN operator

检索出仅出现在第一个表中的记录,此外,保证检索出记录的AGE在 20 岁到 30 岁之间。

SQL> SELECT NAME, HOBBY, AGE
FROM STUDENTS
WHERE AGE BETWEEN 20 AND 30

EXCEPT 

SELECT NAME, HOBBY, AGE 
FROM ASSOCIATES
WHERE AGE BETWEEN 20 AND 30

-- Output

+----------+----------+-----+
|   NAME   |  HOBBY   | AGE |
+----------+----------+-----+
|  Karthik | Cricket  | 25  |
|  Sunny   | Football | 26  |
+----------+----------+-----+
Except with IN operator

检索出仅出现在第一个表中的记录,此外,保证检索出记录的HOBBY是 “Cricket”。

SQL> SELECT NAME, HOBBY, AGE FROM STUDENTS
WHERE HOBBY IN('Cricket')

EXCEPT

SELECT NAME, HOBBY, AGE FROM ASSOCIATES
WHERE HOBBY IN('Cricket')

-- Output

+-----------+--------------+-------+
|   NAME    |    HOBBY     |  AGE  |
+-----+----------+---------+-------+
|   Karthik |   Cricket    |   25  |
|   Surya   |   Cricket    |   19  |
|   Vijay   |   Cricket    |   18  |
+-----------+--------------+-------+
EXCEPT with LIKE operator

检索出仅出现在第一个表中的记录,此外,保证检索出记录的NAME以 ‘v’ 开头。

SQL> SELECT NAME, AGE, HOBBY FROM STUDENTS
WHERE NAME LIKE 'v%'

EXCEPT

SELECT NAME, AGE, HOBBY FROM ASSOCIATES
WHERE NAME LIKE 'v%'

-- Output

+-----------+-------+----------+
|   NAME    |  AGE  |  HOBBY   |
+-----------+-------+----------+
|   Vijay   |   18  | Cricket  |
+-----------+-------+----------+
文章参考

SQL - EXCEPT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloooi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值