П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие
Download 1.32 Mb. Pdf ko'rish
|
Базы данных
3.4.9. Внешние соединения
Мы уже отмечали, что не очень логично смешивать в одной фразе WHERE условия связи таблиц и условия, описывающие логику обработки данных. Кроме того, описанный в предыдущем пункте способ связи таблиц обладает тем недостатком, что в результирующую таблицу попадают данные только из тех строк исходных таблиц, для которых есть соответствующие строки в другой таблице. Так, если студент в приводившемся примере по- ка еще не сдавал ни одного экзамена, то в итоговой таблице ин- формация о нем вообще будет отсутствовать, хотя логичнее было бы информацию о студенте разместить в этой таблице, заполнив информацию об экзаменах пустыми значениями. Обе этих проблемы решаются способом, предложенным в стандарте SQL92 и называемым соединением таблиц (JOIN). Смысл его заключается в создании на основе двух таблиц нового объекта, называемого соединением двух таблиц и который может размещаться на месте исходной таблицы во фразе FROM . Син- таксис соединения выглядит следующим образом: <левая таблица> <тип соединения> JOIN <правая таблица> ON <условие соединения> . В качестве типа соединения могут быть использованы LEFT OUTER (левое внешнее), RIGHT OUTER (правое внешнее), FULL OUTER (полное внешнее), INNER (внутреннее). При этом слова INNER и OUTER могут быть опущены. Рассмотренный ранее ва- 64 риант соединения, при котором из исходных выбираются только соответствующие друг другу строки, называется внутренним сое- динением, а приведенный пример может быть записан следую- щим образом: SELECT grp, fam, disc, ball FROM stud INNER JOIN sess ON stud.nsb = sess.nsb WHERE grp='МО-33' . При этом в результирующей таблице будут присутствовать только те студенты, которые сдали хотя бы один экзамен. Если же мы хотим включить в итоговую таблицу всех студентов, запрос должен быть записан как SELECT grp, fam, disc, ball FROM stud LEFT OUTER JOIN sess ON stud.nsb = sess.nsb WHERE grp='МО-33' . В итоговой таблице будут находиться все значения grp и fam левой исходной таблицы, причем при отсутствии соответст- вующих строк правой таблицы значения disc и ball будут пустыми. Для иллюстрации возможных вариантов соединений рас- смотрим простой пример. Пусть имеются таблицы t1 t2 a1 a2 a1 a3 1 a 2 f 2 s 3 g 4 d 4 h Тогда запрос SELECT t1.a1, t2.a1, a2, a3 FROM t1 <тип соединения> JOIN t2 ON t1.a1 = t2.a1, где тип соединения – INNER (внутреннее), LEFT OUTER (левое внеш- нее), RIGHT OUTER (правое внешнее) или FULL OUTER (полное внешнее), выдаст следующие результаты: Внутреннее Левое Правое Полное t1.a1 t2.a1 a2 a3 t1.a1 t2.a1 a2 a3 t1.a1 t2.a1 a2 a3 t1.a1 t2.a1 a2 a3 2 2 s f 1 null a null 2 2 s f 1 null a null 4 4 d h 2 2 s f null 3 null g 2 2 s f 4 4 d h 4 4 d h 4 4 d h null 3 null g Download 1.32 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling