33.35M
Категория: Базы данныхБазы данных

Виды Зависимостей между атрибутами

1.

2.

3.

Виды Зависимостей между
атрибутами
• Частично-фукнциональная
• Полная функциональная –
• Транзитивная -

4.

5.

Подумайте
Какими
характеристиками
обладает студент?

6.

Дата
рождения
Номер
телефона
Адрес
Пол
Отделение
Отчество
Курс
Имя
Группа
Фамилия
Стипендия

7.

Фамилия
Имя
Отчество
Пол
Дата
рождения
Телефон
Адрес
Отделение
Курс
Группа
Стипендия
Кустова
Ксения
Анатольевна
женский
04.12.2000
13-45-13
г. Ярославль, ул. Ньютона, д.20, кв.12.
Техническое
3
18КС
есть

8.

Группа: 18КС
Курс: 3
Отделение: техническое

9.

Нормализация
-процесс преобразования данных путем ликвидации
избыточности данных и иных противоречий с целью
приведения таблиц к виду, позволяющему осуществить
непротиворечивое и корректное редактирование данных
- это процесс приведения таблиц БД к ряду нормальных
форм с целью избежания избыточности, аномалий
вставки, удаления и редактирования данных.
• Цель- получение оптимальной структуры данных

10.

5НФ
4НФ
НФБК
3НФ
2НФ
1НФ
Каждая форма –
набор требований

11.

• Декомпозиция (разбиение) таблицы –
процесс деления таблицы с целью
устранения избыточности данных
• Избыточность – повторяющиеся данные,
содержащиеся в БД

12.

Нормальные формы
- 1НФ
-2НФ
-3НФ
- БКНФ (Бойса-Кодда НФ) – усиленная 3НФ
-4НФ
-5НФ
- Доменно-ключевая НФ

13.

1НФ
Определение
• Переменная отношения находится в первой
нормальной форме (1НФ) тогда и только
тогда, когда в любом допустимом значении
отношения каждый его кортеж содержит
только одно значение для каждого из
атрибутов

14.

- В каждом поле таблицы должно быть только
одно значение (атомарность)
- Не должно быть повторяющихся строк

15.

1НФ до нормализации

16.

1НФ после нормализации

17.

2НФ
Определение
• Переменная отношения находится во
второй нормальной форме (2НФ) тогда и
только тогда, когда она находится в 1НФ и
каждый
ее
неключевой
атрибут
неприводимо
(функционально
полно)
зависит от ее потенциального ключа

18.

- Таблица в 1НФ
- Есть первичный ключ
- Все атрибуты зависят от первичного
ключа целиком, а не от какой-то его части

19.

2НФ до нормализации

20.

21.

2НФ добавим первичный ключ

22.

2НФ декомпозиция

23.

3НФ
Определение
• Переменная отношения находится в
третьей нормальной форме (3НФ) тогда и
только тогда, когда она находится во 2НФ и
отсутствуют транзитивные функциональные
зависимости неключевых атрибутов от
ключевых

24.

- Таблица во 2НФ
- Все атрибуты зависят только от
первичного ключа, но не от других
атрибутов

25.

3НФ до нормализации

26.

3НФ до нормализации

27.

3НФ после нормализации

28.

Проверка и закрепление знаний
• Тестирование в Kahoot
- введите PIN-код, отображенный на экране
- введите Фамилию и Имя в поле NAME
Критерии оценивания
- 1 ошибка – «отлично»
- 2 ошибки – «хорошо»
- 3 ошибки – «удовлетворительно»
- -более трех ошибок – «неудовлетворительно»

29.

Вопросы
Что нового вы сегодня узнали?

30.

Вопросы
Зачем по вашему мнению необходима
нормализация?

31.

Вопросы
Какие нормальные формы вы теперь
знаете?

32.

Вопросы
Где в дальнейшем возможно применение
знаний по теме «Нормализация баз данных»?

33.

34.

35.

Все)
Идем делать практические работы

36.

ОПБД.
НФ БК, 4 НФ, 5 НФ

37.

Бойса-Кодда Нормальная форма
Определение
• Переменная отношения находится в
нормальной форме Бойса — Кодда (иначе
— в усиленной третьей нормальной форме)
тогда и только тогда, когда каждая её
нетривиальная и неприводимая слева
функциональная зависимость имеет в
качестве своего детерминанта некоторый
потенциальный ключ.

38.

• Таблица в 3 НФ
• Ключевые атрибуты не должны
зависеть он НЕключевых

39.

Пример БКНФ
Дано:
Каждый сотрудник может курировать только ту работу
для которой он квалифицирован
– Максим - курирует маркетинг,
– Рома - программирование,
– Илья - дизайн
–…
Есть множество проектов над которыми они работают
Для каждого из проектов могут быть выполнены и
Разработка и дизайн и маркетинг
Куратор по каждому из направлений у проекта может
быть только один (дабы не было путанницы)

40.

БКНФ до нормализации
project_id
Вид работы
Ответственный
1
Разработка
Рома
2
Маркетинг
Максим
2
Дизайн
Илья
1
Дизайн
Илья
3
Маркетинг
Диана
3
Разработка
Миша

41.

Пример БКНФ
• Первичный ключ = составной (Id_Проектa +
Задача)

42.

Пример БКНФ
• Первичный ключ = составной (Id_Проектa +
Задача)
• Но
проявляется
зависимость
части
первичного
ключа
(задачи)
от
ответственного

43.

Пример БКНФ
• Первичный ключ = составной (Id_Проектa +
Задача)
• Но
проявляется
зависимость
части
первичного
ключа
(задачи)
от
ответственного
• Зная кем является ответственный можно
четко сказать какую задачу он выполняет в
проекте

44.

БКНФ до нормализации
project_id
Вид работы
Ответственный
1
Разработка
Рома
2
Маркетинг
Максим
2
Дизайн
Илья
1
Дизайн
Илья
3
Маркетинг
Диана
3
Разработка
Миша
Решение?

45.

БКНФ до нормализации
project_id
Вид работы
Ответственный
1
Разработка
Рома
2
Маркетинг
Максим
2
Дизайн
Илья
1
Дизайн
Илья
3
Маркетинг
Диана
3
Разработка
Миша
Декомпозиция

46.

БКНФ после нормализации
id
name
Вид работы
Id_проекта
Id_разработки
1
Рома
Разработка
1
1
2
Максим
Маркетинг
2
2
3
Илья
Дизайн
2
3
4
Илья
Дизайн
1
4
5
Диана
Маркетинг
3
5
6
Миша
Разработка
3
6
работы
проекты

47.

4НФ
Определение
• Переменная отношения находится в
четвёртой нормальной форме, если она
находится в нормальной форме Бойса —
Кодда и не содержит нетривиальных
многозначных зависимостей.

48.

• Таблица находится в НФ БК
• Устраняются многозначные зависимости

49.

4НФ Пример
Для одного сотрудника есть
- МНОЖЕСТВО проектов
- МНОЖЕСТВО увлечений
worker_id
project
hobbie
1
Сантехник
Радиотехника
1
КайзерДом
Гитара
2
FabioRoss
Футбол
3
КайзерДом
Хоккей
3
Доска Почета
Гитара

50.

4НФ Пример
• Атрибуты Проект и Увлечение напрямую зависят
от первого столбца, но друг от друга они
независимы
worker_id
project
hobbie
1
Сантехник
Радиотехника
1
КайзерДом
Гитара
2
FabioRoss
Футбол
3
КайзерДом
Хоккей
3
Доска Почета
Гитара

51.

4НФ Пример
• А что будет если увлечений у данного сотрудника
больше чем проектов?
worker_id
project
hobbie
1
Сантехник
Радиотехника
1
КайзерДом
Гитара
2
FabioRoss
Футбол
3
КайзерДом
Хоккей
3
Доска Почета
Гитара

52.

4НФ Пример
• Еще вариант - выбрать все хобби сотрудников,
которые участвуют в проекте “КайзерДом”
worker_id
project
hobbie
1
Сантехник
Радиотехника
1
КайзерДом
Гитара
2
FabioRoss
Футбол
3
КайзерДом
Хоккей
3
Доска Почета
Гитара

53.

4НФ Пример
worker_id
project
hobbie
1
Сантехник
Радиотехника
1
КайзерДом
Гитара
2
FabioRoss
Футбол
3
КайзерДом
Хоккей
3
Доска Почета
Гитара
Решение?

54.

4НФ Пример
worker_id
project
hobbie
1
Сантехник
Радиотехника
1
КайзерДом
Гитара
2
FabioRoss
Футбол
3
КайзерДом
Хоккей
3
Доска Почета
Гитара
Декомпозиция

55.

4НФ Пример
worker_id
project
worker_id
hobbie
1
Сантехник
1
Радиотехника
1
КайзерДом
1
Гитара
2
FabioRoss
2
Футбол
3
КайзерДом
3
Хоккей
3
Доска Почета
3
Гитара
Декомпозиция

56.

5НФ
Определение
• Переменная отношения находится в пятой
нормальной форме (иначе — в
проекционно-соединительной нормальной
форме) тогда и только тогда, когда каждая
нетривиальная зависимость соединения в
ней определяется потенциальным ключом
(ключами) этого отношения.

57.

• Таблица находится в 4 НФ
• Устраняются нетривиальные зависимости
(Декомпозиция без потерь)

58.

5НФ Пример
worker
project
part
Миша
КайзерДом
Frontend
Рома
КайзерДом
Backend
Рома
Сантехник
API Integration
Ярик
Доска почета
Backend
Миша
Доска Почета
Frontend
Миша
Резина
Frontend
Миша делает только Frontend
Рома наоборот, делает все, кроме Frontend
Миша участвует в большом количестве проектов,
Ярик только в одном
...

59.

5НФ Пример
worker
project
part
Миша
КайзерДом
Frontend
Рома
КайзерДом
Backend
Рома
Сантехник
API Integration
Ярик
Доска почета
Backend
Миша
Доска Почета
Frontend
Миша
Резина
Frontend
Декомпозируем без потерь таким образом, чтобы
при объединении декомпозированных таблиц мы
получили исходную таблицу

60.

5НФ Пример
worker
Миша
Рома
Рома
Ярик
Миша
Миша
project
КайзерДом
КайзерДом
worker
part
Миша
Frontend
Рома
Backend
Рома
API
Integration
Ярик
Backend
Сантехник
Доска
почета
Доска
Почета
Резина
project
part
КайзерДом
Frontend
КайзерДом
Backend
Сантехник
API
Integration
Доска
почета
Backend
Доска
Почета
Frontend
Резина
Frontend
Декомпозируем без потерь таким образом, чтобы
при объединении декомпозированных таблиц мы
получили исходную таблицу

61.

62.

Все)
ДЗ:
• Прочитать примеры в википедии по нормальным
формам.
• Ознакомится с 6НФ и Доменно-ключевой НФ.
• https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%8
0%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0
%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0

63.

SQL
- декларативный язык программирования,
применяемый для создания, модификации и
управления данными в реляционной базе данных,
управляемой соответствующей системой управления
базами данных.
- IBM 1970-e - SEQUEL
– целью разработки было создание простого
непроцедурного языка, которым мог воспользоваться
любой пользователь, даже не имеющий навыков
программирования
-* Идем в Википедию и читаем подробный разбор
стандартизации SQL

64.

SQL – Srtuctured Query Language –
структурированный язык запросов
для взаимодействия с БД
Задача:
-для предоставления простого и эффективного
способа чтения и записи информации из БД

65.

Расширения SQL
• Многие поставщики СУБД расширили
возможности SQL, введя в язык
дополнительные операторы или инструкции:
• - дополнительная функциональность
• -упрощение определенных операций
• - специфичны для конкретной БД
• - редко поддерживаются более чем одним
поставщиков

66.

Преимущества SQL:
• -не относится к числу патентованных
языков
• - легко изучить (инструкции состоят из
простых английских слов)
• -мощный язык (можно выполнять очень
сложные операции с БД)

67.

SQL - элементы
- операторы определения данных (Data Definition Language, DDL):
– CREATE создаёт объект базы данных (саму базу, таблицу,
представление, пользователя и так далее),
– ALTER изменяет объект,
– DROP удаляет объект;
-операторы манипуляции данными (Data Manipulation Language, DML):
– SELECT выбирает данные, удовлетворяющие заданным условиям,
– INSERT добавляет новые данные,
– UPDATE изменяет существующие данные,
– DELETE удаляет данные

68.

SQL - элементы
- операторы определения доступа к данным (Data Control Language, DCL):
• GRANT предоставляет пользователю (группе) разрешения на
определённые операции с объектом,
• REVOKE отзывает ранее выданные разрешения,
• DENY задаёт запрет, имеющий приоритет над разрешением;
- операторы управления транзакциями (Transaction Control Language,
TCL):
• COMMIT применяет транзакцию,
• ROLLBACK откатывает все изменения, сделанные в контексте
текущей транзакции,
• SAVEPOINT делит транзакцию на более мелкие участки.

69.

Далее, мы будем
рассматривать только
MySQL как пример РСУБД

70.

Типы данных
Тип данных
Диапазон
UNSIGNED
TINYINT
-128 — 127
0 — 255
SMALLINT
-32 768 — 32 767
0 — 65 535
MEDIUMINT
-8 388 608 — 8 388 607
0 — 16 777 215
INT
-2 147 483 648 — 2 147 483 647
0 — 4 294 967 295
BIGINT
-9 223 372 036 854 775 808 —
9 223 372 036 854 775 807
0 — 18 446 744 073 709 551 615
Указание размера для целочисленных типов ( int(3) ) не меняет диапазон
возможных значений. Это справочно-сервисная информация, которую иногда
используют инструменты для работы с MySQL.

71.

Типы данных-дробные числа
Тип данных
Максимальный диапазон
FLOAT(M,D)
-3,402823466E+38 до -1,175494351E-38, 0, и от
1,175494351E-38 до 3,402823466E+38
DOUBLE(M,D)
-1,7976931348623157E+308 до -2,2250738585072014E-308, 0, и от
2,2250738585072014E-308 до 1,7976931348623157E+308
DECIMAL(M,D)
65 цифр
M — количество отводимых под число символов.
D — количество символов дробной части.
UNSIGNED - запрещает указывать отрицательные значения

72.

Типы данных - строки
Тип данных
Длина
N
VARCHAR(N)
0 - 65535
Переменная
CHAR(N)
0 - 255
Фиксированная (дополняется справа пробелами
при недостаточно длине)

73.

Типы данных
Тип данных
Формат
Примечание
DATE
YYYY-MM-DD
в качестве разделителя может выступать не только дефис «», но и любой символ отличный от цифры
DATETIME
YYYY-MM-DD
HH:mm:SS
ANSI - стандарт даты/времени
TIMESTAMP
00000000000000
в виде количества секунд, прошедших с полуночи 1 января
1970 года по гринвичскому времени
TIME
HH:mm:SS
-838:59:59.000000 до 838:59:59.000000
YEAR
YYYY
TIME, DATETIME, TIMESTAMP поддерживают так же указание дробной
части секунд

74.

Создание БД
-- Простое создание базы данных
CREATE DATABASE test;
-- Создание базы данных с указанием кодировки по
умолчанию
CREATE DATABASE test DEFAULT CHARACTER SET utf8;
-- Создать базу данных, если таковая не существует
-- Если существует - не пытаться создавать
CREATE DATABASE IF NOT EXISTS test;

75.

Удаление/переименование БД
-- Удаление базы данных
DROP DATABASE test;
-- Удаление БД. Если БД не существует - не выдаст
ошибку.
DROP DATABASE IF EXISTS test;
-- Переименование БД
RENAME DATABASE test TO production;

76.

Создание таблицы
CREATE TABLE `department` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

77.

NULL
NULL обозначает отсутствующее или неизвестное
значение и обрабатывается отличным от других значений
образом
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
нужно пользоваться операторами IS NULL и IS NOT NULL

78.

Создание таблицы
CREATE TABLE `department` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

79.

Создание таблицы
CREATE TABLE `department` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

80.

Primary key
Задается при создании таблицы
Часто, при создании суррогатного ключа
используется опция AUTO_INCREMENT для
ключевого атрибута

81.

Принципы
Стараться использовать типы данных минимального
размера
Простые типы
– Сравнение чисел проще чем строк, так как не
учитываются кодировки
– Используйте встроенные типы (не надо использовать
строки для дат)
Стараться избегать значений NULL
– Усложняет работу для самой БД
– Порождает неопределенности

82.

Создание БД
Не забываем
ОБНОВЛЯТЬ БД

83.

Создание таблиц
Не забываем ОБНОВЛЯТЬ БД

84.

Создание таблиц
Или на панели
инструментов
нажимаем
и вводим
листинг
запроса
(GREAT TABLE…)

85.

Создание таблиц

86.

Создание таблиц

87.

Создание таблиц

88.

Создание таблиц

89.

Схема данных (диаграмма БД)

90.

Схема данных (диаграмма БД)

91.

Добавление данных в таблицы БД

92.

Добавление данных в таблицы БД

93.

Добавление данных в таблицы БД

94.

Добавление данных в таблицы БД

95.

SELECT (выбрать)
• Зарезервированное слово (является частью
SQL)
• !!! Нельзя называть таблицу или столбец
зарезервированными словами
• «Что хотите извлечь и куда»

96.

• Select prod_name/извлекает один столбец
НАЗВАНИЕ ПРОДУКТА из таблицы ПРОДУКТЫ/
• From Products;
• (данные не фильтруются и не сортируются)
• Лучше писать в Select Продукты.Название
продукта
• Нечувствительны к регистру символов
инструкций в отличие от имен таблиц,
столбцов и значений

97.

Извлечение нескольких столбцов
• Select prod_id, prod_name, prod_price
/извлекает несколько столбцов из таблицы
ПРОДУКТЫ/
• From Products;

98.

Извлечение всех столбцов
• Select *
• From Products;
• !!! Лучше не использовать групповой
символ (*), извлечение ненужных столбцов
обычно приводит к снижению
производительности запроса и приложения
в целом

99.

Извлечение уникальных строк
• Select Distinct prod_id
• From Products;
• СУБД возвращает только уникальные
(неповторяющиеся) значения
• Должно находиться непосредственно перед
списком имен столбцов
• Применяется ко всем столбцам, а не только
перед которым оно стоит
• Select Distinct prod_id, prod_price

100.

• Для извлечения лишь нескольких первых
записей (н-р, первых пяти)

101.

комментарии
Инструкции не выполняются, не
обрабатываются.
Обозначения:
-- (два дефиса) все, что идет далее считается
текстом комментария в строке
/* - помечает начало комментария
*/ - завершение комментария
(все, что находится между, становится
комментарием)

102.

103.

Сортировка полученных данных
ORDER BY заставляет СУБД отсортировать
данные в алфавитном порядке

104.

105.

Сортировка по нескольким столбцам

106.

Сортировка по положению столбца

107.

108.

Фильтрация данных
использование предложения WHERE

109.

Операторы в предложении
WHERE

110.

111.

Сравнение с одиночным значением

112.

113.

114.

115.

116.

117.

Задание)
• 1. Выведите товары без цены
• 2. Вывести клиентов, у которых не указан
email

118.

Расширенная фильтрация данных
оператор AND

119.

120.

Оператор OR
1. Вывести название и цены всех товаров,
изготовленных
одним
из
указанных
поставщиков (DLL01 и BRS01)

121.

Решение

122.

Задание
• Вывести
список
всех
предлагаемых
поставщиками DLL01 и BRS01 товаров, цена
которых – 10 долларов и выше

123.

Внимание
• Вначале обрабатываются логические
операторы AND, а потом – логические
операторы OR

124.

Решение (выбрать правильный)

125.

Оператор IN
Оператор IN служит для указания диапазона
условий, любое из которых может быть
выполнено. При этом значения, заключенные
в скобки, перечисляются через запятую.

126.

Инструкция SELECT извлекает все товары,
предлагаемые поставщиками DLL01 и BRS01.
После оператора IN указан список значений
через запятую, а весь список заключен в
скобки.

127.

128.

Преимущества оператора IN
При работе с длинными списками необходимых значений
синтаксис логического оператора IN гораздо понятнее.
При использовании оператора IN совместно с операторами
AND и OR гораздо легче управлять порядком обработки.
Операторы IN почти всегда быстрее обрабатываются, чем
списки операторов OR (впрочем, это сложно заметить в случае
коротких списков).
Самое большое преимущество логического оператора IN
заключается в том, что в нем может содержаться еще одна
инструкция SELECT, а это позволяет создавать очень гибкие
предложения WHERE.

129.

Оператор NOT
Ключевое
слово,
применяемое
в
предложении where для отрицания какоголибо условия.
Пример: извлекается
список
товаров,
предлагаемых всеми поставщиками, кроме
DLL01.

130.

Логический оператор NOT отрицает
условие, следующее за ним. Поэтому
СУБД извлекает не те значения vend_id,
которые совпадают с DLL01, а все
остальные.

131.

Фильтрация с использованием
метасимволов

132.

%

133.

134.

135.

1. Вывести название товаров, названия в
которых начинаются на F и заканчиваются на у.
2. Вывести еmail в которых есть сочетание
@forte.com

136.

137.

Метасимвол «знак
подчеркивания»(_)
Еще
одним
полезным
метасимволом
является знак подчеркивания (_). Он
используется так же, как и знак %, но при
этом учитывается не множество символов, а
только один.
1. Вывести названия товаров в которых
неизвестны
первые
два
значения
и
заканчивается на словосочетания inch teddy
bear.
2. Повторите первое задание только с
использованием метасимвола % .

138.

Метасимвол
«квадратные скобки» ([])
служит для указания набора символов,
каждый из которых должен совпадать с
искомым значением, причем в точно
указанном месте (в позиции метасимвола).
1. Найти всех клиентов
начинаются на J или M
имена
которых

139.

Метасимвол
«квадратные скобки» ([])
служит для указания набора символов,
каждый из которых должен совпадать с
искомым значением, причем в точно
указанном месте (в позиции метасимвола).
1. Найти всех клиентов
начинаются на J или M
имена
которых

140.

Метасимвол, обозначающий
противоположное действие (^)
• 1. Найти всех клиентов имена которых НЕ
начинаются на J или M

141.

Советы по использованию
метасимволов
• Не злоупотребляйте метасимволами. Если
можно использовать другой оператор поиска,
задействуйте его.
• При использовании метасимволов старайтесь
по возможности не вставлять их в начало
шаблона поиска. Шаблоны, начинающиеся с
метасимволов, обрабатываются медленнее
всего.
• Внимательно
следите
за
позицией
метасимволов. Если они находятся не на своем
месте, будут извлечены не те данные.

142.

Создание вычисляемых полей
Примеры использования

143.

Конкатинация
Комбинирование
значений
(путем
присоединения их друг к другу) для получения
одного “длинного” значения.
SQL Server для конкатинации использует
оператор «+»
Пример: создать таблицу, в которой в одном
столбце объединены записи из нескольких
столбцов (по условию отчета)

144.

• Чтобы убрать пробелы справа от указанного значения, необходимо
использовать функцию RTRIM (). Отбрасывает все пробелы справа от
указанного значения
• R- право по-английски

145.

146.

147.

Псевдоним
- это альтернативное имя для поля или значения.
Псевдонимы
присваиваются
с
помощью
ключевого слова AS.
Рассмотрим следующую инструкцию SELECT.

148.

149.

Математические вычисления

150.

151.

Математические операторы в SQL

152.

Использование функций обработки
данных
Функции — это операции, которые чаще всего
приходится выполнять над данными, включая
различные преобразования и вычисления.

153.

Применение функций

154.

Функции для работы с текстом

155.

Наиболее часто используемые
текстовые функции

156.

Применение функции SOUNDEX

157.

158.

Функции для работы с
датой/временем
• Извлечь список всех заказов, сделанных в
2012 году

159.

Функции для работы с числами

160.

Использование итоговых функций

161.

Итоговые функции

162.

AVG

163.

Самостоятельная работа
1. Найти среднюю цену товара,
предлагаемых поставщиком DLL01.

164.

165.

Функция COUNT
Подсчитывает количество строк:
- общее число строк в таблице
- число
строк,
удовлетворяющих
определенному критерию

166.

• Общее количество клиентов, содержащихся
в таблице Castomers
1. Клиенты, имеющие адреса электронной
почты

167.

Функция MAX
• Возвращает наибольшее значение в
указанном столбце
Указана цена самого дорого товара

168.

Функция MIN
возвращает наименьшее значение в
указанном столбце
Указана цена самого дешевого товара

169.

Функция SUM
Отображает сумму значений столбца

170.

• Вычислить общую стоимость заказа по
каждому элементу в таблице OrderItems,
для которых номер заказа равен 20005

171.

• Вычислить среднее значение цены по
уникальным значениям в таблице Products
для поставщика DLL01

172.

• Выведите одной таблицей количество
элементов в таблице Products, самую
высокую цены, самую низкую и среднюю
стоимость товара

173.

Группировка данных

174.

Группировка данных

175.

Группировка данных

176.

Группировка данных

177.

Рекомендации к применению
Group BY

178.

179.

180.

Фильтрация по группам
• WHERE фильтрует строки, a HAVING — группы

181.

Применение группировки

182.

Вывести имена всех поставщиков, которые
доставляют два или более продукта
(необходимо изменить текущий запрос)

183.

• Вывести имена всех поставщиков, которые
доставляют два или более продукта

184.

• Вывести имена всех поставщиков, которые
доставляют два или более заказа за 4
доллара и более

185.

• Вывести имена всех поставщиков, которые
доставляют два или более товара за 4
доллара и более
Этапы решения:
1) вывести наименования всех поставщиков,
которые доставляют товары за 4 доллара и
более
2) Вывести имена всех поставщиков, которые
доставляют два или более товара за 4
доллара и более

186.

Этапы решения:
1) вывести наименования всех поставщиков,
которые доставляют товары за 4 доллара и
более

187.

2) Вывести имена всех поставщиков, которые
доставляют два или более товара за 4
доллара и более

188.

2) Вывести имена всех поставщиков, которые
доставляют два или более товара за 4
доллара и более

189.

190.

Сравнение предложений
GROUP BY и ORDER BY

191.

192.

Выведите номер заказа и количество товара
для всех заказов, которые содержат три и
более товара

193.

Отсортируем полученный результат по
количеству заказанных товаров (добавить
значение ORDER BY)

194.

Порядок следования в инструкции
Select

195.

Подзапросы
- запросы, вложенные в другие запросы
Пример: необходимо вывести список всех
клиентов, которые заказали товар RGAN01

196.

1) извлекаем номера всех заказов, содержащих товар RGAN01
из таблицы (ОrderItems);

197.

1) извлекаем номера всех заказов, содержащих товар RGAN01
из таблицы (ОrderItems);
SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01';

198.

2) получаем идентификаторы всех клиентов, которые сделали
заказы, перечисленные на предыдущем шаге;

199.

2) получаем идентификаторы всех клиентов, которые сделали
заказы, перечисленные на предыдущем шаге;

200.

2.1) Объединим два первых запроса
Подзапросы всегда обрабатываются, начиная с самой
внутренней инструкции SELECT в направлении “изнутри
наружу”

201.

2.1) Теперь имеются все идентификаторы всех клиентов,
заказавших товар RGAN01

202.

3) Получаем имя клиента и его контакт
идентификатора клиента
3.1) Объединяем все три запроса
на основании

203.

204.

205.

Использование подзапросов в
вычисляемых полях
Пример: Вывести общее количество заказов,
сделанных каждым клиентом из таблицы
Customers

206.

Использование подзапросов в
вычисляемых полях

207.

1) извлекаем список клиентов из
таблицы Orders
(например под номером
1000000001):

208.

1.1) потом под номером
1000000002

209.

1.2) потом под номерами
1000000003, …, 1000000005

210.

2) Из таблицы Orders необходимо вывести атрибуты cust_name,
cust_state

211.

Объединение таблиц
Надо ли where?

212.

Объединение таблиц
Самые мощные операции

213.

Объединение таблиц

214.

Внутренние объединения
INNER JOIN – проверка равенства двух таблиц

215.

Объединение нескольких таблиц

216.

Задание
Перепишите запрос с использованием синтаксиса объединения

217.

Решение

218.

Создание расширенных
объединений
Использование псевдонимов таблиц
Создание расширенных
объединений

219.

220.

Типы объединений
1
Самообъединение
2
Внешнее объединение
3
Естественное объединение

221.

1
Самообъединение

222.

1
Самообъединение

223.

1
Самообъединение

224.

Задание
Переделайте
подзапрос
использованием объединений
с

225.

1
Самообъединение

226.

2
Внешнее объединение

227.

2
Внешнее объединение

228.

2
Внешнее объединение

229.

2
Внешнее объединение

230.

2
Внешнее объединение

231.

2
Внешнее объединение

232.

Задание
Переделайте запрос с использованием функции RIGHT
OUTER JOIN

233.

3
Естественное объединение

234.

3
Естественное объединение

235.

Использование объединений
совместно с итоговыми функциями

236.

Использование объединений
совместно с итоговыми функциями

237.

Использование объединений
совместно с итоговыми функциями

238.

Задание
Переделайте запрос с использованием функции LEFT
OUTER JOIN

239.

Задание

240.

Решение

241.

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

242.

Создание комбинированных
запросов

243.

244.

245.

246.

247.

Задание

248.

249.

Задание
• Переделайте запрос, используя оператор
UNION ALL

250.

Правила применения оператора
UNION

251.

Сортировка результатов
комбинированных запросов

252.

Добавление данных (INSERT)

253.

Добавление данных (INSERT)

254.

Добавление данных (INSERT)

255.

Добавление данных (INSERT)

256.

Добавление данных (INSERT)

257.

Добавление части строки

258.

Добавление части строки

259.

Добавление результатов запросов

260.

Добавление результатов запросов

261.

Добавление результатов запросов

262.

Копирование данных их одной
таблицы в другую
• Чтобы скопировать содержимое какой-то
таблицы в новую таблицу используют
инструкцию SELECT INTO

263.

Копирование данных их одной
таблицы в другую

264.

Копирование данных их одной
таблицы в другую

265.

Копирование данных их одной
таблицы в другую

266.

Обновление и удаление данных

267.

Обновление и удаление данных

268.

Обновление и удаление данных

269.

Обновление и удаление данных

270.

Удаление данных

271.

Удаление данных

272.

Рекомендации

273.

Рекомендации

274.

Задание для самостоятельной
работы (Компьютерная фирма)

275.

Задание для самостоятельной
работы
Таблица Product представляет производителя (maker), номер
модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' принтер). Предполагается, что номера моделей в таблице Product
уникальны для всех производителей и типов продуктов.
В таблице PC для каждого ПК, однозначно определяемого
уникальным кодом – code, указаны модель – model (внешний ключ к
таблице Product), скорость - speed (процессора в мегагерцах), объем
памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах),
скорость считывающего устройства - cd (например, '4x') и цена - price.
Таблица Laptop аналогична таблице РС за исключением того, что
вместо скорости CD содержит размер экрана -screen (в дюймах).
В таблице Printer для каждой модели принтера указывается,
является ли он цветным - color ('y', если цветной), тип принтера - type
(лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена price.

276.

Задание для самостоятельной
работы
Products
insert into Product values('B','1121','PC')
insert into Product values('A','1232','PC')
insert into Product values('A','1233','PC')
insert into Product values('E','1260','PC')
insert into Product values('A','1276','Printer')
insert into Product values('D','1288','Printer')
insert into Product values('A','1298','Laptop')
insert into Product values('C','1321','Laptop')
insert into Product values('A','1401','Printer')
insert into Product values('A','1408','Printer')
insert into Product values('D','1433','Printer')
insert into Product values('E','1434','Printer')
insert into Product values('B','1750','Laptop')
insert into Product values('A','1752','Laptop')
insert into Product values('E','2113','PC')
insert into Product values('E','2112','PC')

277.

Задание для самостоятельной
работы
PC
insert into PC values(1,'1232',500,64,5,'12x',600)
insert into PC values(2,'1121',750,128,14,'40x',850)
insert into PC values(3,'1233',500,64,5,'12x',600)
insert into PC values(4,'1121',600,128,14,'40x',850)
insert into PC values(5,'1121',600,128,8,'40x',850)
insert into PC values(6,'1233',750,128,20,'50x',950)
insert into PC values(7,'1232',500,32,10,'12x',400)
insert into PC values(8,'1232',450,64,8,'24x',350)
insert into PC values(9,'1232',450,32,10,'24x',350)
insert into PC values(10,'1260',500,32,10,'12x',350)
insert into PC values(11,'1233',900,128,40,'40x',980)
insert into PC values(12,'1233',800,128,20,'50x',970)

278.

Задание для самостоятельной
работы
Laptop
insert into Laptop values(1,'1298',350,32,4,700,11)
insert into Laptop values(2,'1321',500,64,8,970,12)
insert into Laptop values(3,'1750',750,128,12,1200,14)
insert into Laptop values(4,'1298',600,64,10,1050,15)
insert into Laptop values(5,'1752',750,128,10,1150,14)
insert into Laptop values(6,'1298',450,64,10,950,12)

279.

Задание для самостоятельной
работы
Printer
insert into Printer values(1,'1276','n','Laser',400)
insert into Printer values(2,'1433','y','Jet',270)
insert into Printer values(3,'1434','y','Jet',290)
insert into Printer values(4,'1401','n','Matrix',150)
insert into Printer values(5,'1408','n','Matrix',270)
insert into Printer values(6,'1288','n','Laser',400)

280.

Задание для самостоятельной
работы
Запросы:
1. Найдите номер модели, скорость и размер жесткого
диска для всех ПК стоимостью менее 500 дол.
Вывести: model, speed и hd

281.

Задание для самостоятельной
работы
Запросы:
2. Найдите производителей принтеров. Вывести:
maker

282.

Задание для самостоятельной
работы
Запросы:
3. Найдите номер модели, объем памяти и
размеры
которых
экранов ПК-блокнотов,
превышает
1000
цена
дол.

283.

Задание для самостоятельной
работы
Запросы:
4. Найдите все записи таблицы Printer для
цветных принтеров.

284.

Задание для самостоятельной
работы
Запросы:
Найдите номер модели, скорость и
размер жесткого диска ПК, имеющих 12x
или 24x CD и цену менее 600 дол.
5.

285.

Задание для самостоятельной
работы
Запросы:
6. Для каждого производителя, выпускающего
ПК-блокноты c объёмом жесткого диска не
менее 10 Гбайт, найти скорости таких ПКблокнотов. Вывод: производитель, скорость.

286.

Задание для самостоятельной
работы
Запросы:
7. Найдите номера моделей и цены всех
имеющихся в продаже продуктов (любого
типа) производителя B (латинская буква).

287.

Задание для самостоятельной
работы
Запросы:
8. Найдите производителя, выпускающего
ПК, но не ПК-блокноты.

288.

Задание для самостоятельной
работы
Запросы:
Найдите производителей ПК с
процессором не менее 450 Мгц. Вывести:
Maker
9.

289.

Задание для самостоятельной
работы
Запросы:
10. Найдите модели принтеров,
имеющих самую высокую цену.
Вывести: model, price

290.

Задание для самостоятельной
работы
Запросы:
11. Найдите среднюю скорость ПК.

291.

Задание для самостоятельной
работы
Запросы:
12. Найдите среднюю скорость ПКблокнотов, цена которых превышает
1000 дол.

292.

Задание для самостоятельной
работы
Запросы:
13. Найдите среднюю скорость ПК,
выпущенных производителем A.

293.

Задание для самостоятельной
работы
Запросы:
14. Для каждого производителя, имеющего
модели в таблице Laptop, найдите средний
размер экрана выпускаемых им ПКблокнотов. Вывести: maker, средний размер
экрана.

294.

Задание для самостоятельной
работы
Запросы:
15. Найдите размеры жестких дисков,
совпадающих у двух и более PC.
Вывести: HD

295.

Задание для самостоятельной
работы
Запросы:
16.
Найдите
производителей,
выпускающих по меньшей мере три
различных модели ПК. Вывести:
Maker, число моделей ПК.

296.

Задание для самостоятельной
работы
Запросы:
17. Найдите максимальную цену ПК,
выпускаемых каждым производителем, у
которого есть модели в таблице PC.
Вывести: maker, максимальная цена.

297.

Задание для самостоятельной
работы
Запросы:
18. Для каждого значения скорости ПК,
превышающего 600 МГц, определите
среднюю цену ПК с такой же скоростью.
Вывести: speed, средняя цена.

298.

Задание для самостоятельной
работы
Запросы:
Найдите производителей, которые
производили
бы
как
ПК
со скоростью не менее 750 МГц, так и ПКблокноты со скоростью не менее 750 МГц.
Вывести: Maker
19.

299.

Задание для самостоятельной
работы
Запросы:
20. Используя таблицу Product, определить
количество производителей, выпускающих
по одной модели.

300.

Задание для самостоятельной
работы
Запросы:
21. Перечислите номера моделей любых
типов, имеющих самую высокую цену по
всей имеющейся в базе данных продукции.

301.

Задание для самостоятельной
работы
Запросы:
22. Найдите производителей принтеров,
которые производят ПК с наименьшим
объемом RAM и с самым быстрым
процессором среди всех ПК, имеющих
наименьший объем RAM. Вывести: Maker

302.

Задание для самостоятельной
работы
Запросы:
23. Найдите среднюю цену ПК и ПК-
блокнотов, выпущенных производителем
A (латинская буква). Вывести: одна общая
средняя цена.

303.

Задание для самостоятельной
работы (Фирма вторсырья)
English     Русский Правила