П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие


Download 1.32 Mb.
Pdf ko'rish
bet39/94
Sana15.06.2023
Hajmi1.32 Mb.
#1487605
1   ...   35   36   37   38   39   40   41   42   ...   94
Bog'liq
Базы данных

3.4.8. Многотабличные запросы 
До сих пор мы рассматривали запросы только с одной исход-
ной таблицей. Однако основную роль при работе с большими база-
ми данных играют запросы с несколькими исходными таблицами. 
Для иллюстрации многотабличных запросов дополним нашу 
демонстрационную базу данных еще одной таблицей «Сессия», 
содержащей сведения о результатах экзаменов. Ее структура 
имеет следующий вид. 
Sess 
nsb disc 
prep 
ball 
Названия столбцов означают следующее: 
nsb – номер студенческого билета; 
disc – дисциплина; 
prep – фамилия преподавателя; 
ball – оценка. 
Синтаксис многотабличного запроса почти не отличается от 
однотабличного: во фразе 
FROM
указывается не одна, а несколько 
таблиц-источников. Однако, поскольку в разных таблицах могут 
быть столбцы с одинаковыми именами (в нашем случае – 
nsb
), 
имена столбцов в запросах следует писать с именем таблицы в 
виде префикса: 
stud.nsb, sess.nsb
. В частности, для обозначения всех 
столбцов таблицы можно использовать звездочку: 
stud.*
. Если же 
имя столбца уникально в используемых таблицах, то префикс 
можно не указывать. 
На первый взгляд простейший запрос с двумя таблицами мог 
бы иметь вид 
SELECT * FROM stud, sess . 


62 
Такой запрос, тем не менее, практически бесполезен, по-
скольку выдает произведение таблиц, части которого совершенно 
не связаны друг с другом. В общем случае такая связь может 
быть установлена включением в запрос фразы 
WHERE <условие>
, где 
условие – логическое выражение, содержащее значения из раз-
ных таблиц. Чаще всего такое выражение содержит условие ра-
венства значений совпадающих по смыслу (но не обязательно по 
имени) столбцов. В качестве примера приведем запрос 
SELECT stud.*, disc, prep, ball FROM stud, sess 
WHERE stud.nsb = sess.nsb . 
Этот запрос выводит полные результаты сессии, причем для 
каждой дисциплины, сдававшейся студентом, полностью приво-
дится персональная информация об этом студенте. 
Наряду с условием связи таблиц во фразе WHERE могут 
присутствовать и другие условия отбора строк результирующей 
таблицы. Например, запрос 
SELECT grp, fam, disc, ball FROM stud, sess 
WHERE (stud.nsb = sess.nsb) AND (grp='МО-33') 
выводит информацию о результатах сдачи сессии студентами 
группы МО-33. 
С точки зрения «правильного» проектирования запросов не 
вполне корректно смешивать в одном запросе условия связи 
таблиц и условия, описывающие логику запроса. В дальнейшем 
(при обсуждении соединений – join) мы увидим, как эта проблема 
решена в стандарте SQL92. 
Мы рассмотрели простейший случай двух таблиц с одним 
столбцом связи. Понятно, что увеличение количества таблиц и 
столбцов связи не вносит принципиальных изменений в методику 
построения многотабличных запросов. 
В некоторых случаях при построении многотабличных запро-
сов оказывается полезным использование псевдонимов (алиасов) 
таблиц. Псевдоним представляет собой идентификатор, который 
через пробел записывается после имени таблицы во фразе 
FROM

после чего он используется в качестве префикса имен столбцов. 
Приведем пример, когда использование псевдонимов позволяет 
решить задачу, которая без их использования решалась бы гораз-
до сложнее. 
Пусть у нас задана таблица сотрудников предприятия: 


63 
Pers 
tabn fio tabnr
Названия столбцов означают следующее: 
tabn – табельный номер сотрудника; 
fio – фамилия и инициалы сотрудника; 
tabnr – табельный номер руководителя сотрудника. 
Требуется вывести таблицу из двух столбцов, которые содер-
жат соответственно фамилию и инициалы сотрудников и фамилию 
и инициалы руководителей. Для этого можно сформировать запрос 
SELECT a.fio AS fio, b.fio AS fior FROM pers a, pers b 
WHERE a.tabnr = b.tabn . 
Его особенностью является то, что таблица 
pers
перекрестно 
соединяется со своей копией, что и решает поставленную задачу. 

Download 1.32 Mb.

Do'stlaringiz bilan baham:
1   ...   35   36   37   38   39   40   41   42   ...   94




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling