SQL-запрос для исключения записей, если они совпадают с записью в другой таблице

Опубликовано: 1 Сентября, 2022

В этой статье мы увидим, как написать SQL-запрос для исключения записей, если он соответствует записи в другой таблице. Мы можем выполнить вышеуказанную функцию, используя оператор NOT IN в SQL. Для получения списка значений мы можем написать подзапрос.

Оператор NOT IN действует как отрицание оператора In и возвращает результаты, за исключением элементов, присутствующих в указанном списке.

Синтаксис: НЕ В

SELECT * FROM table_name WHERE column_name NOT IN (list);

Теперь для демонстрации выполните следующие шаги:

Шаг 1: Создайте базу данных

мы можем использовать следующую команду для создания базы данных с именем geeks.

Запрос:

CREATE DATABASE geeks;

Шаг 2: Используйте базу данных

Используйте приведенный ниже оператор SQL, чтобы переключить контекст базы данных на гиков:

Запрос:

USE geeks;

Шаг 3: Определение таблицы

У нас есть две таблицы с именами «demo_table1» и «demo_table2» в нашей компьютерной базе данных.

Запрос (демо_таблица1):

CREATE TABLE demo_table1(
NAME VARCHAR(20),
AGE INT,
CITY VARCHAR(20) );

Запрос (демо_таблица2):

CREATE TABLE demo_table2(
NAME VARCHAR(20),
AGE int);

Шаг 4: Вставьте данные в таблицу

Запрос (демо_таблица1):

INSERT INTO demo_table1 VALUES
("Romy",23,"Delhi"),
("Rahul",23,"Delhi"),
("Nikhil",24,"Punjab"),
("Ranvir",23,"Punjab"),
("Samiksha",23,"Banglore"),
("Ashtha",24,"Banglore"),
("Tannu",30,"Patna"),
("Girish",30,"Patna"),
("Ram", 20 , "Patna"),
("Raj", 12, "Delhi");

Запрос (демо_таблица2):

INSERT INTO demo_table2 VALUES
("Fanny",25 ),
("Prem", 30), 
("Preeti",21),
("Samita",32),
("Rahul",23),
("Ranvir",23);

Шаг 5. Просмотрите содержимое

Выполните приведенный ниже запрос, чтобы просмотреть содержимое таблицы.

Запрос:

SELECT * FROM demo_table1;

Выход:

Запрос:

SELECT * FROM demo_table2;

Выход:

Шаг 6: Исключите данные из demo_table1 на основе совпадений, найденных в demo_table2

Для демонстрации исключите данные из demo_table1, значения которых в столбце NAME соответствуют записям в столбце Name в demo_table2.

Запрос:

SELECT * FROM demo_table1 WHERE NAME NOT IN (SELECT NAME FROM demo_table2);

Выход:

На изображении мы видим, что две записи исключены, поскольку значения совпадают с записью в demo_table2.

Альтернативный метод:

В качестве альтернативы, чтобы исключить строки из demo_table1, чьи значения в столбце NAME соответствуют строкам в столбце NAME в demo_table2, мы можем выполнить это с левым соединением.

Как мы знаем, левое соединение возвращает все строки в левой таблице и соответствует только строкам в правой таблице, поэтому значения правого столбца таблицы будут NULL, если в них нет совпадающих строк. Следовательно, мы будем использовать эту концепцию левого соединения с условием, что значение столбца правой таблицы равно нулю.

Запрос вышеуказанного контента с использованием левого соединения и условия:

select  t1.* from demo_table1 t1 left join demo_table2 t2 on t1.name = t2.name where t2.name is null

Это возвращает требуемый набор данных.