Главная страница

лабораторная. Лаба№6_внешнее_обьединение_таблиц (3). Лабораторная 6 Объединение таблиц (внешнее объединение)


Скачать 72.21 Kb.
НазваниеЛабораторная 6 Объединение таблиц (внешнее объединение)
Анкорлабораторная
Дата13.03.2023
Размер72.21 Kb.
Формат файлаdocx
Имя файлаЛаба№6_внешнее_обьединение_таблиц (3).docx
ТипУрок
#984463

Лабораторная №6

Объединение таблиц (внешнее объединение)

Итак, в продолжение прошлого урока, нам надо вывести всех пользователей и темы, которые они создавали, если таковые имеются. Если мы воспользуемся внутренним объединением, рассмотренным на прошлом уроке, то получим в итоге следующее:



То есть в результирующей таблице есть только те пользователи, которые создавали темы. А нам надо, чтобы выводились все имена. Для этого мы немного изменим запрос:
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


написать администратору сайта