Связи между таблицами

Запрос может быть обращён одновременно к нескольким таблицам базы данных. Для этого:
Синтаксис запроса к нескольким таблицам выглядит так:
Скопировать кодSQL
SELECT -- Столбцы, данные из которых мы хотим получить в ответе на запрос. -- Для удобства можно задать новое имя для столбца командой AS ИмяТаблицы1.ИмяСтолбца1 AS firstField, ИмяТаблицы2.ИмяСтолбца1 AS secondField, ... FROM -- Таблицы, из которых запрашиваем данные: ИмяТаблицы1, ИмяТаблицы2, ... WHERE -- Условия используют ту же нотацию: ИмяТаблицы.ИмяСтолбца -- Указываем, какими полями связаны записи в запрошенных таблицах ИмяТаблицы1.ИмяСтолбцаN = ИмяТаблицы2.ИмяСтолбцаM
Наиболее частый способ для связи между таблицами — это связь через поля с первичным ключом.
Каждая запись в таблицах book и spouse ссылается на значение в колонке id таблицы author. По этой связи несложно определить, кто написал пьесу «Ива́нов» или чьей женой была Ольга Книппер.
image
При создании таблицы в базе данных мы создавали поле, обозначенное как «первичный ключ», PRIMARY KEY. Сейчас этот ключ понадобится, так что повторим его свойства:
Продолжим работать с базой русской литературы. Таблица author содержит имена и годы рождения авторов. Таблица book содержит название и год написания книги, а также ID автора из таблицы author.
Скопировать кодSQL
-- создаём таблицу author и определяем, что в ней будут -- колонки id, name и birth_year CREATE TABLE author( -- в таблице author в колонке id содержатся целые числа, -- в этой колонке каждая ячейка содержит уникальное значение id INTEGER PRIMARY KEY, name TEXT NOT NULL, birth_year INTEGER ); -- создаём таблицу book CREATE TABLE book ( id INTEGER PRIMARY KEY, title VARCHAR, year INTEGER, author_id INTEGER, -- Это специальный синтаксис, который связывает -- записи с таблицей авторов FOREIGN KEY(author_id) REFERENCES author(id) );
Графическое представление связи между таблицами:
image
Заполним таблицу авторов и таблицу книг:
image
Получим информацию о книгах, опубликованных в 1866 году, и об авторах этих книг. Для этого составим запрос, который вернет нам из таблицы author имя автора, а из таблицы book — название и год издания литературного произведения.
Скопировать кодSQL
SELECT -- Поля, которые мы хотим получить в ответе author.name, book.title, book.year FROM -- Таблицы, из которых запрашиваем данные: author, book WHERE -- В таблице book найти строки, в которых поле year содержит "1886" book.year = 1886 AND -- И значение поля book.author_id должно быть равно значению author.id book.author_id = author.id;
Результирующая выборка, полученная по нашему запросу:
Скопировать код
name title year ---------------- --------------------------------------------------- --------- Лев Толстой Власть тьмы, или Коготок увяз, всей птичке пропасть 1886 Антон Чехов О вреде табака 1886 Софья Ковалевская Воспоминания о Джордже Эллиоте 1886
Выберите верные утверждения
Скопировать кодSQL
SELECT author.name AS name, book.title AS title, book.year AS year FROM author, book WHERE <условие>
Какое условие нужно дописать в блоке WHERE, чтобы выбрать все книги Достоевского, написанные с 1875 года включительно?