- •1 . Архитектуры обработки данных. 1
- •Архитектура файл/сервер.
- •Архитектура клиент/сервер.
- •Многозвенная архитектура.
- •Способы организации данных.
- •Сетевая модель данных
- •Реляционная модель данных.
- •ЯзыкSqLкак язык работы с реляционными базами.
- •Данные и взаимосвязи.
- •Объекты.
- •Первичные ключи. Что выбрать в качестве первичных ключей для каждой из таблиц?
- •Нормализация данных.
- •Первая нормальная форма.
- •Вторая нормальная форма.
- •Третья нормальная форма.
- •Типы данных.
- •Числовые целые типы данных.
- •Числовые типы данных с плавающей точкой.
- •Символьные типы данных.
- •. Типы данных date, time и datetime.
- •Специальные типы данных.
- •Структура запроса, основные ключевые слова и операторы
- •Список основных операторовSql
- •Список основных ключевых словSql
- •ОператорSelect
- •ПредложениеSelect
- •ПредложениеFrom
- •Повторяющиеся строки (ключевое слово distinct).
- •ПредложениеWhere
- •Условия поиска.
- •Составные условия поиска (and, or и not)
- •Проверка на принадлежность диапазону значений (between)
- •Проверка на членство в множестве (in)
- •Проверка на равенство значению null (is null)
- •Проверка на соответствие шаблону (like)
- •Подстановочные знаки
- •Сортировка результатов запроса (предложениеOrder by)
- •Агрегатные функции
- •Вычисление суммы столбца (sum)
- •Вычисление экстремумов (min и max)
- •Вычисление среднего значения (avg)
- •Вычисление количества значений в столбце (count)
- •Запросы с группировкой (предложениеGroup by)
- •Условия поиска групп having
- •Работа с несколькими таблицами
- •Вложенные запросы
- •Исходная база данных
- •Вложение запросов.
- •Оператор exists
- •Объединение множества запросов в один
- •Когда можно выполнить объединение запросов ?
- •Использование union с order by.
- •Команды модификации данных
- •Ввод значений (insert)
- •Вставка пустых указателей (null)
- •Именование названий столбцов для вставки
- •Вставка результатов запроса
- •Удаление строк из таблиц (delete)
- •Изменение значений поля (update)
- •Использование подзапросов для команд модификации данных
- •Использование подзапросов в insert
- •Использование подзапросов с delete
- •Модификация структуры данных
- •Команда сreate table
- •Команда alter table.
- •Команда drop table
Запросы с группировкой (предложениеGroup by)
Итоговые запросы напоминают итоговую информацию, находящуюся обычно в конце отчета. Эти запросы «сжимают» подробные данные, содержащиеся в отчете, в одну строку итоговых результатов. Но, как известно, в отчетах иногда используются также промежуточные итоги. И точно так же бывает необходимо получать промежуточные итоги результатов запроса. Эту возможность предоставляет предложение GROUP BY .
Вычислить оборот за каждый день в течение месяца.
SELECT ДАТА_ДОК, SUM (КОЛ-ВО*ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’
GROUP BY ДАТА_ДОК
ORDER BY ДАТА_ДОК
Какова средняя цена для каждой материальной ценности.
SELECT IDN_МАТ.ЦЕН, AVG(ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
GROUP BY IDN_МАТ.ЦЕН
Как это видно из приведенных примеров, в предложении GROUP BY обязательно перечисляются те поля, которые в списке возвращаемых столбцов указываются без агрегатных функций, то есть по этим полям производится группировка.
Условия поиска групп having
Точно также, как предложение WHERE используется для отбора отдельных строк, участвующих в запросе, предложение HAVING можно применить для отбора групп строк. Его формат соответствует формату предложения WHERE. Предложение HAVING состоит из ключевого слова HAVING, за которым следует условие поиска. Таким образом, данное предложение определяет условие поиска для групп. Основным отличием предложения HAVING от WHERE, что оно применяется уже непосредственно после самого запроса и в условие поиска включается поле с примененной к нему агрегатной функцией.
Вывести те дни месяца, когда оборот превышал 1000 руб.
SELECT ДАТА_ДОК, SUM (КОЛ-ВО*ЦЕНА)
SUM (КОЛ-ВО*ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’
GROUP BY ДАТА_ДОК
HAVING SUM (КОЛ-ВО*ЦЕНА)>1000
Вывести все идентификаторы городов, если количество клиентов из них больше трех.
SELECT IDN_ГОРОДА
FROM КЛИЕНТ
GROUP BY IDN_ГОРОДА
HAVING COUNT(*) >3
Работа с несколькими таблицами
На практике многие запросы считывают данные сразу из нескольких таблиц базы данных. Например, у нас существуют две таблицы.
Таблица Города
IDN |
НАЗВАНИЕ |
100 102 103 105 |
Москва Санкт-Петербург Пермь Париж |
Таблица Клиент
IDN |
НАЗВАНИЕ(ИМЯ) |
IDN_ГОРОДА |
|
1 2 3 4 5 |
МММ Хопер Алиса ИВС ПГТУ |
100 100 102 103 103 |
Вывести всех клиентов с указанием города.
SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ)
FROM ГОРОДА,КЛИЕНТ
WHERE ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА
Результат этого запроса.
Москва Москва Санкт-Петербург Пермь Пермь |
МММ Хопер Алиса ИВС ПГТУ |
Если бы нам нужны были клиенты только из Москвы. То этот запрос дополнился бы еще одной строкой.
AND ГОРОДА.НАЗВАНИЕ =’Москва’
В качестве упрощенного варианта этот же запрос можно записать следующим образом.
SELECT Г.НАЗВАНИЕ, К.НАЗВАНИЕ(ИМЯ)
FROM ГОРОДА Г., КЛИЕНТ К.
WHERE Г.IDN=K.IDN_ГОРОДА AND Г.НАЗВАНИЕ=’Москва’
Нас интересует на какую сумму был оборот по каждой группе товаров за какой-то промежуток времени.
SELECT ГР.НАЗВАНИЕ, SUM(П.КОЛ-ВО*П.ЦЕНА)
FROM ГРУППЫ ГР., ПЕРЕМЕЩЕНИЕ П.
WHERE ГР.IDN=П.IDN_ГРУППЫ AND П.ДАТА_ДОК
BETWEEN ‘1.02.2000’ AND ’16.03.2000’
GROUP BY ГР.НАЗВАНИЕ
HAVING SUM(П.КОЛ-ВО*П.ЦЕНА)>1000
ORDER BY SUM(П.КОЛ-ВО*П.ЦЕНА)