ГлавнаяУроки 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



Предыдущий урок Вернуться в раздел Следующий урок 
Программирование на Python для начинающих


Теперь нажмите кнопку, что бы не забыть адрес и вернуться к нам снова.