SQLite LEFT JOIN или LEFT OUTER JOIN
Что такое левое соединение или левое внешнее соединение в SQLite?
Операция Left Join или Left Outer Join принимает два отношения A и B и возвращает внутреннее объединение A и B вместе с несопоставленными строками A. A является первым отношением, определенным в предложении FROM, и, следовательно, является левым отношением. Левое объединение включает в себя несопоставленные строки левого отношения вместе с сопоставленными столбцами в результате.
SQLite LEFT JOIN объединяет две таблицы и выбирает строки на основе условия, которое совпадает в обеих таблицах, и несопоставленные строки также будут доступны из таблицы, написанной перед предложением JOIN.
Таким образом, в случае LEFT JOIN или LEFT OUTER JOIN, SQLite -
1. берет все выбранные значения из левой таблицы
2. объединяет их с именами столбцов (указанными в условии) из правой таблицы
3. получить соответствующие строки из обеих связанных таблиц.
4. устанавливает значение каждого столбца из правой таблицы в NULL, что не соответствует левой таблице.
Синтаксис:
Вот основной синтаксис.
ВЫБЕРИТЕ результат ИЗ таблицы 1 ВЛЕВО [ВНЕШНИЙ] РЕЙТИНГ table2 ON table1.keyfield1 = table2.keyfield2 [ГДЕ expr]
Иллюстрированная презентация
Предположим, что у нас есть две таблицы таблица-A и таблица-B. Уникальными столбцами для двух таблиц являются ID. Значения в столбце ID для таблицы-A составляют 210 211 212 и 213, а значения для таблицы B - 210 214 212 212 и 212. Вот графическое представление.
Пример: SQLite LEFT JOIN или LEFT OUTER JOIN
ЛЕВОЕ СОЕДИНЕНИЕ сохранит записи «левой» таблицы. SQLite начинается с левой таблицы. Для каждой строки из псевдонима SQLite просматривает таблицу, ссылается на то, выполнено ли условие и возвращает Patient_name и vdate. Для несопоставленных строк возвращается ноль. Каждый элемент в левой таблице будет показан в результате SQLite, даже если в другой таблице нет совпадений.
Вот примеры таблиц.
стол - врачи доктор_ид степень доктора_имя ---------- -------------- ---------- 210 Доктор Джон Линга, доктор медицины 211 Доктор Питер Холл MBBS 212 Доктор Ке Джи Доктор медицины 213 д-р Пат Фэй, доктор медицины стол - посещения doctor_id имя_пользователя vdate ---------- ------------ ---------- 210 Джулия Найер 2013-10-15 214 ТиДжей Олсон 2013-10-14 215 Джон Сео 2013-10-15 212 Джеймс Марлоу 2013-10-16 212 Джейсон Маллин 2013-10-12
Вот пример
Если мы хотим выяснить, какой врач посещал какого пациента, а также дату посещения, можно использовать следующий SQL.
SELECT a.doctor_id,a.doctor_name,
c.patient_name,c.vdate
FROM doctors a
LEFT JOIN visits c
ON a.doctor_id=c.doctor_id;
Вот вывод:
doctor_id doctor_name имя_пользователя vdate ---------- -------------- ------------ ---------- 210 Доктор Джон Линга Джулия Найер 2013-10-15 211 Доктор Питер Холл 212 Доктор Ке Джи Джеймс Марлоу 2013-10-16 212 Доктор Ке Джи Джейсон Маллин 2013-10-12 213 Доктор Пэт Фэй
Из приведенного выше результата строки, обозначенные красным цветом, показывают, что указанные критерии не соответствуют для правой таблицы, то есть посещают таблицы с псевдонимом c. Doctor_id 211 и 213 не существует в таблице посещений. Таким образом, для этих несопоставленных строк он возвращает NULL в наборе результатов для псевдонима столбцов c.
Иллюстрированная презентация
Пример: SQLite LEFT JOIN с USING
Ключевое слово USING может быть использовано для достижения того же результата.
Вот пример
SELECT doctor_id,doctor_name,
patient_name,vdate
FROM doctors
LEFT JOIN visits
USING(doctor_id);
Вот вывод:
doctor_id doctor_name имя_пользователя vdate ---------- -------------- ------------ ---------- 210 Доктор Джон Линга Джулия Найер 2013-10-15 211 Доктор Питер Холл 212 Доктор Ке Джи Джеймс Марлоу 2013-10-16 212 Доктор Ке Джи Джейсон Маллин 2013-10-12 213 Доктор Пэт Фэй
Результат такой же, как в сортировщике SQL.
Пример: SQLite NATURAL LEFT OUTER JOIN
NATURAL LEFT OUTER JOIN автоматически использует все совпадающие имена столбцов для объединения.
Вот пример
SELECT doctor_id,doctor_name,
patient_name,vdate
FROM doctors
NATURAL LEFT OUTER JOIN visits;
Вот вывод:
doctor_id doctor_name имя_пользователя vdate ---------- -------------- ------------ ---------- 210 Доктор Джон Линга Джулия Найер 2013-10-15 211 Доктор Питер Холл 212 Доктор Ке Джи Джеймс Марлоу 2013-10-16 212 Доктор Ке Джи Джейсон Маллин 2013-10-12 213 Доктор Пэт Фэй
LEFT JOIN: SQL и другие реляционные базы данных
Предыдущая: ВНУТРЕННЯЯ РЕШЕНИЕ
Далее: CROSS JOIN
Новый контент: Composer: менеджер зависимостей для PHP , R программирования