如何对同一表中的多个列执行 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 个别名,其中C1和C2用于比较员工的 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;
输出: