SQL запрос с использованием JOIN

208
13 апреля 2017, 17:04

Даны две таблицы со столбцами

AUTHORS

-AUTHOR_ID (PK)

-AUTHOR_NAME

BOOKS

-BOOK_ID (PK)

-AUTHOR_ID (FK)

-BOOK_NAME

Задача: Выбрать имена всех авторов, у которых более 10 книг.

Заранее спасибо. PS Буду благодарен за ссылку на объяснение джойнов для самых тупых (все, что нашел сам, не помогло понять)

Answer 1
-- выбрать имена авторов
SELECT a.author_name
-- из таблиц авторов и книг
FROM authors a, books b
-- где идентификатор автора совпадает с идентификатором автора книги
WHERE a.author_id = b.author_id
-- причём для данного автора
GROUP BY a.author_name
-- количество (уникальных) идентификаторов книг больше 10
HAVING COUNT( /* DISTINCT */ b.book_id) > 10

Если непременно нужен JOIN, то

-- выбрать имена авторов
SELECT a.author_name
-- из таблиц авторов и книг
FROM authors a INNER JOIN books b
-- где идентификатор автора совпадает с идентификатором автора книги
ON a.author_id = b.author_id
-- причём для данного автора
GROUP BY a.author_name
-- количество (уникальных) идентификаторов книг больше 10
HAVING COUNT( /* DISTINCT */ b.book_id) > 10
Answer 2

Сам запрос:

SELECT AUTHORS.AUTHOR_NAME FROM AUTHORS 
INNER JOIN (
  SELECT AUTHORS.AUTHOR_ID AS AID, COUNT(*) AS BOOKCOUNT FROM
    AUTHORS INNER JOIN BOOKS ON AUTHORS.AUTHOR_ID = BOOKS.AUTHOR_ID
    GROUP BY AUTHORS.AUTHOR_ID
) ON AUTHORS.AUTHOR_ID = AID WHERE BOOKCOUNT > 10;

Применяемый здесь INNER JOIN работает так: он формирует из двух таблиц одну, кортежи которой "слеплены" из атрибутов обоих таблиц, однако для "слепки" выбираются лишь те кортежи, для которых выполняется условие после ON.

READ ALSO
Как спроектировать БД и поиск с фильтром для доски объявлений?

Как спроектировать БД и поиск с фильтром для доски объявлений?

Подскажите хорошие практики для проектирования БД и дальнейшего поиска по фильтрам

229
Остановка потока

Остановка потока

Ребята, есть тред, в котором есть около 100 методовКоторые в свою очередь идет минут по 10

218
Компиляция однотипных классов ant

Компиляция однотипных классов ant

Всем приветЕсть файл build

225