SQL UNION vs JOIN

SQL UNION vs JOIN

SQL提供了各种关系操作符来处理分布在关系数据库中的数据。其中,UNION和JOIN查询基本上用于将来自多个表的数据合并。

尽管它们都用于相同的目的,即合并表格,但这些运算符的工作方式之间有很多不同之处。主要的区别在于UNION运算符组合来自多个相似表的数据,而不考虑数据的相对性,而JOIN运算符仅用于组合来自多个表的相对数据。

UNION的工作原理

UNION是SQL中的一种操作符/子句,其工作方式类似于关系代数中的并集运算符。它只是简单地将多个兼容并的表的信息合并在一起。

如果满足以下条件,我们说这些表是兼容并的:

  • 要组合的表必须具有相同的列数和相同的数据类型。
  • 行数不需要相同。

一旦满足了这些条件,UNION运算符将返回多个表中的所有行,消除重复的行,作为结果表。

注意 - 第一个表的列名将成为结果表的列名,而第二个表的内容将与结果列的相同数据类型合并。

语法

以下是SQL UNION运算符的语法:

SELECT * FROM table1
UNION
SELECT * FROM table2;

示例

首先,让我们创建两个具有相同列数和相同数据类型的表”COURSES_PICKED”和”EXTRA_COURSES_PICKED”。

使用以下查询创建表”COURSES_PICKED”:

CREATE TABLE COURSES_PICKED(
   STUDENT_ID INT NOT NULL, 
   STUDENT_NAME VARCHAR(30) NOT NULL, 
   COURSE_NAME VARCHAR(30) NOT NULL
);

将下方查询的值插入到COURSES_PICKED表中:

使用下方查询的帮助将值插入到COURSES_PICKED表中−

INSERT INTO COURSES_PICKED VALUES
(1, 'JOHN', 'ENGLISH'),
(2, 'ROBERT', 'COMPUTER SCIENCE'),
(3, 'SASHA', 'COMMUNICATIONS'),
(4, 'JULIAN', 'MATHEMATICS');

使用以下查询语句创建表格EXTRA_COURSES_PICKED−

CREATE TABLE EXTRA_COURSES_PICKED(
   STUDENT_ID INT NOT NULL, 
   STUDENT_NAME VARCHAR(30) NOT NULL, 
   EXTRA_COURSE_NAME VARCHAR(30) NOT NULL
);

以下是将值插入EXTRA_COURSES_PICKED表的查询语句 –

INSERT INTO EXTRA_COURSES_PICKED VALUES
(1, 'JOHN', 'PHYSICAL EDUCATION'),
(2, 'ROBERT', 'GYM'),
(3, 'SASHA', 'FILM'),
(4, 'JULIAN', 'PHOTOGRAPHY');

现在,让我们使用UNION查询来合并表COURSES_PICKED和EXTRA_COURSES_PICKED,如下所示-

SELECT * FROM COURSES_PICKED 
UNION 
SELECT * FROM EXTRA_COURSES_PICKED;

输出

执行UNION操作后得到的结果表为−

STUDENT_ID STUDENT_NAME COURSE_NAME
1 Jhon English
1 Jhon Physical Education
2 Robert Computer Science
2 Robert Gym
3 Shasha Communications
3 Shasha Film
4 Julian Mathematics
4 Julian Photography

JOIN的工作原理

JOIN操作用于根据它们的共有字段,将多个相关表的信息合并成一个表。该操作可以与ON、WHERE、ORDER BY、GROUP BY等子句一起使用。

有两种类型的JOIN:

  • 内连接
  • 外连接

内连接是最基本的连接类型,它仅检索共有列的匹配值。这是默认的连接类型。

外连接的结果表包括第一个表中的匹配行和未匹配行。外连接又分为左连接、右连接和全连接。

语法

以下是SQL中JOIN操作的基本语法:

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;

示例

在下面的示例中,我们将使用以下查询将上面创建的相同的表COURSES_PICKED和EXTRA_COURSES_PICKED进行连结 –

SELECT c.STUDENT_ID, c.STUDENT_NAME, COURSE_NAME, COURSES_PICKED FROM COURSES_PICKED c
JOIN EXTRA_COURSES_PICKED e
ON c.STUDENT_ID = e.STUDENT_ID;

输出

结果表将如下所示−

STUDENT_ID STUDENT_NAME COURSE_NAME COURSE_PICKED
1 Jhon ENGLISH Physical Education
2 Robert COMPUTER SCIENCE Gym
3 Shasha COMMUNICATIONS Film
4 Julian MATHEMATICS Photography

UNION Vs JOIN

正如我们在上面给出的例子中所看到的,UNION操作符只能在相容的表之间执行,而JOIN操作符则是将两个表联接在一起,这两个表不需要相容,但是必须有关联。

让我们总结下这些查询之间的所有差异如下:

UNION JOIN
UNION操作只能在具有联合兼容性的表上执行,即表必须具有相同数量的列且具有相同的数据类型。 JOIN操作可以在至少有一个公共字段的表之间执行。表不需要是联合兼容的。
合并的数据将作为结果表的新行添加。 合并的数据将作为新列附加到结果表中。
这相当于合取操作。 这相当于交集操作。
UNION从结果表中删除所有重复值。 JOIN保留两个表中所有值,即使它们是冗余的。
UNION不需要任何附加的子句来合并两个表。 JOIN需要一个附加的ON子句来基于一个公共字段合并两个表。
它主要用于合并组织中旧员工列表和新员工列表的情况。 它用于需要合并相关表的情况。例如,合并包含客户列表和他们的订单的表。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程