
- •Информационное обеспечение систем управления
- •Содержание
- •1 Архитектуры обработки данных. 8
- •2 Способы организации данных. 10
- •3 Язык sql как язык работы с реляционными базами. 12
- •4 Данные и взаимосвязи. 13
- •5 Основы методологии idef1x 19
- •Insert into тклиент 46
- •1Архитектуры обработки данных.
- •1.1Архитектура хост/терминал.
- •1.2А рхитектура файл/сервер.
- •1.3Архитектура клиент/сервер.
- •1.4Многозвенная архитектура.
- •2Способы организации данных.
- •2.1Сетевая модель данных
- •2.2Реляционная модель данных.
- •3Язык sql как язык работы с реляционными базами.
- •4Данные и взаимосвязи.
- •4.1Объекты.
- •4.2Первичные ключи. Что выбрать в качестве первичных ключей для каждой из таблиц?
- •4.3Нормализация данных.
- •4.3.1Первая нормальная форма.
- •4.3.2 Вторая нормальная форма.
- •4.3.3Третья нормальная форма.
- •4.4Типы данных.
- •4.4.1Числовые целые типы данных.
- •4.4.2Числовые типы данных с плавающей точкой.
- •4.4.3Символьные типы данных.
- •4.4.4. Типы данных date, time и datetime.
- •4.4.5Специальные типы данных.
- •5Основы методологии idef1x
- •5.1Предназначение idef1x
- •5.2Сущности в idef1x и их атрибуты.
- •5.3Связи между сущностями
- •5.4Идентификация сущностей. Представление о ключах.
- •5.5Классификация сущностей в idef1x. Зависимые и независимые сущности.
- •5.6Типы связей между сущностями. Идентифицирующие и неидентифицирующие связи.
- •5.7Преимущества idef1x
- •5.8Модель «склад» в нотации idef1x
- •6.1Структура запроса, основные ключевые слова и операторы
- •6.1.1 Список основных операторов sql
- •6.1.2 Список основных ключевых слов sql
- •6.2Оператор select
- •6.2.1Предложение select
- •6.2.2Предложение from
- •6.2.2.1Повторяющиеся строки (ключевое слово distinct).
- •6.2.3Предложение where
- •6.2.4Условия поиска.
- •6.2.4.2Составные условия поиска (and, or и not)
- •6.2.4.3Проверка на принадлежность диапазону значений (between)
- •6.2.4.4Проверка на членство в множестве (in)
- •6.2.4.5Проверка на равенство значению null (is null)
- •6.2.4.6Проверка на соответствие шаблону (like)
- •6.2.4.7Подстановочные знаки
- •6.2.5Сортировка результатов запроса (предложение order by)
- •6.2.6 Агрегатные функции
- •6.2.6.1Вычисление суммы столбца (sum)
- •6.2.6.2Вычисление экстремумов (min и max)
- •6.2.6.3Вычисление среднего значения (avg)
- •6.2.6.4Вычисление количества значений в столбце (count)
- •6.2.7Запросы с группировкой (предложение group by)
- •6.2.8Условия поиска групп having
- •6.3Работа с несколькими таблицами
- •6.3.1Объединение при помощи оператора where
- •6.3.2Внутренние и внешние объединения
- •6.4 Вложенные запросы
- •6.4.1Исходная база данных
- •6.4.2Вложение запросов.
- •6.4.3Оператор exists
- •6.5Объединение множества запросов в один
- •6.5.1Когда можно выполнить объединение запросов ?
- •6.5.2Использование union с order by.
- •6.6Команды модификации данных
- •6.6.1Ввод значений (insert)
- •6.6.1.1Вставка пустых указателей (null)
- •6.6.1.2Именование названий столбцов для вставки
- •6.6.1.3Вставка результатов запроса
- •6.6.2Удаление строк из таблиц (delete)
- •6.6.3Изменение значений поля (update)
- •6.6.4Использование подзапросов для команд модификации данных
- •6.6.4.1Использование подзапросов в insert
- •6.6.4.2Использование подзапросов с delete
- •6.7Модификация структуры данных
- •6.7.1Команда сreate table
- •6.7.2Команда alter table.
- •6.7.3Команда drop table
6.2.7Запросы с группировкой (предложение 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 обязательно перечисляются те поля, которые в списке возвращаемых столбцов указываются без агрегатных функций, то есть по этим полям производится группировка.
6.2.8Условия поиска групп 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
6.3Работа с несколькими таблицами
6.3.1Объединение при помощи оператора where
На практике многие запросы считывают данные сразу из нескольких таблиц базы данных. Например, у нас существуют две таблицы.
Таблица Города
IDN |
НАЗВАНИЕ |
100 102 103 105 |
Москва Санкт-Петербург Пермь Париж |
Таблица Клиент
IDN |
НАЗВАНИЕ(ИМЯ) |
IDN_ГОРОДА |
|
1 2 3 4 5 6 |
МММ Хопер Алиса ИВС ПГТУ Рога&Копыта |
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(П.КОЛ-ВО*П.ЦЕНА)