Обмен технологиями

MySQL: использовать или где после левого соединения?

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

В MySQLLEFT JOIN Используется для возврата всех записей из левой таблицы (то есть таблицы слева от ключевого слова LEFT JOIN), даже если в правой таблице нет соответствующих записей. Для тех записей, которые не совпадают в правой таблице, правая часть таблицы результатов будет заполнена NULL.оONиWHEREУпотребление предложений, они находятся вLEFT JOINРоли здесь разные:

  • НА Предложение: используется для определения условий соединения, то есть определения того, какие записи следует объединить.Когда вам необходимо объединить записи на основе связи между определенными значениями полей в левой и правой таблицах, следует поставить такие условияON позже.если вONПозже появятся дополнительные условные ограничения на правую таблицу, которые также будут применяться при подключении, но не повлияют на принцип возврата всех записей из левой таблицы.
  • ГДЕ Пункт: используется для пар, прошедшихJOIN Набор результатов, сгенерированный операцией, дополнительно фильтруется.Когда ставится условиеWHEREте записи, которые не соответствуют условиям (будь то из левой таблицы или из правой таблицы), будут удалены, что может повлиять на первоначальное намерение вернуть все записи из левой таблицы, особенно при обработке значений NULL, вам необходимо быть особо осторожный.

Конкретный случай первый:

Предположим, у нас есть две таблицы, одна из нихemployees(таблица сотрудников), другойdepartments(таблица отделов), мы хотим узнать всех сотрудников и названия их отделов, даже если некоторые сотрудники не закреплены за конкретным отделом.

таблица сотрудников:

идентификаторимя
1Элис
2Боб
3Кэрол

Таблица отделов:

идентификаторимя
1HR
2ЭТО
3Маркетинг

в,employeesстолdepartment_idПоле может иметь значение NULL, что указывает на отсутствие назначенного отдела.

Пример использования ВКЛ:

SELECT employees.name, departments.name AS department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;