Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 22:14:34
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

Работа с базой данных. Объединение данных в результатах SQL запросов (Часть 1)


Предыдущий цикл: Сортировка
Шаг 10. Пересечение или INNER JOIN
Шаг 11. Пересечение с необязательным присутствием слева или LEFT JOIN
Шаг 12. Пересечение с необязательным присутствием справа или RIGHT JOIN
Следующий цикл: Объединение данных (Часть 2)
[Содержание курса]

[Выполнять SQL запросы on-line]

Операции объединения JOIN

В этой части курса рассмотрим различные варианты объединения записей из двух таблиц. В первую очередь, это разновидности объединений JOIN, к которым относятся INNER JOIN, LEFT JOIN, RIGHT JOIN. Для наглядности буду пояснять результаты различных видов объединения на картинках. Вот примерно таким образом буду обозначать множество записей каждой из двух таблиц и результат операции объединения:

Исходные множества и результат объединения.
Условное обозначение исходных множеств и результата объединения.

Сразу хочу сказать, что не все СУБД поддерживают абсолютно все варианты операций объединения. MS Access, с которым работает обучающая программа, отказывается понимать такие объединения, как OUTTER JOIN, CROSS JOIN и MINUS, и поэтому они останутся без практической части. Это обстоятельство не так печально, поскольку такие "экзотические" операции объединения используют намного реже - это раз; аналогичных результатов можно добиться с использованием "стандартных" SQL инструкций объединения (как - будет показано дальше) - это два.

Шаг 10. Пересечение или INNER JOIN

Результат этого варианта объединения, в общем виде, показан на следующей картинке. В результат запроса попадают только те записи, которые строго удовлетворяют условиям объединения. О том, что бывает и по-другому, вы узнаете на следующих шагах.

Результат объединения INNER JOIN.
Результат объединения "и тут и там".

Критерий объединения во всех вариантах операции JOIN указывается после ключевого слова ON. Критерий объединения может быть сложным, т.е. состоять из нескольких условий, связанных операторами AND и OR, но в наших примерах это всегда будет простое условие. Итак, свяжем данные из таблицы D_STAFF с данными из таблицы D_STAFF_PROFILE с целью получить идентификаторы всех профилей пользователей, с которыми связаны сотрудники в базе данных.

SELECT D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF INNER JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IID 
ORDER BY D_STAFF.S_EXPERIENCE DESC

Объединение INNER JOIN.
Объединение INNER JOIN в SQL запросе.

Мы также можем накладывать ограничение на результат объединения с использованием ключевого слова WHERE.

SELECT D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF INNER JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IID
WHERE D_STAFF.S_NAME LIKE 'Мартынов%' ORDER BY D_STAFF.S_EXPERIENCE DESC

Объединение INNER JOIN и WHERE.
Объединение INNER JOIN с дополнительным критерием.

Кстати, объединение из двух таблиц с использованием операции INNER JOIN всегда можно заменить объединением с помощью оператора WHERE, куда будет перенесен критерий ON. Результат нашего запроса эквивалентен следующему запросу без конструкции INNER JOIN. Убедиться в этом можно, выполнив запрос в обучающей программе или выполнив SQL запрос on-line.

SELECT D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF, D_STAFF_PROFILE
WHERE D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IID AND D_STAFF.S_NAME LIKE 'Мартынов%' ORDER BY D_STAFF.S_EXPERIENCE DESC

Шаг 11. Пересечение с необязательным присутствием слева или LEFT JOIN

Достаточно часто отчет нужно сформировать так, чтобы в него, помимо записей, отвечающих критериям объединения, попали также те записи, у которых поля - критерии объединения просто не заполнены. Обычно у таких записей в отчете в соответствующих колонках проставлены пустые значения. Иллюстрация к операции LEFT JOIN на следующем рисунке:

Результат объединения LEFT JOIN.
Результат объединения "и тут и там или только тут".

Разница INNER JOIN и LEFT JOIN будет очевидна, если мы возьмем тот же запрос, но поменяем INNER на LEFT.

SELECT D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF LEFT JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IID 
ORDER BY D_STAFF.S_EXPERIENCE DESC

Видно, что в результате мы получили плюсом еще 6 записей: добавились записи из таблицы D_STAFF, которые вообще не имеют связей с таблицей D_STAFF_PROFILE. Тут уже аналогов только с использованием конструкций WHERE не придумать.

Объединение LEFT JOIN.
Объединение LEFT JOIN в SQL запросе.

Шаг 12. Пересечение с необязательным присутствием справа или RIGHT JOIN

Ну, тут все аналогично шагу 11 с той лишь разницей, что теперь пустые значения появились в первых двух колонках. Я приведу только картинку, запрос и результат запроса.

Результат объединения RIGHT JOIN.
Результат объединения "и тут и там или только там".

SELECT D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF RIGHT JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IID 
ORDER BY D_STAFF.S_EXPERIENCE DESC

Объединение RIGHT JOIN.
Объединение RIGHT JOIN в SQL запросе.

Следующий цикл: Объединение данных (Часть 2).



Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.