2. Соединение таблиц
До сих пор мы рассматривали запросы, которые базировались на одной таблице. Теперь перейдём к запросам, которые будут базироваться на множестве таблиц. При использовании в запросе множества таблиц, их имена перечисляются в предложении FROM через запятую. В общем случае, запрос
SELECT список_полей
FROM список_таблиц
строит декартово произведение таблиц.
Установление связей со строками таблиц может быть выполнено с помощью предложения WHERE.
Пример 2:
Построить список дипломников с указанием руководителей работы:
SELECT sname, pname
FROM Преподаватель, студент
WHERE pnum = spdp;
Результат:
sname |
pname |
C-1 |
П-1 |
C-2 |
П-1 |
C-3 |
П-2 |
Т.о. представленный пример реализует операцию «слияние» в реляционной алгебре средствами SQL. В предложении WHERE могут быть одновременно заданы и другие операции отбора записей из исходных таблиц. Например, дополнительное условие для кафедры K-1 – упорядоченные по убыванию фамилии студентов:
SELECT sname, pname
FROM Преподаватель, студент
WHERE pnum = spdp AND
pcaf = «К-1»
Результат:
sname |
pname |
C-2 |
П-1 |
C-1 |
П-1 |
В соединении может участвовать несколько таблиц. Например, пусть требуется отобразить результаты экзамена в форме «Преподаватель-студент-дата-оценка»:
SELECT pname, sname, odate, ocen
FROM Преподаватель, студент, оценка
WHERE pnum = opnum AND
sname = osname;
Результат:
pname |
sname |
odate |
ocen |
П-1 |
C-1 |
10/01/01 |
5 |
П-1 |
C-2 |
11/01/01 |
4 |
П-1 |
C-3 |
11/01/01 |
3 |
П-3 |
C-1 |
15/01/01 |
5 |
П-3 |
C-3 |
16/01/01 |
2 |
П-3 |
C-3 |
17/01/01 |
4 |
Как правило, в предложение WHERE присоединения таблиц используется операция равенства. Такие соединения, основанные на равенстве, называются эквисоединениями. Использование равенства не всегда является обязательным. Также можно использовать и другие операции сравнения, хотя они используются очень редко.
В используемых примерах имена полей были различны. При использовании имён полей, которые совпадают, следует указывать имя таблицы и поле, с целью устранения неоднозначности. Например, для списка дипломников:
В предложении FROM могут быть определены алиасы (дополнительные имена) в форме:
FROM имя_таблицы AS [алиас], …
Для предыдущего примера, использование алиасов будет выглядеть следующим образом:
SELECT С. sname, П.pname
FROM Преподаватель П, студент С
WHEREpnum = spdp
Алиасы могут применяться для сокращения записи сложного запроса.
Другим примером неоднозначности в опознании полей является соединение таблицы со своей копией (самообъединение). Это может понадобиться для получения всевозможных пар значений одного атрибута. Это требует обязательного объединения алиасов.
Пример:
Построить множество пар фамилий студентов, имеющих одного руководителя дипломной работы.
SELECT С1. sname, С2. sname,
FROM студент С1, студент С2
WHERE С1. spdp = С2.spdp
Результат:
sname |
sname |
C-1 |
C-1 |
C-1 |
C-2 |
C-2 |
C-2 |
C-2 |
C-1 |
C-4 |
C-4 |
Соединение таблиц может быть определено без использования предложения WHERE, путём указания операции JOIN в предложении FROM. Формат этой команды имеет следующий вид:
FROM таблица1 (INNER/ LEFT/ RIGHT) JOIN таблица2 ON условие_объединения,
где таблица1 и таблица2 – имена объединяемых таблиц, условие объединения обычно имеет вид:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.