
- •Inner join - внутреннее соединение, используется по умолчанию.
- •Комбинирование результирующих таблиц ( операции union, except, intersect).
- •Вариант 3
- •Вариант 4
- •Вариант 5.
- •Вариант 6.
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •Вариант 13
- •Вариант 16.
- •Контрольные вопросы.
Лабораторная работа №5
Многотабличные запросы.
Цель работы:
приобретение практических навыков по созданию многотабличных запросов на языке SQL с использованием операций соединения таблиц, а также UNION, EXCEPT, INTERSECT.
Краткие теоретические сведения.
Соединение таблиц
Соединение одинаковых таблиц
Для соединения таблиц с одноименными столбцами или таблицы с самой собой используются алиасы, задаваемые во фразе FROM через пробел после имени таблицы.Например:
select t1.f1, t1.f2, t2.f1, t2.f2
from tbl1 t1, tbl1 t2
where t1.f1= t2.f2;
Перекрестное соединение(CROSS JOIN)
Если фраза FROM определяет более одной таблицы или подзапроса, то все эти таблицы соединяются. По умолчанию объединенная таблица представляет собой перекрестное соединение (CROSS JOIN), называемое также декартовым произведением (Cartesian product).Следующие два оператора эквивалентны:
SELECT tbl1.f1, tbl2.f1 FROM tbl1, tbl2;
SELECT tbl1.f1, tbl2.f1
FROM tbl1 CROSS JOIN tbl2;
перекрестное соединение создает результирующий набор со всеми возможными комбинациями строк.
Соединения позволяют выполнять временное объединение данных, не предусмотренное схемой (родительскими и внешними ключами).
Соединяемые таблицы перечисляются через запятую во фразе FROM оператора SELECT .
Во фразе FROM можно использовать следующие операторы соединений:
CROSS JOIN - перекрестное соединение.
NATURAL JOIN- естественное соединение. Стандарт SQL определяет это соединение как результат объединения таблиц по всем одноименным столбцам. Естественное соединение может быть следующих типов:
Inner join - внутреннее соединение, используется по умолчанию.
LEFT JOIN [OUTER] - левое внешнее соединение.
RIGHT JOIN [OUTER] - правое внешнее соединение.
FULL JOIN [OUTER] - полное внешнее соединение.
UNION JOIN - соединение объединения.
Внутреннее соединение (INNER JOIN)
При внутреннем естественном соединении группируются только те строки, значения которых по соединяемым (одноименным) столбцам совпадают. Результат внутреннего соединения двух таблиц показан на рис. 3.4.
Внешнее левое соединение LEFT JOIN [OUTER]
При внешнем левом соединении в результирующий набор будут выбраны все строки из левой таблицы (указываемой первой). При совпадении значений по соединяемым (одноименным) столбцам значения второй таблицы заносятся в результирующий набор в соответствующие строки. При отсутствии совпадений в качестве значений второй таблицы проставляется значение NULL.
Внешнее правое соединение RIGHT JOIN [OUTER]
При внешнем правом соединении в результирующий набор будут выбраны все строки из правой таблицы (указываемой второй). При совпадении значений по соединяемым (одноименным) столбцам значения первой таблицы заносятся в результирующий набор в соответствующие строки При отсутствии совпадений в качестве значений первой таблицы проставляется значение NULL.
Полное внешнее соединение FULL JOIN [OUTER]
При полном внешнем соединении в результирующий набор будут выбраны все строки - как из правой, так и из левой таблицы. При совпадении значений по соединяемым (одноименным) столбцам строка содержит значения как из левой, так и из правой таблицы В противном случае, вместо отсутствующих значений в столбцы таблицы (левой или правой) заносится значение NULL.
Соединение по указываемым столбцам
Фраза USING позволяет выполнить естественное соединение по указываемым столбцам, что, в свою очередь, позволяет соединять таблицы, имеющие несколько одноименных столбцов, нужным образом (по одному или двум столбцам). Список столбцов, по которым выполняется соединение, указывается после фразы USING.
Например:
select t1.f1, t1.f2, t2.f1
from tbl1 t1 join tbl2 t2 using f2;
Соединение по предикату
Естественное соединение по указываемому предикату выполняется с помощью фразы ON. В результирующий набор выбираются строки, удовлетворяющие заданному условию. Этот способ соединения аналогичен соединению по предикату, указываемому фразой WHERE.
Например:
select t1.f1, t1.f2, t2.f1, t2.f2
from tbl1 t1 join tbl2 t2
on t1.f1= t2.f2;
Комбинирование результирующих таблиц ( операции union, except, intersect).
Объединением двух таблиц R и S является таблица, содержащая все строки, которые имеются в первой таблице R, во второй таблице S или в обеих таблицах сразу.
SELECT R.a1, R.a2
FROM R
UNION
SELECT S.b2, S.b1
FROM S
Пересечением двух таблиц R и S является таблица, содержащая все строки, присутствующие в обеих исходных таблицах одновременно.
(SELECT R.a1, R.a2
FROM R)
INTERSECT
(SELECT S.b2, S.b1
FROM S)
Или
SELECT R.a1, R.a2
FROM R,S
WHERE R.a1=S.b1 AND R.a2=S.b2
или
SELECT R.a1, R.a2
FROM R
WHERE R.a1 IN
(SELECT S.b1 FROM S
WHERE S.b1=R.a1) AND R.a2 IN
(SELECT S.b2
FROM S
WHERE S.b2=R.a2)
Разностью двух таблиц R и S является таблица, содержащая все строки, которые присутствуют в таблице R, но отсутствуют в таблице S.
SELECT R.a1, R.a2
FROM R
WHERE NOT EXISTS
(SELECT S.b1,S.b2
FROM S
WHERE S.b1=R.a2 AND S.b2=R.a1)
Или
Разностью двух таблиц R и S является таблица, содержащая все строки, которые присутствуют в таблице R, но отсутствуют в таблице S.
(SELECT R.a1, R.a2
FROM R)
EXCEPT
(SELECT S.b1,S.b2
FROM S)
Задание по работе:
Вариант1.
Используя операции соединения таблиц построить следующие запросы:
1. Составить полные сведения о читателях и книгах, которые за ними числятся. Вывести полную информацию о читателях и книгах.
2. Вывести полную информацию о книгах, которые числятся за данным читателем
3. Вывести полную информацию о читателях, которые взяли книги, изданные в прошедшем году.
4. Составить список должников на сегодняшний день.
Используя операции UNION, EXCEPT, INTERSECT построить следующие запросы.
1. Отыскать какие книги имеют несколько изданий.
2. Определить есть ли среди читателей и авторов однофамильцы
3. Отыскать книги, которые в текущем году еще не брали читатели.
Вариант 2.
Используя операции соединения таблиц построить следующие запросы:
1. Составить полные сведения о клиентах и карточках, которые за ними числятся. Вывести полную информацию о клиентах и карточках.
2. Вывести полную информацию о карточках, которые числятся за данным клиентом
3. Вывести полную информацию о клиентах, которые имеют карточки, срок действия которых заканчивается в следующем году.
4. Составить список клиентов, срок действия карточек которых истек.
Используя операции UNION, EXCEPT, INTERSECT построить следующие запросы.
1. Составить список клиентов, с карточками которых не производились никакие операции.
2. Получить информацию о типах карточек и суммах на них, а также информацию о карточках и суммах операций
3. Определить номера карточек, с которыми проводились операции снятия суммы равной лимиту карточки.