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

БАЗЫ ДАННЫХ

Jan 23, 2016

Download

Documents

caia

БАЗЫ ДАННЫХ. ЗАНЯТИЕ 7. Создание сложных запросов. Запросы на нескольких таблицах. Печенізька Ю.О. Учитель информатики. Харьковская общеобразовательная школа І-ІІІ ступеней № 60 Харьковского городского совета Харьковской области. Цель:. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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