Разделы презентаций


Лекция №2 Структурированный язык запросов

Содержание

Вопросы: Структура запросовОператоры выборки и фильтрацииАгрегатные функции, сортировка и группировка данныхПодзапросы

Слайды и текст этой презентации

Слайд 1Лекция №2 Структурированный язык запросов

Лекция №2 Структурированный язык запросов

Слайд 2Вопросы:
Структура запросов
Операторы выборки и фильтрации
Агрегатные функции, сортировка и группировка

данных
Подзапросы

Вопросы: Структура запросовОператоры выборки и фильтрацииАгрегатные функции, сортировка и группировка данныхПодзапросы

Слайд 3Структура запросов
SELECT T1.FAM,SUM(T2.WORK)
FROM T1, T2
WHERE T1.ID=T2.ID_T1
GROUP BY T1.FAM
HAVING SUM(T2.WORK)>1
ORDER BY

T1.FAM

Структура запросовSELECT T1.FAM,SUM(T2.WORK)FROM T1, T2WHERE T1.ID=T2.ID_T1GROUP BY T1.FAMHAVING SUM(T2.WORK)>1ORDER BY T1.FAM

Слайд 4БД Abonets.mdb

БД Abonets.mdb

Слайд 5Запросы, реализующие операцию проекции

SELECT * FROM TPOL;

SELECT ФИО, Адрес

FROM TAbonents;



Запросы, реализующие операцию проекцииSELECT * FROM TPOL; SELECT ФИО, Адрес FROM TAbonents;

Слайд 6Запросы, поясняющие исключение дубликатов
SELECT DISTINCT Дата_установки
FROM TAbonents;

SELECT ALL Дата_установки


FROM TAbonents;

Запросы, поясняющие исключение дубликатовSELECT DISTINCT Дата_установки FROM TAbonents;SELECT ALL Дата_установки FROM TAbonents;

Слайд 7Запросы, поясняющие выполнение операции фильтрации в одной таблице
SELECT * FROM

TAbonents
WHERE ПАСПОРТ = 679237

SELECT * FROM TAbonents
WHERE ПАСПОРТ=679237

OR
ФИО="Жуйченко Женя";


Запросы, поясняющие выполнение операции фильтрации в одной таблицеSELECT * FROM TAbonentsWHERE ПАСПОРТ = 679237 SELECT * FROM

Слайд 8Выборка данных из двух связанных таблиц
SELECT TAbonents.ФИО, TPol.ПОЛ
FROM TAbonents,

TPol
WHERE (TAbonents.Pol_ID = TPol.ID) AND (TPol.ПОЛ = “м”) ;

Выборка данных из двух связанных таблицSELECT TAbonents.ФИО, TPol.ПОЛ FROM TAbonents, TPol WHERE (TAbonents.Pol_ID = TPol.ID) AND (TPol.ПОЛ

Слайд 9Выборка данных из трех связанных таблиц
SELECT TAbonents.ФИО, Tpol.ПОЛ, NomTel.НОМЕР_ТЕЛЕФОНА
FROM Tpol,

TAbonents, NomTel
WHERE TNomTel.id = TAbonents.NomTel_ID and

Tpol.id = TAbonents.Pol_ID and
TAbonents.ДАТА_УСТАНОВКИ=#12/5/1997#;

Выборка данных из трех связанных таблицSELECT TAbonents.ФИО, Tpol.ПОЛ, NomTel.НОМЕР_ТЕЛЕФОНАFROM Tpol, TAbonents, NomTelWHERE TNomTel.id = TAbonents.NomTel_ID and

Слайд 10Операторы сравнения
> Больше чем
< Меньше чем
>= Больше чем

или равно

TAbonents WHERE (ДАТА_ВЫДАЧИ <> #6/1/1997#);
Операторы сравнения>  Больше чем<  Меньше чем>= Больше чем или равно

Слайд 11Оператор Not предиката Where
SELECT * FROM TAbonents
WHERE NOT (ФИО

= “Иванов Иван Иванович”);
или
SELECT * FROM TAbonents
WHERE Not (ФИО="Иванов Иван

Иванович" and id=1)
Оператор Not предиката WhereSELECT * FROM TAbonents WHERE NOT (ФИО = “Иванов Иван Иванович”);илиSELECT * FROM TAbonentsWHERE

Слайд 12Оператор IN предиката Where
SELECT * FROM TAbonents
WHERE ФИО In ("Иванов

Иван Иванович","Петров");

SELECT * FROM TAbonents
WHERE ПАСПОРТ In (675537,326757,656729);

Оператор IN предиката WhereSELECT * FROM TAbonentsWHERE ФИО In (

Слайд 13Оператор BETWEEN предиката Where
SELECT * FROM TAbonents
WHERE ПАСПОРТ Between 628513

and 679237;

SELECT * FROM TAbonents WHERE ФИО Between "А" and

"К";

Оператор BETWEEN предиката WhereSELECT * FROM TAbonentsWHERE ПАСПОРТ Between 628513 and 679237;SELECT * FROM TAbonents WHERE ФИО

Слайд 14Оператор LIKE предиката Where
SELECT * FROM TAbonents
WHERE АДРЕС Like

"ул.*";

SELECT * FROM TAbonents
WHERE АДРЕС Like "*ма*";

Оператор LIKE предиката WhereSELECT * FROM TAbonents WHERE АДРЕС Like

Слайд 15Оператор IS Null предиката Where
SELECT *FROM TAbonents WHERE АДРЕС iS

Null;
SELECT * FROM TAbonents
WHERE Not АДРЕС Is Null;

Оператор IS Null предиката WhereSELECT *FROM TAbonents WHERE АДРЕС iS Null;SELECT * FROM TAbonentsWHERE Not АДРЕС Is

Слайд 16АГРЕГАТНЫЕ ФУНКЦИИ
COUNT- подсчет количества (не NULL значений полей) записей;
SUM- подсчет

арифметической суммы всех значений поля;
AVG- усреднение всех выбранных значений данного

поля;
MAX- нахождение наибольшего из всех выбранных значений;
MIN- нахождение наименьшее из всех выбранных значений.
АГРЕГАТНЫЕ ФУНКЦИИCOUNT- подсчет количества (не NULL значений полей) записей;SUM- подсчет арифметической суммы всех значений поля;AVG- усреднение всех

Слайд 17Примеры использования агрегатов
SELECT SUM (Объем) as Сумма
FROM TWork;

SELECT Avg(TWork.Объем) AS

Среднее
FROM TWork;


SELECT Max(TWork.Объем) AS Max_V
FROM TWork WHERE TWork.День Like "п*";

SELECT

Count(id) AS Количество FROM TWork
WHERE Смена Like "*ов";
Примеры использования агрегатовSELECT SUM (Объем) as СуммаFROM TWork;	SELECT Avg(TWork.Объем) AS СреднееFROM TWork;SELECT Max(TWork.Объем) AS Max_VFROM TWork WHERE

Слайд 18Структура БД Work.mdb

Структура БД Work.mdb

Слайд 19Примеры использования агрегатов
Найдем наибольшую долю брака при работе токаря Иванова.
SELECT

MAX(Twork.Брак / (Twork.Объем + Twork.Брак ))
FROM Twork, TFIO
WHERE (TFIO.ID

= Twork.Смена) AND (TFIO.ФИО = “Иванов” )

Результат

Шаг №1

Примеры использования агрегатовНайдем наибольшую долю брака при работе токаря Иванова.SELECT MAX(Twork.Брак / (Twork.Объем + Twork.Брак )) FROM

Слайд 20Примеры использования агрегатов
Найдем максимальную стоимость деталей произведенных за

первые три дня недели токарем в фамилии которого присутствуют сочетание

«ро».

SELECT Max(TWork.Объем*TWork.Цена) AS Стоимость
FROM TFIO,TDay,TWork
WHERE TDay.ID = TWork.День and TFIO.id = TWork.Смена
And TDay.День In ("понедельник","вторник","среда“) and TFIO.ФИО) Like "*ро*”;

Результат

Шаг №1

Примеры использования агрегатов  Найдем максимальную стоимость деталей произведенных за первые три дня недели токарем в фамилии

Слайд 21Упорядочивание данных
Найдем отсортированную таблицу о величине брака

ФИО – ДЕНЬ – БРАК

SELECT TFIO.ФИО, TDay.День, TWork.Брак
FROM TFIO, TDay,

TWork
WHERE TDay.ID=TWork.День AND TFIO.id=TWork.Смена
ORDER BY TFIO.ФИО, TDay.День DESC , TWork.Брак;


Упорядочивание данных  Найдем отсортированную таблицу о величине брака  ФИО – ДЕНЬ – БРАКSELECT TFIO.ФИО, TDay.День,

Слайд 22Упорядочивание данных
Найдем отсортированную таблицу о величине брака
ДЕНЬ

- ФИО – Объем

SELECT TDay.День, TFIO.ФИО, TWork.ОБЪЕМ
FROM TFIO, TDay, TWork
WHERE

TDay.ID=TWork.День AND TFIO.id=TWork.Смена
ORDER BY TDay.День, TFIO.ФИО, TWork.ОБЪЕМ;


Упорядочивание данных  Найдем отсортированную таблицу о величине брака ДЕНЬ - ФИО – ОбъемSELECT TDay.День, TFIO.ФИО, TWork.ОБЪЕМFROM

Слайд 23Использование GROUP BY
Группа - это набор записей, у которых совпадает

набор ключевых полей. Все остальные поля группы должны быть приведены

к единому значению
Найдем максимальное количество деталей, произведенных каждым токарем за весь диапазон времени:
SELECT TFIO.ФИО, MAX (Twork.Объем)
FROM Twork, TFIO
WHERE (TFIO.ID = Twork.Смена)
GROUP BY TFIO.ФИО;
Использование GROUP BYГруппа - это набор записей, у которых совпадает набор ключевых полей. Все остальные поля группы

Слайд 24Порядок образования групп

Порядок образования групп

Слайд 25Использование GROUP BY
Подсчитаем, сколько в среднем бракованных деталей производится токарем,

в различные дни недели.
SELECT TFIO.ФИО,TDay.День,

AVG(Twork.Брак)
FROM Twork, TFIO, TDay
WHERE (TFIO.ID = Twork.Смена) AND
(TDay.ID = Twork.День)
GROUP BY TFIO.ФИО, TDay.День;
Использование GROUP BYПодсчитаем, сколько в среднем бракованных деталей производится токарем, в различные дни недели.SELECT TFIO.ФИО,TDay.День,

Слайд 26Порядок образования групп

Порядок образования групп

Слайд 27Использование предиката Having
Требуется вывести всех токарей, у которых

среднее число отбракованных деталей за рабочую смену превышает норму 1

SELECT TFIO.ФИО, AVG(Twork.Брак) FROM Twork, TFIO
WHERE TFIO.ID = Twork.Смена
GROUP BY TFIO.ФИО
HAVING AVG(Twork.Брак)>1;
Использование предиката Having  Требуется вывести всех токарей, у которых среднее число отбракованных деталей за рабочую смену

Слайд 28Фильтрация среднего брака (>1)

Фильтрация среднего брака (>1)

Слайд 29Использование предиката Having
Найти минимальное количество отбракованных деталей, получившееся в течение

рабочих смен токарей Иванова и Петрова:
SELECT TFIO.ФИО, MIN(Twork.Брак)
FROM Twork, TFIO
WHERE

(TFIO.ID = Twork.Смена)
GROUP BY TFIO.ФИО
HAVING TFIO.ФИО IN (“Иванов”, “Петров”);
Использование предиката HavingНайти минимальное количество отбракованных деталей, получившееся в течение рабочих смен токарей Иванова и Петрова:SELECT TFIO.ФИО,

Слайд 30Фильтрация фамилий и минимального брака

Фильтрация фамилий и минимального брака

Слайд 31Использование подзапросов
Получим общее количество деталей, выточенных токарем Ивановым в дни

недели, в которых имеется буква "д":
SELECT ‘ Всего сделано

=‘,
SUM(Объем) AS ‘Итого объем’
FROM Twork
WHERE (День IN (SELECT ID
FROM TDay
WHERE День LIKE ‘%д%’)) AND
(Смена = (SELECT ID
FROM TFIO
WHERE ФИО = ‘Иванов’));
Использование подзапросовПолучим общее количество деталей, выточенных токарем Ивановым в дни недели, в которых имеется буква

Слайд 32Использование подзапросов
Выберем все данные о работах, в которых объем выточенных

деталей больше среднего значения работ в пятницу:
SELECT Tfio.ФИО, Tday.День,

Twork.Объем
FROM Twork, TFIO, TDay
WHERE (TFIO.ID = Twork.Смена)
AND (TDay.ID = Twork.День)
AND Twork.Объем >
(select avg(Twork. Объем)
from Twork,Tday
where TDay.ID = Twork.День
and Tday.День Like ‘Пят%’);

Использование подзапросовВыберем все данные о работах, в которых объем выточенных деталей больше среднего значения работ в пятницу:

Слайд 33Схема выполнения запроса
Результат
Подзапрос
Внешний запрос

Схема выполнения запросаРезультатПодзапросВнешний запрос

Слайд 34Использование зависимых подзапросов
Выберем все данные, в которых каждый токарь перевыполнил

свою среднюю производительность:
SELECT Tfio.Фио, Tday.День, Tw.Объем
FROM Twork AS Tw, TFIO,

Tday
WHERE (TFIO.ID = Tw.Смена)
AND (TDay.ID = Tw.День)
AND Tw.Объем >
(SELECT Avg(Twx. Объем)
FROM Twork as Twx
WHERE Tw.Смена=Twx.Смена);
Использование зависимых подзапросовВыберем все данные, в которых каждый токарь перевыполнил свою среднюю производительность:SELECT Tfio.Фио, Tday.День, Tw.ОбъемFROM Twork

Слайд 35Схема выполнения запроса
Иванов Tw.Смена=1
Петров Tw.Смена=2
Сидоров Tw.Смена=3
Гришин Tw.Смена=4
Результат
Внешний запрос

Схема выполнения запросаИванов Tw.Смена=1Петров Tw.Смена=2Сидоров Tw.Смена=3Гришин Tw.Смена=4РезультатВнешний запрос

Слайд 36Специальные возможности запросов

Специальные возможности запросов

Слайд 37Использование Exists, Count
Определить города рейсы к которым не производились
Вариант №1
SELECT

Город FROM Т_Города AS ТГ
WHERE 0=
(select count(ID) from Т_Рейсы

Where (ТГ.ID=Т_Рейсы.ID_Город);

Вариант №2
SELECT Город FROM T_Города as ТГ
WHERE NOT EXISTS
(SELECT * FROM Т_Рейсы asТР
WHERE ТГ.ID = ТР.ID_Город);

24 раза

15 раз

Использование Exists, CountОпределить города рейсы к которым не производилисьВариант №1SELECT Город FROM Т_Города AS ТГ WHERE 0=(select

Слайд 38Использование All,ANY
Вариант №3
SELECT Город FROM Т_Города
WHERE not( id=ANY(
SELECT Distinct

ID_Город FROM Т_Рейсы));
Вариант №4
SELECT Город FROM Т_Города
WHERE

id<>ALL(
SELECT Distinct id_Город FROM Т_Рейсы));

6 раз

6 раз

Использование All,ANYВариант №3SELECT Город FROM Т_Города WHERE not( id=ANY(SELECT Distinct ID_Город FROM Т_Рейсы));Вариант №4SELECT Город FROM Т_Города

Слайд 39Использование Left Join
Вариант №5
SELECT Т_Города.Город, Т_Рейсы. Id_Город
FROM Т_Города LEFT JOIN

Т_Рейсы ON Т_Города.id = Т_Рейсы.id_Город
SELECT Т_Города.Город
FROM Т_Города LEFT JOIN Т_Рейсы

ON Т_Города.id = Т_Рейсы.id_Город
WHERE Т_Рейсы.id_Город IS NULL;

Использование Left JoinВариант №5SELECT Т_Города.Город, Т_Рейсы. Id_ГородFROM Т_Города LEFT JOIN Т_Рейсы ON Т_Города.id = Т_Рейсы.id_ГородSELECT Т_Города.ГородFROM Т_Города

Слайд 40Использование ALL для поиска максимумов или минимумов
Минимум
SELECT TFIO.ФИО, Sum(TWork.Брак) AS

Sumx
FROM TFIO, TWork
WHERE TFIO.id=TWork.Смена
GROUP BY TFIO.ФИО
HAVING Sum(TWork.Брак)

TWork Group by Смена);

Максимум
SELECT TFIO.ФИО, Sum(TWork.Брак) AS Sumx
FROM TFIO, TWork
WHERE TFIO.id=TWork.Смена
GROUP BY TFIO.ФИО
HAVING Sum(TWork.Брак)>=All (SELECT Sum(Брак) FROM TWork Group by Смена);

Использование ALL для поиска максимумов или минимумовМинимумSELECT TFIO.ФИО, Sum(TWork.Брак) AS SumxFROM TFIO, TWorkWHERE TFIO.id=TWork.СменаGROUP BY TFIO.ФИОHAVING Sum(TWork.Брак)=All

Слайд 41Схема выполнения запроса
Результат
Подзапрос
Внешний запрос
Минимум
Максимум

Схема выполнения запросаРезультатПодзапросВнешний запросМинимумМаксимум

Слайд 42Проектирование запросов с использованием конструктора

Проектирование запросов с использованием конструктора

Слайд 43Использование возможностей конструктора запросов
Определить кто из работников в возрасте от

25 до 60 лет, имеющих выговоры за прогул и опоздание,

получают наибольший средний уровень заработной платы ?

SELECT top 1 Т_Работник.ФИО, Avg(Т_Зарплата.Выдано) AS Ср_ЗП
FROM (Т_Работник INNER JOIN Т_Выговоры ON Т_Работник.ID = Т_Выговоры.ID_Работник) INNER JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
WHERE Т_Выговоры.Выговор In ("опоздание","прогул") AND DateDiff("yyyy",[Т_Работник]![ДатаРождения],Now()) Between 25 And 60
GROUP BY Т_Работник.ФИО
ORDER BY Avg(Т_Зарплата.Выдано) DESC;

Использование возможностей конструктора запросовОпределить кто из работников в возрасте от 25 до 60 лет, имеющих выговоры за

Слайд 44Использование возможностей конструктора шаг №1

Использование возможностей конструктора шаг №1

Слайд 45Использование возможностей конструктора шаг №2

Использование возможностей конструктора шаг №2

Слайд 46Использование возможностей конструктора шаг №3
SELECT top 1 Т_Работник.ФИО, Avg(Т_Зарплата.Выдано) AS

Ср_ЗП
FROM (Т_Работник INNER JOIN Т_Выговоры ON Т_Работник.ID = Т_Выговоры.ID_Работник) INNER

JOIN Т_Зарплата ON Т_Работник.ID = Т_Зарплата.ID_Работник
WHERE Т_Выговоры.Выговор In ("опоздание","прогул") AND DateDiff("yyyy",Т_Работник.ДатаРождения,Now()) Between 25 And 60
GROUP BY Т_Работник.ФИО
ORDER BY Avg(Т_Зарплата.Выдано) DESC;
Использование возможностей конструктора шаг №3SELECT top 1 Т_Работник.ФИО, Avg(Т_Зарплата.Выдано) AS Ср_ЗПFROM (Т_Работник INNER JOIN Т_Выговоры ON Т_Работник.ID

Слайд 47Поиск дубликатов, с помощью зависимых запросов
Определить кто из работников имеет

одинаковые паспорта?
SELECT Т_Р.ФИО, Т_Р.СерияПасорта, Т_Р.НомерПаспорта
FROM Т_Работник AS Т_Р
WHERE Т_Р.СерияПасорта

In (SELECT T_P2.СерияПасорта
FROM Т_Работник As T_P2
GROUP BY T_P2 .СерияПасорта, T_P2 .НомерПаспорта
HAVING Count(*)>1 And
T_P2 .НомерПаспорта = Т_Р.НомерПаспорта)
ORDER BY Т_Р.СерияПасорта, Т_Р.НомерПаспорта;

Поиск дубликатов, с помощью зависимых запросовОпределить кто из работников имеет одинаковые паспорта? SELECT Т_Р.ФИО, Т_Р.СерияПасорта, Т_Р.НомерПаспортаFROM Т_Работник

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика