SELECT FilmName, ActorName
FROM (Films F INNER JOIN Cast C ON F.FilmID = C.FilmID)
INNER JOIN Actors A ON C.ActorID = A.ActorID
Вывести актеров, которые еще не играли ни в одном фильме.
SELECT ActorName
FROM Cast C RIGHT JOIN Actors A ON C.ActorID = A.ActorID
WHERE C.ActorID IS NULL;
Здесь из-за связи LEFT JOIN будут выведены записи обо всех актерах, однако те актеры, ID которых нет в таблице Cast, в поле C.ActorID будут иметь значение NULL. Этим можно воспользоваться при отборе записей (WHERE C.ActorID IS NULL).
Добавление данных
Для добавления данных в SQL применяется инструкция INSERT. Чаще всего её используют для вставки в таблицу отдельных записей. Инструкция выглядит следующим образом:
INSERT INTO имя_таблицы
VALUES (значение 1, значение 2, …)
После ключевого слова VALUES указывается список значений, которые будут добавлены в таблицу. Значения вставляются в столбцы в порядке расположения столбцов в таблице. Вставка данных в столбец счетчика (с признаком IDENTITY) по умолчанию невозможна, в инструкции SQL это поле пропускается.
Например, для добавления новой группы в таблицу «Genres» (GenreID, GenreName, GenreHistory):
INSERT INTO Genres
VALUES ('Комиксы', 'Не знаю, какая у них история');
Для вставки данных можно указать конкретные столбцы, если столбца нет в списке выборки, и он не является счетчиком, в него будет записано значение NULL.
INSERT INTO Genres (GenreName, GenreHistory)
VALUES ('Комиксы', 'Не знаю, какая у них история');
INSERT INTO Genres (GenreName)
VALUES ('Комиксы');
В столбцы, для которых значение не указано, будет добавлено значение NULL.
Команду INSERT можно также использовать для перемещения данных из одной таблицы в другую. Для этого предложение VALUES нужно заменить запросом SELECT. Таблицы должны быть идентичными – иметь равное количество столбцов с одинаковыми типами данных. Например, можно записать все жанры из таблицы Genres в Genres1. Код жанра (поле IDENTITY) проставляется автоматически.
INSERT INTO Genres1
SELECT GenreName, GenreHistory
FROM Genres;
Добавить записи обо всех читателях г. Ступино из таблицы Readers в таблицу Readers1.
INSERT INTO Readers1 (ReaderName, ReaderSurname, Passport, CityID)
SELECT ReaderName, ReaderSurname, Passport, c.CityID
FROM Readers r INNER JOIN Cities c ON r.CityID = c.CityID
WHERE CityName = 'Ступино';
Удаление данных
Для добавления данных в SQL применяется инструкция DELETE. Удаляются не отдельные поля, а строки целиком.
DELETE FROM Books; - удалить все записи о книгах.
Если требуется удалить определенные записи, это можно указать в разделе WHERE.
DELETE FROM Books
WHERE BookName = 'Мертвые души';
Если необходимо удалить записи по признаку, информация о котором хранится в другой таблице, строится подзапрос в разделе WHERE. Например, удалить записи о книгах детективного жанра.
DELETE FROM Books
WHERE GenreID IN
(SELECT GenreID
FROM Genres
WHERE GenreName = 'Детектив');
Здесь запрос SELECT возвращает какое-то количество значений GenreID (те, для которых имя жанра – «Детектив»). После этого значение каждого поля GenreID из таблицы Books сравнивается по очереди со всеми значениями, полученными с помощью SELECT. Если значения совпадают, соответствующая запись удаляется из таблицы Books.
IN обозначает вхождение – входит ли GenreID в множество значений, которое вернет SELECT.
Если заранее известно, что SELECT способен вернуть только одну запись, вместо оператора IN можно использовать знак «=». В нашем случае книг-детективов может быть несколько.
Удалить из библиотеки книги Агаты Кристи
DELETE FROM Books
WHERE BookID IN
(SELECT BookID
FROM Authors a INNER JOIN AuthorShip ash ON a.AuthorID = ash.AuthorID
WHERE AuthorName = 'Агата' AND AuthorSurname = 'Кристи');
Изменение данных
Происходит с помощью инструкции UPDATE. Поля, значения которых нужно изменить, указываются в разделе SET. Например, изменить название г. Ступино на Новое Ступино, а его индекс на 142900
UPDATE Cities
SET CityName = 'Новое Ступино', PostCode = '142900'
WHERE CityName = 'Ступино';
Если необходимо изменить несколько полей, в разделе SET их указывают через запятую. В раздел WHERE можно вставлять подзапросы, так же, как в инструкции DELETE. Например, отметить, что читатель Романов сдал все книги.
UPDATE BookLending
SET ReturnFlag = 1
WHERE ReaderID =
(SELECT ReaderID
FROM Readers
WHERE ReaderSurname = 'Романов')
Подзапрос также может находиться в разделе SET.
Изменить жанр книги «Мертвые души» на «Роман». Для этого необходимо изменить поле GenreID в таблице Books, при этом само название жанра менять ни к чему.
UPDATE Books
SET GenreID = (SELECT GenreID FROM Genres WHERE GenreName = 'Роман')
WHERE BookName = 'Мертвые души';
Дата добавления: 2018-09-24; просмотров: 299;