Главная → Уроки SQL → Урок 7. Объединение таблиц (внешнее объединение)
SQL - Урок 7. Объединение таблиц (внешнее объединение)
Итак, в продолжение прошлого урока, нам надо вывести всех пользователей и темы, которые они создавали, если таковые имеются.
Если мы воспользуемся внутренним объединением, рассмотренным на прошлом уроке, то получим в итоге следующее:
То есть в результирующей таблице есть только те пользователи, которые создавали темы. А нам надо, чтобы выводились все имена.
Для этого мы немного изменим запрос:
SELECT users.name, topics.topic_name
FROM users LEFT OUTER JOIN topics
ON users.id_user=topics.id_author;
И получим желаемый результат - все пользователи и темы, ими созданные. Если пользователь не создавал тему, но в соответствующем
столбце стоит значение NULL.
Итак, мы добавили в наш запрос ключевое слово - LEFT OUTER JOIN, указав тем самым, что из таблицы слева надо
взять все строки, и поменяли ключевое слово WHERE на ON. Кроме ключевого слова
LEFT OUTER JOIN может быть использовано ключевое слово RIGHT OUTER JOIN. Тогда будут
выбираться все строки из правой таблицы и имеющиеся связанные с ними из левой таблицы. И наконец, возможно полное внешнее
объединение, которое извлечет все строки из обеих таблиц и свяжет между собой те, которые могут быть связаны. Ключевое слово
для полного внешнего объединения - FULL OUTER JOIN.
Давайте поменяем в нашем запросе левостороннее объединение на правостороннее:
Как видите, теперь у нас есть все темы (все строки из правой таблицы), а вот пользователи только те, которые темы создавали (т.е. из левой таблицы
выбираются только те строки, которые связаны с правой таблицей).
К сожалению полное объединение СУБД MySQL не поддерживает.
Подведем итог этого короткого урока. Синтаксис для внешнего объединения следующий:
SELECT имя_таблицы_1.имя_столбца, имя_таблицы_2.имя_столбца
FROM имя_таблицы_1 ТИП ОБЪЕДИНЕНИЯ имя_таблицы_2
ON условие_объединения;
где ТИП ОБЪЕДИНЕНИЯ - либо LEFT OUTER JOIN, либо RIGHT OUTER JOIN