📜  SQL查询合并两个没有公共列的表

📅  最后修改于: 2022-05-13 01:54:18.442000             🧑  作者: Mango

SQL查询合并两个没有公共列的表

在学习过程中的大多数查询中,我们通常使用连接那些具有一些公共列或它们之间的关系的表。但是当涉及到现实生活中的问题时,很少会发现这种最简单的条件。主要发现复杂的任务,例如连接两个没有公共列的表。

让我们首先看看我们将在此示例中加入的表:

创建数据库:

使用以下 SQL 语句创建名为geeks的数据库:

CREATE DATABASE GFG;

使用数据库:



使用以下 SQL 语句将数据库上下文切换到 geeks:

USE GFG;

添加表:

现在我们创建两个名为 table1 和 table2 的表

CREATE TABLE table1
(
    Name1 VARCHAR(20),
    ID1 INT PRIMARY KEY,
    Salary1 INT
);

CREATE TABLE table2
(
    Name2 VARCHAR(20),
    ID2 INT PRIMARY KEY,
    Salary2 INT
);

现在,将数据添加到表

INSERT INTO table1
ValUES
('Harish',1,1000),
('Rakesh',2,2000),
('Mukesh',3,3000),
('Suresh',4,4000),
('Ramesh',5,4000);

INSERT INTO table2
VALUES
('Astitva',1,4000),
('Maharaj',2,41000);

要验证表的内容,请使用以下语句:

对于表 1:

SELECT * FROM table1;

对于表 2:

SELECT * FROM table2;



现在我们可以看到上面两个表中没有两列是相同的。现在要将它们合并到一个表中,我们有 3 种不同的方法。

方法 1(交叉联接):您可能听说过内联接、外联接等几种联接,与存在交叉联接的方式相同,它用于形成没有或有公共列的表的笛卡尔积。因此,由于这些连接不检查任何列,它们只是对两个表进行乘积,因此这些连接对于任何查询都没有好处,因为这些连接将导致数据重复。此外,会出现不一致的情况。但是因为我们有兴趣了解这些方法,所以我们正在讨论它。

要进行交叉连接,我们只需要在 FROM 子句中指定表的名称。不,需要 WHERE 子句。

SELECT * FROM table1, table2;

5*2=10

方法 2(UNION 方法):此方法与上述方法不同,它不仅仅是一个连接。它的主要目的是通过 Row by Row 方法组合表格。它只是将两个表的 UNIQUE行数相加,并根据方法中指定的第一个表命名列。

SELECT *
FROM TABLE1
UNION
SELECT *
FROM TABLE2;

这将返回在 TABLE1 的列名下组合在一起的所有行(唯一)。

我们还可以查询单个列或重命名此方法中的列,如下所示:

SELECT salary1 as salary
FROM TABLE1
UNION
SELECT salary2 as salary
FROM TABLE2;

因此,我们能够在两个表中选择所有可能的薪水并提供给不同的客户。此方法返回唯一数据。

方法 3(UNION ALL): UNION 和 UNIONALL 方法之间的唯一区别是前一种方法允许非重复(唯一)行,但后一种方法也通过组合重复项导致所有可能的行。

SELECT salary1 as salary
FROM TABLE1
UNION all
SELECT salary2 as salary
FROM TABLE2;

因此,我们能够看到将表与非公共列组合的三种不同方法。这些方法根据需要在不同的条件下使用。