БАЗЫ ДАННЫХ

13
1 БАЗЫ ДАННЫХ Создание сложных запросов. Запросы на нескольких таблицах. ЗАНЯТИЕ 7 Печенізька Ю.О. Учитель информатики Харьковская общеобразовательная школа І-ІІІ ступеней № 60 Харьковского городского совета Харьковской области

Upload: caia

Post on 23-Jan-2016

58 views

Category:

Documents


0 download

DESCRIPTION

БАЗЫ ДАННЫХ. ЗАНЯТИЕ 7. Создание сложных запросов. Запросы на нескольких таблицах. Печенізька Ю.О. Учитель информатики. Харьковская общеобразовательная школа І-ІІІ ступеней № 60 Харьковского городского совета Харьковской области. Цель:. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: БАЗЫ ДАННЫХ

1

БАЗЫ ДАННЫХ

Создание сложных запросов.

Запросы на нескольких таблицах.

ЗАНЯТИЕ 7

Печенізька Ю.О.

Учитель информатики

Харьковская общеобразовательная школа І-ІІІ ступеней № 60Харьковского городского совета

Харьковской области

Page 2: БАЗЫ ДАННЫХ

2

Цель:

Содержание:

Изучить возможности обращаться с запросами к нескольким таблицам; возможности использования подзапросов и операторов EXISTS, ANY, SOME и UNION для построения сложных запросов.

Соединение таблиц. Эквивалентные и другие виды соединений.

Соединения таблицы самой с собой.

Использование подзапросов.

Операторы EXISTS, ALL, ANY, SOME и UNION.

Интерактивный и вложенный SQL

Page 3: БАЗЫ ДАННЫХ

3

Задание: напишите следующие запросыЗадание: напишите следующие запросы

SELECT City, COUNT (SNum)

FROM C WHERE Rating>150 GROUP BY City;

Запрос № 32: по каждому городу посчитать количество клиентов с рейтингом выше 150.

SELECT Comm, COUNT (SNum) FROM S

GROUP BY Comm HAVING COUNT (SNum)>3;

Запрос № 33: по каждому размеру комиссионных посчитать количество служащих и вывести, если это количество больше 3.

Page 4: БАЗЫ ДАННЫХ

4

Запрос № 34: вывести имена служащих и клиентов, которых они обслуживают.

Соединение таблиц /запросы из нескольких таблиц/Соединение таблиц /запросы из нескольких таблиц/

Результат:

SELECT SName, CName FROM S, C WHERE S.SNum=C.SNum;

SELECT имена полей FROM имена таблиц WHERE условие соединения таблиц;

Page 5: БАЗЫ ДАННЫХ

5

Запрос № 36: вывести имена служащих и клиентов, проживающих в одном городе.

Запрос № 38: вывести имена служащих, клиентов и суммы операций, которые были осуществлены.

Результат:

SELECT S.City, S.Snum, S.SName, C.CNum, C.CName FROM S, C WHERE S.City=C.City;

SELECT S.SNum, S.SName, C.CNum, C.CName, Summa FROM S,C,O WHERE S.SNum=C.SNum AND C.CNum=O.CNum;

Запрос № 37: для каждого служащего посчитать количество клиентов, которых он обслуживает.

SELECT S.SNum, S.SName, COUNT (*) FROM S, C WHERE S.SNum=C.SNum GROUP BY S.SNum, S.SName;

Примеры построения сложных запросовПримеры построения сложных запросов

Результат:

Page 6: БАЗЫ ДАННЫХ

6

Результат:

Соединение таблицы самой с собойСоединение таблицы самой с собойЗапрос № 35: вывести пары имен служащих, имеющих одинаковые комиссионные.

a) SELECT S1.SNum, S1.SName, S2.SNum, S2.SName FROM S S1, S S2 WHERE S1.Comm=S2.Comm;

SS2S1

b) SELECT S1.SNum, S1.SName, S2.SNum, S2.SName FROM S S1, S S2 WHERE S1.Comm=S2.Comm AND S1.SNum<S2.SNum;

Page 7: БАЗЫ ДАННЫХ

7

Результат:

Использование подзапросовИспользование подзапросов

Запрос № 39: вывести информацию о служащих, комиссионные которых выше среднего.

SELECT * FROM S WHERE

Comm>(Select AVG (Comm) From S);

SELECT … (SELECT … );

Внешний запрос Подзапрос (внутренний запрос)

SELECT … WHERE <поле><оператор> (SELECT … );

в предложении WHERE:

Comm>0.12222222

Page 8: БАЗЫ ДАННЫХ

8

Запрос № 40: вывести информацию о клиентах, рейтинг которых выше максимального рейтинга по городу Харькову.

Запрос № 42: вывести города, максимальные комиссионные в которых выше средних комиссионных в городе Москва.

SELECT * FROM C WHERE Rating> (SELECT MAX(Rating) FROM C WHERE City=‘Харьков’);

SELECT City, MAX(Comm) FROM S GROUP BY City HAVING MAX(Comm)>

(SELECT AVG(Comm) FROM S WHERE City=‘Москва’);

Запрос № 41: вывести имена клиентов, которые живут в тех городах, которые обслуживает служащий номер 101.

SELECT C.CNum, C.CName FROM C WHERE City IN (SELECT City From S WHERE SNum=101);

в предложении HAVING:

Примеры запросов с подзапросамиПримеры запросов с подзапросами

Page 9: БАЗЫ ДАННЫХ

9

Запрос № 44: вывести информацию о клиентах, которые имеют рейтинг выше, чем рейтинг любого клиента из города Киева.

EXISTS (использует результат подзапроса, чтобы указать, нужно ли выполнять главный запрос);

SELECT * FROM C WHERE Rating > ALL (SELECT Rating FROM C WHERE City=‘Киев’);

Запрос № 43: вывести информацию о служащих, если хотя бы один из них проживает в городе Харькове.

SELECT * FROM S WHERE EXISTS (SELECT * From S WHERE City=‘Харьков’);

ALL (предикат является верным, если каждое значение выбранное подзапросом удовлетворяет условию в предикате внешнего запроса ):

Использование операторов Использование операторов EXISTS EXISTS и и ALLALL

Page 10: БАЗЫ ДАННЫХ

10

Запрос № 46: найти служащих, проживающих в городах, где есть клиенты.

ANY / SOME (похожий на EXISTS, но используются с реляционными операторами);

SELECT Sname, City FROM S WHERE City=ANY (SELECT DISTINCT City FROM C);

Запрос № 45: вывести информацию о клиентах, которые имеют рейтинг выше рейтинга хотя бы одного клиента из города Киева.

SELECT * FROM C WHERE Rating > ANY (SELECT Rating FROM C WHERE City=‘Киев’);

SELECT * FROM C WHERE Rating > SOME (SELECT Rating FROM C WHERE City=‘Киев’);

Использование операторов Использование операторов ANY/SOMEANY/SOME

Page 11: БАЗЫ ДАННЫХ

11

Правила объединения запросов:

-Объединяемые запросы должны возвращать одинаковое количество полей;

-Объединяемые запросы должны возвращать однотипные соответствующие поля.

Оператор UNION – позволяет объединить результаты нескольких запросов.

SELECT …

UNION

SELECT ….

UNION

SELECT …;

Оператор Оператор UNIONUNION

Page 12: БАЗЫ ДАННЫХ

12

Запрос № 48: получить статистику о сдаче эксамена по дисциплине в форме:

UNIONSELECT ‘Оценку 4 имеет’, COUNT(*), ‘человека’ FROM B WHERE Mark = ‘хорошо’ UNION

SELECT ‘Оценку 3 имеет’, COUNT(*), ‘человека’ FROM B

WHERE Mark = ‘удовлетворительно’;

Пример использования оператора Пример использования оператора UNIONUNION

FIO Mark

Иванов И.И. Отлично

Петров П.П. Хорошо

Петрова С.С. Отлично

Сидоров С.С. Отлично

Федорова Ф.Ф. Удовлетворительно

Яшин Я.Я. Хорошо

В (Ведомость по «ОБД»)

Оценку 5 имеет 3 человека

Оценку 4 имеет 2 человека

Оценку 3 имеет 1 человека

SELECT ‘Оценку 5 имеет’, COUNT(*), ‘человека’ FROM B WHERE Mark = ‘отлично’

Page 13: БАЗЫ ДАННЫХ

Различают:

-интерактивный SQL (используется для функционирования непосредственно в БД);

-вложенный SQL (помещается внутри программ, написанных на другом языке /в Delphi (Pascal), Builder(C++), Oracle(PL/SQL)/.

13

Интерактивный и вложенный Интерактивный и вложенный SQLSQL