Практическое задание

Эта задача — шаг 9 курса «Базы данных за вечер: SQLite, PostgreSQL, Redis»

Книги и авторы через JOIN

средне~7 мин

В базе library есть таблицы authors(id, name, country) и books(id, author_id, title). Выведи для каждой книги пару автор|название, отсортированную по названию книги по алфавиту, в /root/catalog.txt (формат psql -tA, поля через |). Авторы без книг в список не попадают.

Запрос напиши в файле /root/books.sql во вкладке «Редактор» — JOIN на несколько строк там читать проще — и выполни его через psql.

Что потренируешь:
  • join
  • inner join
  • внешний ключ
  • order by
  • psql -tA

Разбор темы

Реляционные базы хранят данные без повторов: у книги лежит не имя автора, а ссылка на его строку в другой таблице (внешний ключ). Чтобы получить читаемый результат, таблицы соединяют JOIN с условием в ON — для каждой книги находится строка автора с совпадающим id. Внутреннее соединение оставляет только пары, нашедшиеся с обеих сторон, поэтому автор без книг в выдачу не попадёт; если бы он был нужен, взяли бы внешнее соединение (LEFT JOIN от авторов). Алиасы таблиц сокращают запись и снимают неоднозначность одноимённых столбцов вроде id.

Что проверяется

  1. автор|название по всем книгам, по алфавиту названий
  2. запрос с JOIN лежит в /root/books.sql

Как это выглядит