📜  如何对同一表中的多个列执行 SQL 连接?

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

如何对同一表中的多个列执行 SQL 连接?

在 SQL 中,为了提取有价值的数据,我们需要在同一张表中执行自连接。自联接是一个简单的叉积,后跟一个条件。下面的文章中显示了相同的说明。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库。

第 1 步:创建数据库。为此,请使用以下命令创建一个名为 GeeksForGeeks 的数据库。

询问:

CREATE DATABASE GeeksForGeeks

输出:

第 2 步:使用 GeeksForGeeks 数据库。为此,请使用以下命令。

询问:

USE GeeksForGeeks

输出:

第 3 步:在 GeeksForGeeks 数据库中创建一个表 CORPORATE。该表有 4 列,即 E_NAME、E_ID、E_DEPT 和 E_LOC,其中包含各个员工的姓名、id、部门和位置。

询问:

CREATE TABLE CORPORATE(
E_NAME VARCHAR(10),
E_ID INT,
E_DEPT VARCHAR(10),
E_LOC VARCHAR(10));

输出:

第 4 步:描述表 CORPORATE 的结构。

询问:

EXEC SP_COLUMNS CORPORATE;

输出:

第 5 步:在 CORPORATE 表中插入 5 行。

询问:

INSERT INTO CORPORATE VALUES('RAM',1,'HR','DELHI');
INSERT INTO CORPORATE VALUES('RAM',1,'SALES','DELHI');
INSERT INTO CORPORATE VALUES('VARUN',2,'IT','BANGALORE');
INSERT INTO CORPORATE VALUES('VARUN',2,'MARKETING','HYDERABAD');
INSERT INTO CORPORATE VALUES('RAVI',3,'FINANCE','KOCHI');
INSERT INTO CORPORATE VALUES('RAVI',3,'FINANCE','TRIVANDRUM');

输出:

第 6 步:显示 CORPORATE 表的所有行。

询问:

SELECT * FROM CORPORATE;

输出:

步骤 7:检索至少在 2 个部门和至少 2 个地点工作过的所有员工的详细信息。

注意:使用AS制作表CORPORATE的 2 个别名,其中C1C2用于比较员工的 ID、部门和位置。

询问:

SELECT C1.E_NAME,C1.E_ID,C1.E_DEPT,C1.E_LOC FROM
CORPORATE AS C1,CORPORATE AS C2 WHERE C1.E_ID=C2.E_ID 
AND C1.E_DEPT<>C2.E_DEPT AND C1.E_LOC<>C2.E_LOC;

输出:

注意:虽然他在 2 个不同的部门工作过,因为他的位置相同,但这里没有显示 RAM。同样,RAVI 没有显示,尽管他曾在 2 个不同的地点工作,因为他的部门是相同的。

第 8 步:要仅显示在至少 2 个部门和至少 2 个地点工作过的员工的姓名,请仅对 E_NAME列使用SELECT并将其保留为DISTINCT以避免冗余行。

询问:

SELECT DISTINCT(C1.E_NAME) FROM CORPORATE
AS C1,CORPORATE AS C2 WHERE C1.E_ID=C2.E_ID
AND C1.E_DEPT<>C2.E_DEPT AND C1.E_LOC<>C2.E_LOC;

输出: