Презентация №8

advertisement
Базы
данных
Лекция №08
Основы SQL
1. Построение вычисляемых полей
Операции с вычисляемыми полями:
• Сложение
• Вычитание
• Умножение
• Деление
• Встроенные функции языка SQL
• Скобки
2
1. Построение вычисляемых полей
SELECT Товар.Название,
Товар.Цена,
Сделка.Количество,
Товар.Цена*Сделка.Количество AS Стоимость
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
SELECT Фирма, Фамилия + " " +
LEFT(Имя,1) + "." +
LEFT(Отчество,1) + "." AS ФИО
FROM Клиент
SELECT Товар.Название,
Year(Сделка.Дата) AS Год,
Month(Сделка.Дата) AS Месяц
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
3
2. Итоговые функции
Итоговые (агрегатные) функции:
• Count (Выражение) – количество записей
• Min/Max (Выражение) – наименьшее и
наибольшее из множества значений
• Avg (Выражение) – среднее значение
множества значений
• Sum (Выражение) – сумма множества
значений
4
2. Итоговые
функции
SELECT Min(Товар.Название) AS Min_Название
FROM Товар
SELECT Count(*) AS Количество_сделок
FROM Сделка
SELECT Sum(Сделка.Количество) AS Количество_товара
FROM Сделка
SELECT Avg(Товар.Цена) AS Avg_Цена
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
SELECT Sum(Товар.Цена*Сделка.Количество) AS Стоимость
FROM Товар INNER JOIN Сделка
5
ON Товар.КодТовара=Сделка.КодТовара
3. Предложение GROUP BY
При наличии в SELECT фразы GROUP BY:
• Каждый элемент – единственное значение для
всей группы
• SELECT может включать следующие типы
элементов:
– Имена полей
– Итоговые функции
– Константы и Выражения
• Все имена полей должны присутствовать и во
фразе GROUP BY
• Во фразе GROUP BY могут быть имена столбцов,
отсутствующие в списке предложения SELECT
• Предложение WHERE обрабатывается первым 6
3. Предложение GROUP BY
SELECT Клиент.Фамилия,
Avg(Сделка.Количество) AS Среднее_количество
FROM Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента
GROUP BY Клиент.Фамилия
SELECT Товар.Название,
Sum(Товар.Цена*Сделка.Количество) AS Стоимость
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Товар.Название
7
3. Предложение GROUP BY
SELECT Клиент.Фирма,
Count(Сделка.КодСделки) AS Количество_сделок
FROM Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента
GROUP BY Клиент.Фирма
SELECT Клиент.Фирма,
Sum(Сделка.Количество) AS Общее_Количество,
Sum(Товар.Цена*Сделка.Количество) AS Стоимость
FROM Товар INNER JOIN
(Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента)
ON Товар.КодТовара=Сделка.КодТовара
8
GROUP BY Клиент.Фирма
3. Предложение GROUP BY
SELECT Товар.Название,
Month(Сделка.Дата) AS Месяц,
Sum(Товар.Цена*Сделка.Количество) AS Стоимость
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Товар.Название, Month(Сделка.Дата)
SELECT Товар.Название,
Month(Сделка.Дата) AS Месяц,
Sum(Товар.Цена*Сделка.Количество) AS Стоимость
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
WHERE Товар.Сорт="Первый"
GROUP BY Товар.Название, Month(Сделка.Дата)
9
4. Предложение HAVING
HAVING фильтрует по своему условию
предварительно сгруппированные GROUP
BY блоки данных
Условия в HAVING отличаются от условий в
WHERE:
• HAVING исключает из результирующего набора
данных группы с результатами агрегированных
значений
• WHERE исключает из расчета агрегатных
значений записи, не удовлетворяющие условию
• В условии WHERE нельзя задавать агрегатные
10
функции
4. Предложение HAVING
SELECT Клиент.Фирма,
Count(Сделка.Количество) AS Количество_сделок
FROM Клиент INNER JOIN Сделка
ON Клиент.КодКлиента=Сделка.КодКлиента
GROUP BY Клиент.Фирма
HAVING Count(Сделка.Количество) > 3
SELECT Товар.Название,
Sum(Товар.Цена*Сделка.Количество) AS Стоимость
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Товар.Название
HAVING Sum(Товар.Цена*Сделка.Количество) > 10000
11
4. Предложение HAVING
SELECT Товар.Название
FROM Товар INNER JOIN Сделка
ON Товар.КодТовара=Сделка.КодТовара
GROUP BY Товар.Название
HAVING Sum(Товар.Цена*Сделка.Количество) > 10000
12
5. Скрипты для таблиц примеров
Таблица ТОВАРОВ:
CREATE TABLE ARTICLE (
ID_ARTICLE
INTEGER NOT NULL,
NAM_ARTICLE VARCHAR(50) NOT NULL,
COST
NUMERIC(15,2) NOT NULL,
KIND
VARCHAR(50)
);
ALTER TABLE ARTICLE
ADD CONSTRAINT PK_ARTICLE PRIMARY KEY (ID_ARTICLE);
COMMENT ON COLUMN ARTICLE.ID_ARTICLE IS 'Код товара';
COMMENT ON COLUMN ARTICLE.NAM_ARTICLE IS 'Наименование
товара';
COMMENT ON COLUMN ARTICLE.COST IS 'Цена';
COMMENT ON COLUMN ARTICLE.KIND IS 'Сорт';
13
5. Скрипты для таблиц примеров
Таблица КЛИЕНТОВ:
CREATE TABLE CLIENT (
ID_CLIENT
INTEGER NOT NULL,
FAMALY
VARCHAR(50) NOT NULL,
NAM_CLIENT VARCHAR(50) NOT NULL,
FATHER
VARCHAR(50) NOT NULL,
FIRMA
VARCHAR(50) NOT NULL
);
ALTER TABLE CLIENT
ADD CONSTRAINT PK_CLIENT PRIMARY KEY (ID_CLIENT);
COMMENT ON COLUMN CLIENT.ID_CLIENT IS 'Код клиента';
COMMENT ON COLUMN CLIENT.FAMALY IS 'Фамилия';
COMMENT ON COLUMN CLIENT.NAM_CLIENT IS 'Имя';
COMMENT ON COLUMN CLIENT.FATHER IS 'Отчество';
COMMENT ON COLUMN CLIENT.FIRMA IS 'Фирма';
14
5. Скрипты для таблиц примеров
Таблица СДЕЛОК:
CREATE TABLE TRAID (
ID_TRAID
INTEGER NOT NULL,
ID_CLIENT
INTEGER NOT NULL,
ID_ARTICLE INTEGER NOT NULL,
AMOUNT
NUMERIC(15,2) NOT NULL,
DAT
DATE NOT NULL
);
ALTER TABLE TRAID
ADD CONSTRAINT PK_TRAID PRIMARY KEY (ID_TRAID),
ADD CONSTRAINT FK_TRAID_1 FOREIGN KEY (ID_CLIENT) REFERENCES CLIENT
(ID_CLIENT),
ADD CONSTRAINT FK_TRAID_2 FOREIGN KEY (ID_ARTICLE) REFERENCES
ARTICLE (ID_ARTICLE);
COMMENT ON COLUMN TRAID.ID_TRAID IS 'Код сделки';
COMMENT ON COLUMN TRAID.ID_CLIENT IS 'Код клиента';
COMMENT ON COLUMN TRAID.ID_ARTICLE IS 'Код товара';
COMMENT ON COLUMN TRAID.AMOUNT IS 'Количество';
15
COMMENT ON COLUMN TRAID.DAT IS 'Дата';
Спасибо
за внимание
16
Download