SQL中如何从一张表中选择另一张表中不存在的所有记录?
我们可以通过将 NOT IN 或 NOT EXISTS 与包含子查询中的另一个表的子查询一起使用来获取另一个表中不存在的表中的记录。在此让我们逐步了解如何从一个表中选择另一个表中不存在的所有记录。
创建数据库
使用以下命令创建名为 GeeksforGeeks 的数据库:
CREATE DATABASE GeeksforGeeks
使用数据库
要使用 GeeksforGeeks 数据库,请使用以下命令:
USE GeeksforGeeks
创建表:
使用以下 SQL 查询创建一个包含 4 列的表 employee_details:
CREATE TABLE employee_details(
emp_id VARCHAR(8),
emp_name VARCHAR(20),
emp_designation VARCHAR(20),
emp_age INT);
CREATE TABLE employee_resigned(
emp_id VARCHAR(8),
emp_name VARCHAR(20),
emp_designation VARCHAR(20),
emp_age INT);
验证表:
使用以下 SQL 查询查看数据库中表的描述:
EXEC sp_columns employee_details;
EXEC sp_columns employee_resigned;
向表中插入数据
使用以下 SQL 查询将行插入到 employee_details 和 employee_resigned 表中:
INSERT INTO employee_details VALUES
('E40001','PRADEEP','H.R',36),
('E40002','ASHOK','MANAGER',28),
('E40003','PAVAN KUMAR','ASST MANAGER',28),
('E40004','SANTHOSH','STORE MANAGER',25),
('E40005','THAMAN','GENERAL MANAGER',26),
('E40006','HARSH',' ANALYST',25),
('E40007','SAMHITH','GENERAL MANAGER',26),
('E40008','SAMEER','SENIOR ANALYST',25),
('E40009','RISABH','BUSINESS ANALYST',26);
INSERT INTO employee_resigned VALUES('E40001','PRADEEP','H.R',36),
('E40004','SANTHOSH','STORE MANAGER',25),
('E40005','THAMAN','GENERAL MANAGER',26);
验证插入的数据:
使用以下 SQL 查询在插入行后查看表 employee_details:
SELECT* FROM employee_details;
SELECT* FROM employee_resigned;
查询:
- 使用 NOT EXISTS 查询以找出未辞职的员工 ID 和姓名。
SELECT emp_id,emp_name
FROM employee_details
WHERE NOT EXISTS
(SELECT *
FROM employee_resigned
WHERE employee_details.emp_id = employee_resigned.emp_id);
- 查询以查找未使用 NOT IN 辞职的员工的详细信息。
SELECT *
FROM employee_details
WHERE emp_id NOT IN
(SELECT emp_id
FROM employee_resigned)