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