SQL INTERSECT操作符
在集合论中,两个集合的交集是共同存在于两个集合中的值的集合。换句话说,两个集合的交集是同时存在于两个集合中的元素的集合。让我们以下表作为示例来更好地理解这个概念-
如果我们使用 INTERSECT 运算符对两个集合执行交集操作,它将返回两个集合中的共同行,即 5 和 8 。该运算符从最终结果集中删除重复的行。
SQL中的INTERSECT操作符
在SQL中,使用 INTERSECT 操作符检索两个SELECT(表)语句的结果集中相同/重复的记录。
在实际场景中,数据库中可能包含大量包含信息的表。用户可能会发现从各个表中收集共同信息具有挑战性。因此,我们使用INTERSECT操作符来实现这一目标。它可以帮助检索各个表中的共同数据。
语法
为了从两个不同的表中检索相同的记录,我们使用以下语法−
SELECT column1, column2,…, columnN
FROM table1, table2,…, tableN
INTERSECT
SELECT column1, column2,…, columnN
FROM table1, table2,…, tableN
Note − INTERSECT 操作有一些强制规则,例如 SELECT 语句中的列数、数据类型和其他列必须在两个 SELECT 语句中相同,INTERSECT 操作符才能正确工作。
示例
首先,让我们使用以下查询创建一个名为 “ 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> INSERT INTO STUDENTS(ID, NAME, HOBBY, AGE) VALUES(1, 'Vijay', 'Cricket', 18);
INSERT INTO STUDENTS(ID, NAME, HOBBY, AGE) VALUES(2, 'Varun', 'Football', 26);
INSERT INTO STUDENTS(ID, NAME, HOBBY, AGE) VALUES(3, 'Surya', 'Cricket', 19);
INSERT INTO STUDENTS(ID, NAME, HOBBY, AGE) VALUES(4, 'Karthik', 'Cricket', 25);
INSERT INTO STUDENTS(ID, NAME, HOBBY, AGE) VALUES(5, 'Sunny', 'Football', 26);
INSERT INTO STUDENTS(ID, NAME, HOBBY, AGE) VALUES(6, 'Dev', 'Cricket', 23);
让我们使用以下查询来验证表“ STUDENTS ”是否已创建:
SQL> SELECT * FROM STUDENTS;
如下所示,表已经在数据库中创建。<\p>
+-----+----------+--------------+-------+
| 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> INSERT INTO ASSOCIATES(ID, NAME, SUBJECT, AGE, HOBBY) VALUES(1, 'Naina', 'Maths', 24, 'Cricket');
INSERT INTO ASSOCIATES(ID, NAME, SUBJECT, AGE, HOBBY) VALUES(2, 'Varun', 'Physics', 26, 'Football');
INSERT INTO ASSOCIATES(ID, NAME, SUBJECT, AGE, HOBBY) VALUES(3, 'Dev', 'Maths', 23, 'Cricket');
INSERT INTO ASSOCIATES(ID, NAME, SUBJECT, AGE, HOBBY) VALUES(4, 'Priya', 'Physics', 25, 'Cricket');
INSERT INTO ASSOCIATES(ID, NAME, SUBJECT, AGE, HOBBY) VALUES(5, 'Aditya', 'Chemistry', 21, 'Cricket');
INSERT INTO ASSOCIATES(ID, NAME, SUBJECT, AGE, HOBBY) VALUES(6, 'Kalyan', 'Maths', 30, 'Football');
让我们使用以下查询来验证表格“ ASSOCIATES ”是否已创建:
SQL> SELECT * FROM ASSOCIATES;
从下面的输出中可以看到,表已经在数据库中创建了。
+-----+----------+---------------+-------+----------+
| 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 |
+-----+----------+--------------+-------+-----------+
现在,我们正在尝试使用以下查询从两个表中检索公共记录。
SQL> SELECT NAME, AGE, HOBBY FROM STUDENTS
INTERSECT
SELECT NAME, AGE, HOBBY FROM ASSOCIATES
输出
当我们执行上述查询时,输出如下:
+-----------+-------+----------+
| NAME | AGE | HOBBY |
+-----------+-------+----------+
| Dev | 23 | Cricket |
| Varun | 26 | Football |
+-----------+-------+----------+
INTERSECT与BETWEEN运算符一起使用
正如我们在初始的语法中讨论的那样,我们还可以使用INTERSECT运算符与条件运算符一起使用。
我们可以在SQL中使用INTERSECT运算符与BETWEEN运算符来找到在指定范围内的行。
示例
现在,让我们检索同时出现在两个表中的记录。此外,我们将使用以下查询检索年龄在25到30之间的记录。
SQL> SELECT NAME, AGE, HOBBY FROM STUDENTS
WHERE AGE BETWEEN 25 AND 30
INTERSECT
SELECT NAME, AGE, HOBBY FROM ASSOCIATES
WHERE AGE BETWEEN 20 AND 30
输出
上述查询的输出如下所示−
+-----------+-------+----------+
| NAME | AGE | HOBBY |
+-----------+-------+----------+
| Varun | 26 | Football |
+-----------+-------+----------+
使用IN运算符与INTERSECT
在SQL中,我们还可以使用INTERSECT运算符与IN运算符结合使用,以查找具有指定值的公共行。IN运算符用于基于指定值列表对结果集进行过滤。
示例
在这里,我们尝试从两个表中检索共同记录。此外,我们使用 IN 运算符来检索爱好为“Cricket”的记录。
SQL> SELECT NAME, AGE, HOBBY FROM STUDENTS
WHERE HOBBY IN('Cricket')
INTERSECT
SELECT NAME, AGE, HOBBY FROM ASSOCIATES
WHERE HOBBY IN('Cricket')
输出
当我们执行上述查询时,输出结果如下:
+-----------+-------+----------+
| NAME | AGE | HOBBY |
+-----------+-------+----------+
| Dev | 26 | Cricket |
+-----------+-------+----------+
使用LIKE操作符和INTERSECT进行匹配
LIKE操作符用于对字符串进行模式匹配。在SQL中,INTERSECT操作符也可以与LIKE操作符一起使用,以查找与指定模式匹配的公共行。
示例
让我们使用通配符‘ % ’和 LIKE 操作符从两个表的共同名称中检索以‘v’开头的名称。
SQL> SELECT NAME, AGE, HOBBY FROM STUDENTS
WHERE NAME LIKE 'v%'
INTERSECT
SELECT NAME, AGE, HOBBY FROM ASSOCIATES
WHERE NAME LIKE 'v%'
输出
上述查询的输出如下所示:
+-----------+-------+----------+
| NAME | AGE | HOBBY |
+-----------+-------+----------+
| Varun | 26 | Football |
+-----------+-------+----------+