- •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
Вложенные запросы
Исходная база данных
Эта база данных далее будет использоваться в примерах.
Таблица Клиент
IDN |
IDN_ГОРОДА |
ИМЯ |
РЕКВИЗИТЫ |
IDN_БАНКА |
204 |
101 |
Петров |
-------------- |
311 |
205 |
104 |
Кузнецов |
-------------- |
314 |
206 |
102 |
Иванов |
-------------- |
317 |
208 |
104 |
Золин |
-------------- |
311 |
210 |
105 |
Киров |
-------------- |
323 |
212 |
103 |
Павлов |
-------------- |
317 |
215 |
105 |
Петренко |
-------------- |
318 |
Таблица Города
IDN |
НАЗВАНИЕ |
102 |
Минск |
101 |
Москва |
103 |
Саратов |
104 |
Пермь |
105 |
Киев |
Таблица Банки
IDN |
РЕКВИЗИТЫ |
311 |
МММ |
314 |
Альфа – банк |
317 |
Сбербанк |
323 |
Менатеп |
318 |
Западуралбанк |
Таблица Перемещение
IDN |
ПОРЯДКОВ№ |
КОД_ДОК |
ДАТА_ДОК |
НОМЕР_ДОК |
IDN_ ГРУППЫ |
IDN_ МАТ.ЦЕН |
КОЛ-ВО |
ЦЕНА |
|
|
|
|
|
402 |
501 |
|
20 |
|
|
|
|
|
402 |
503 |
|
25 |
|
|
|
|
|
404 |
505 |
|
6 |
. |
|
|
|
|
404 |
504 |
|
7 |
|
|
|
|
|
404 |
506 |
|
5 |
|
|
|
|
|
406 |
508 |
|
15 |
|
|
|
|
|
406 |
507 |
|
25 |
Некоторые столбцы не заполнены т.к. не используются в примерах.
Таблица Группы
IDN |
НАЗВАНИЕ |
402 |
Газ. вода |
404 |
Шоколад |
406 |
Сигареты |
Таблица Мат. ценности
IDN_ГРУППЫ |
IDN_МАТ.ЦЕН |
IDN_МАТ.ЦЕН |
402 |
501 |
Fanta |
402 |
503 |
Sprite |
404 |
505 |
Mars |
404 |
504 |
Twix |
404 |
506 |
Шок |
406 |
508 |
Кама |
406 |
507 |
L&M |
Вложение запросов.
SQL позволяет вкладывать запросы друг в друга. Внешний запрос использует значения, которые генерируются во внутреннем запросе.
Предположим, необходимо извлечь всю информацию о банке с которым
работает Киров.
Вот один из способов решения:
SELECT * FROM БАНКИ
WHERE IDN =(SELECT IDN_БАНКА FROM КЛИЕНТ WHERE ИМЯ=‘Киров’)
Выходные данные:
-
IDN
РЕКВИЗИТЫ
323
Менатеп
Чтобы оценить основной запрос, SQL должен оценить внутренний запрос ( или подзапрос) в предложении WHERE . Подзапрос оценивается так как если бы он был основным запросом: просматриваются все строки таблицы Клиент и выбираются те строки , для которых значение поля имя равно Киров, для таких строк выбираются значения поля IDN_БАНКА.
В результате выбранной оказывается строка с IDN_БАНКА = 323 . SQL подставляет его в предикат основного запроса вместо подзапроса, теперь предикат читается следующим образом:
WHERE IDN =323
После этого основной запрос выполняется как обычный, его результат показан
выше.
Если указать просто:
WHERE IDN =323
можно освободиться от подзапроса , но использование подзапроса
делает процедуру более гибкой .
В следующем примере использование подзапроса обязательно.
Получить все банки, которые не используются клиентами:
SELECT * FROM Банки
WHERE
(SELECT COUNT(*) FROM КлиентWHERE Клиент.Idn_банка = Банки.Idn) = 0
Еще один пример, когда необходимо использовать подзапрос:
Для каждой группы товаров найти товар с минимальной ценой, вывести название группы, название товара, цену:
SELECT Г.НАЗВАНИЕ, М НАЗВАНИЕ, П.ЦЕНА
FROM Группы Г, МАТ.ЦЕННОСТИ М, ПЕРЕМЕЩЕНИЕ П
WHERE М.IDN_ГРУППЫ = П.IDN_ГРУППЫ
AND М.IDN_МАТ.ЦЕН. = П.IDN_МАТ.ЦЕН.
AND Г.IDN = П.IDN_ГРУППЫ
AND П.ЦЕНА = (SELECT MIN (ЦЕНА) FROM ПеремещениеПВНУТР
WHERE П.IDN_ГРУППЫ = ПВНУТР.IDN_ГРУППЫ )