Разница между ON и WHERE в SQL: подробный разбор

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Главное отличие между ON и WHERE в SQL заключается в их функциональности: ON определяет условие, по которому происходит соединение таблиц, в то время как WHERE осуществляет фильтрацию результатов запроса. Вот пример:

SQL
Скопировать код
SELECT a.*, b.*
FROM TableA a
JOIN TableB b ON a.id = b.foreign_id -- ON определяет, по какому условию нужно соединить таблицы.
WHERE b.value > 100; -- WHERE отфильтровывает результат, оставляя только те записи, где значение больше 100.

Таким образом, ON отвечает за связывание таблиц, а WHERE – за отбор данных из уже сформированного результата.

Кинга Идем в IT: пошаговый план для смены профессии

Что происходит "за кулисами" при объединении

В операциях JOIN условие ON ведет себя как мост между строками двух таблиц. В свою очередь, WHERE выступает в роли фильтра, пропуская через себя уже объединенное множество данных и удаляя лишние строки.

Left outer join – особенный случай

При использовании LEFT OUTER JOIN условие в ON определяет, какие строки из "левой" таблицы попадут в результат, даже если в "правой" таблице нет подходящих значений – в этом случае вместо данных будет NULL. Однако WHERE может исключить строки с NULL, тем самым превратив outer join в inner join.

Влияние на производительность – скрытый потенциал

Грамотное использование ON и WHERE помогает оптимизировать запросы: они сокращают количество обрабатываемых данных и ускоряют выполнение запроса. Все мы любим быстрые запросы!

Визуализация

Представим, у нас есть две школьные площадки – А и Б:

Площадка А: [Ученик 1, Ученик 2, Ученик 3] Площадка Б: [Ученик 2, Ученик 3, Ученик 4]

Конструкция "ON" схожа с дружественным браслетом:

Браслеты у учеников: [Ученик 2, Ученик 3]
# "ON" соединяет учеников, у которых совпадают браслеты.

Оператор "WHERE" похож на выбор после перемены:

Ученика 4 так и не выбрали
# "WHERE" отфильтровывает учеников уже после выбора.

Таким образом, ON собирает команды, а WHERE помогает выделить лидеров.

Нюансы объединений

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

Питфолы и решения

Ошибкой является, когда в LEFT OUTER JOIN условие в WHERE включает в себя поля правой таблицы, что ведет к исключению некоторых строк левой таблицы. Использование IS NULL или функции COALESCE в WHERE позволяют контролировать эту ситуацию.

Понятные запросы – эффективные запросы

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

Полезные материалы

  1. MySQL :: Руководство по MySQL 8.0 :: 15.2.13.2 Синтаксис JOIN — Официальное описание синтаксиса JOIN от создателей MySQL.
  2. Визуальное представление SQL соединений – CodeProject — Визуализация помогает лучше осознать концепции, поэтому это руководство будет очень полезным.
  3. SQL JOIN — Визуальные примеры, помогающие выразительнее вникнуть в суть JOIN.
  4. SQL Outer Joins | Промежуточный SQL – Mode — Подробное рассмотрение OUTER JOINS и условий в WHERE.
  5. SQLBolt – Изучаем SQL – Урок 6: Многотабличные запросы с помощью JOINs — Платформа для тренировки и улучшения навыков работы с JOIN.
  6. SQL Joins — Руководство по JOIN в SQL для начинающих.
  7. Joins — Детальный обзор разных видов соединений в Oracle.