Зарегистрируйтесь, чтобы продолжить обучение

INNER JOIN и WHERE SQL: Join

Инструкция WHERE фильтрует данные в SELECT запросе. А INNER JOIN позволяется связывать данные из разных таблиц. В этом уроке мы научимся совместному использованию соединений и фильтрации.

Используем INNER JOIN вместе с WHERE

Рассмотрим пример с книгами и их авторами.

Таблица authors хранит имя и происхождение автора:

authors

author_id author_name origin
1 Alexander Pushkin Russia
2 Mark Twain USA
3 Jules Verne France

Таблица books хранит название, ссылку на автора и язык, на котором издана книга. Разные переводы книги — это разные сущности в таблице:

books

book_id author_id title language
500 1 Евгений Онегин Russian
501 1 Eugene Onegin English
502 2 Приключения Тома Соера Russian
503 2 The Adventures of Tom Sawyer English
504 3 Вокруг света за восемьдесят дней Russian
505 3 Le tour du monde en quatre-vingts jours French

С помощью INNER JOIN мы можем связать каждую книгу с ее автором, а оператор WHERE позволяет отфильтровать строки по заданному условию.

Например, нам нужно получить список книг и их авторов — книги должны быть изданы на русском языке, а авторы должны быть иностранными. Следующий запрос решает нашу задачу:

SELECT
    authors.author_name,
    books.title
FROM books
INNER JOIN authors
    ON
        books.author_id = authors.author_id -- связываем книги с их авторами
WHERE
    books.language = 'Russian' -- издание на русском языке
    AND authors.origin != 'Russia' -- иностранный автор

Результат выполнения запроса:

author_name title
Mark Twain Приключения Тома Соера
Jules Verne Вокруг света за восемьдесят дней

View on DB Fiddle

Логически СУБД выполняет запрос в следующем порядке:

  1. INNER JOIN — сначала выполняется соединение двух таблиц по условию: books.author_id = authors.author_id
  2. WHERE — затем применяется фильтрация строк с условием: books.language = 'русский' AND authors.origin != 'Россия'
  3. Отбрасываются все столбцы кроме author_name и title

В реальности СУБД может изменить порядок операций, чтобы получить такой же результат, но быстрее.

Выводы

В этом уроке мы изучили, как применять фильтрацию в запросах с соединением таблиц. Операторы WHERE и INNER JOIN обогащают возможности друг друга. Совмещая их, мы можем точнее описать желаемый набор данных.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff