Пусть имеются две таблицы, созданные на SQL Server c помощью приведённых ниже скриптов и заполненные данными. Таблица Book содержит описания изданий, таблица BookInLib – перечень экземпляров книг в библиотеке.
CREATE TABLE Book(
BookId int IDENTITY(1,1) PRIMARY KEY,
Author varchar(100),
Title varchar(255) NOT NULL,
Publisher varchar(50),
BookYear smallint );
CREATE TABLE BookInLib(
LibID int PRIMARY KEY,
BookID int NOT NULL references Book(BookId),
StatusID int NOT NULL);
Требуется получить идентификаторы и названия книг (столбцы BookId и Title таблицы Book), таких, что эти книги не представлены в библиотеке (нет связанных записей в BookInLib). Из приведенного списка выберите все подходящие запросы.
Другие предметы Колледж SQL-запросы и работа с базами данных управление данными SQL Server таблицы запросы библиотека книги идентификаторы названия книг связанные записи book BookInLib Новый
Для того чтобы получить идентификаторы и названия книг из таблицы Book, которые не представлены в библиотеке (то есть, у которых нет связанных записей в таблице BookInLib), мы можем использовать SQL-запрос с оператором LEFT JOIN или подзапрос с использованием оператора NOT EXISTS или NOT IN.
Вот пошаговое объяснение, как мы можем решить эту задачу:
Мы можем выполнить LEFT JOIN между таблицами Book и BookInLib. Это позволит нам получить все записи из таблицы Book и соответствующие записи из таблицы BookInLib. Если для книги нет записи в BookInLib, то соответствующие поля будут NULL.
Пример запроса:
SELECT b.BookId, b.Title FROM Book b LEFT JOIN BookInLib bl ON b.BookId = bl.BookID WHERE bl.BookID IS NULL;
В этом случае мы будем проверять, существует ли запись в таблице BookInLib для каждой книги. Если записи нет, то книга будет включена в результат.
Пример запроса:
SELECT b.BookId, b.Title FROM Book b WHERE NOT EXISTS ( SELECT 1 FROM BookInLib bl WHERE bl.BookID = b.BookId );
Этот метод также позволяет получить книги, которые отсутствуют в библиотеке, путем проверки, не содержится ли идентификатор книги в списке идентификаторов книг из таблицы BookInLib.
Пример запроса:
SELECT b.BookId, b.Title FROM Book b WHERE b.BookId NOT IN ( SELECT bl.BookID FROM BookInLib bl );
Все три метода приведут к одному и тому же результату, но использование LEFT JOIN или NOT EXISTS обычно считается более оптимальным и предпочтительным в большинстве случаев, особенно если таблицы большие. Вы можете выбрать любой из предложенных вариантов в зависимости от ваших предпочтений и требований к производительности.