Основы языка SQL 1. Формирование запросов к БД. Типы запросов 2. Назначение языка SQL. Достоинства 3. Структура SQL. Основные операторы
Понятие запроса Запрос - специальным образом описанное требование, определяющее состав производимых над БД операций по выборке, удалению или модификации хранимых данных.
Типы запросов По результатам действия: 1. Запросы на выборку 2. Перекрестные запросы 3. Итоговые запросы 4. Модифицирующие запросы
Запросы на выборку Это стандартные запросы, которые позволяют отобрать данные из взаимосвязанных таблиц БД и других запросов. Результатом таких запросов является выборка. Выборкой называют динамическую таблицу с записями данных, которые удовлетворяют заданным условиям запроса. Выборка не сохраняется, она существует только до закрытия запроса и формируется каждый раз заново на основе реальных таблиц БД.
Модифицирующие запросы Запросы на выполнение действий, в результате выполнения которых изменяется содержимое таблиц БД. • Запросы удаления позволяют удалить записи из таблицы БД, удовлетворяющие определенным условиям. • Запросы добавления используются для добавления записей, удовлетворяющих определенным условиям, из одной таблицы в другую. • Запросы обновления позволяют изменить значения выбранных полей во всех записях таблицы, удовлетворяющих определенным условиям. • Запросы создания таблиц позволяют создать новые таблицы в БД.
Типы запросов (продолжение) По способу формирования: • Запросы по образцу или QBE-запросы − пользователь должен указать образцы для поиска информации. • Структурированные запросы или SQL-запросы − пользователь должен описать запрос с помощью особого языка, используя специальные команды, выражения и функции.
Query By Example • Визуальное формирование запросов (интерактивное средство). • Запросы к БД задаются путем заполнения предлагаемой запросной формы (описывается образец получаемого результата). Первое описание предложено Злуффом М. М. в 1975 -1977 гг. В каждой современной СУБД – вариант QBE.
Запросная форма
Structured Query Language • Стандартный язык запросов РБД. • Непроцедурный язык. Ориентирован на доступ к данным БД (инструмент для обработки и чтения данных БД). В разных СУБД поддерживаются различные диалекты SQL. Прототип языка - SEQUEL был разработан в конце 70 -х годов в IBM Research и реализован в СУБД System R.
Применение SQL для доступа к БД
Запрос на языке SQL
Достоинства SQL • Независимость от конкретных СУБД. • Переносимость с одной вычислительной системы на другую. • Наличие стандартов. • Реляционная основа. • Возможность выполнения интерактивных запросов. • Обеспечение программного доступа к БД. • Возможность администрирования БД. • Поддержка архитектуры клиент-сервер.
Использование SQL
Структура SQL • Операторы определения данных – соответствуют DDL (CREATE…, ALTER…, DROP…). • Операторы манипулирования данными – соответствуют DML (INSERT, DELETE, UPDATE, SELECT). • Операторы управления транзакциям – соответствуют TPL (COMMIT, ROLLBACK, SAVEPOINT и др. ). • Средства администрирования данных – соответствуют DCL (GRANT, REVOKE и др. ).
Языковые средства • ЯОД (DDL - Data Definition Language) — высокоуровневый непроцедурный язык декларативного типа для описания логической структуры данных. • ЯМД (DML - Data Manipulation Language) — совокупность конструкций, обеспечивающих выполнение основных операций по работе с данными базы (ввод, удаление и модификация данных).
Язык определения данных • • • • CREATE TABLE (создать таблицу) CREATE VIEW (создать представление) CREATE INDEX (создать индекс) CREATE TRIGGER (создать триггер) CREATE PROCEDURE (создать хранимую процедуру) ALTER TABLE (модифицировать таблицу) ALTER VIEW (модифицировать представление) ALTER INDEX (модифицировать индекс) ALTER TRIGGER (модифицировать триггер) ALTER PROCEDURE (модифицировать хранимую проц. ) DROP TABLE (удалить таблицу) DROP VIEW (удалить представление ) DROP INDEX (удалить индекс) DROP TRIGGER (удалить триггер) DROP PROCEDURE (удалить хранимую процедуру)
Язык манипулирования данными Состоит из 4 основных команд: • INSERT (добавление записей) • UPDATE (обновление записей) • DELETE (удаление записей) • SELECT (выборка записей)
Запросы на выборку • SELECT (выбор записей из существующих таблиц) • UNION (объединение нескольких таблиц/запросов в одну) • TRANSFORM (создание сводной таблицы – перекрестный запрос)
Оператор SELECT Общий формат записи оператора SELECT [predicate] { * | table. * | [table. ]field 1 [AS alias 1] [, [table. ]field 2 [AS alias 2] [, . . . ]]} FROM tableexpression [, . . . ] [IN externaldatabase] [WHERE <условия_выборки>] [GROUP BY <список_столбцов>] [HAVING <условия_поиска>] [ORDER BY <список_столбцов>] Простейший вид оператора SELECT {* | <значение 1> [, <значение 2>. . . ]} FROM <таблица 1> [, < таблица 2>. . . ]
Описание predicate Один из предикатов: ALL, DISTINCT, DISTINCTROW или TOP. По умолчанию ALL * Все поля из указанной таблицы (таблиц) или запроса table Имя таблицы, из которой выбираются записи field 1, field 2 Имена полей, которые нужно вывести (выводятся в порядке их перечисления) alias 1, alias 2 Имена столбцов, используемые вместо исходных названий tableexpression Имя таблицы (таблиц) или запроса – источника записей externaldatabase Имя базы, содержащей таблицу (таблицы) или запрос (по умолчанию текущая база)
Примеры 1. Выбор всех столбцов таблицы: SELECT * FROM Продукция; 2. Выбор определенных столбцов таблицы: SELECT Kod. PR, Naim. PR FROM Продукция; 3. Выбор с условием и сортировкой записей: SELECT Таб_номер, Фамилия FROM [Сотрудники] WHERE Фамилия Like "A*" ORDER BY Фамилия;
WHERE Указывает, какие записи таблиц, перечисленных в выражении FROM, будут выбраны (используется, чтобы исключить ненужные записи из запроса). Может использоваться до 40 логических выражений, объединенных OR или AND.
Примеры 1. SELECT DISTINCT NAIM_KRAT FROM FAСULTET 2. SELECT KOD, NAIM_POLN, NAIM_KRAT, NAIM_1 B, OCHERED FROM FAСULTET 3. SELECT * FROM FAСULTET WHERE KOD > 3
Специальные операции для построения условий IN – проверяет, совпадает ли значение выражения с одним из перечисленных в списке. LIKE – сравнивает строковое значение с образцом. Between … And … – определяет, попадает ли значение в указанный диапазон. IS NULL – выявляет нулевые (пустые) значения столбца. IS NOT NULL – выявляет все ненулевые значения столбца.
GROUP BY Позволяет формировать группы в результирующем множестве записей. Записи, содержащие одинаковые значения в перечисленных столбцах, группируются и для каждого набора вычисляется указанная агрегатная функция (например, Sum).
Пример 1. SELECT Kod. PR AS Код, Avg(KOL) AS [Средний объем], Min(KOL) AS [Минимальный объем], Max(KOL) AS [Максимальный объем] FROM Спецификация GROUP BY Kod. PR;
Агрегатные функции Имя Операция Sum Avg Min Max Count Сумма значений в группе Среднее значение в группе Минимальное значение в группе Максимальное значение в группе Количество записей в группе, содержащих значения Дисперсия генеральной совокупности Среднеквадратическое отклонение Var St. Dev
HAVING Действует совместно с предложением GROUP BY и используется для дополнительной селекции записей во время определения групп. Указывает, какие сгруппированные данные будут выведены (выводятся только те записи, которые удовлетворяют заданному условию).
Пример 2. SELECT Kod. PR AS Код, Count(Kod. PR) AS [Количество поставок], Sum(KOL) AS [Объем поставок] FROM Спецификация GROUP BY Kod. PR HAVING Kod. PR ="012" Or Kod. PR ="015";
ORDER BY Сортирует результат запроса по указанному полю/полям в порядке возрастания (по умолчанию) или убывания.
Пример 3. SELECT Count([Спецификация к накладной]. Kod. PR) AS [Count-Kod. PR], Sum([Спецификация к накладной]. KOL) AS [Sum-KOL], [Спецификация к накладной]. Kod. PR, [Спецификация к накладной]. PR FROM [Спецификация к накладной] GROUP BY [Спецификация к накладной]. Kod. PR, [Спецификация к накладной]. PR HAVING ((([Спецификация к накладной]. Kod. PR)="012" Or ([Спецификация к накладной]. Kod. PR) ="042")) ORDER BY [Спецификация к накладной]. Kod. PR [ASC | DESC ];
Соединение таблиц FROM table 1 [ LEFT | RIGHT ] JOIN table 2 ON table 1. field 1 compopr table 2. field 2 Для запросов, где значения полей связи одинаковы, предпочтительнее операция INNER JOIN. Выражение ON используется для описания установления связей.
Внутреннее соединение Пример 4. Таблицa B Таблица А Столбец Р 1 Столбец Р 2 Столбец РЗ Столбец Р 1 Столбец Р 2 A X 400 X 1 B X 200 Y 2 C Y 500 Z 2
Пример 4. SELECT A. P 1, A. P 2, B. P 2 FROM A, B WHERE A. P 2 = B. P 1 Промежуточный НД (не визуализируется) 1. Столбец А. Р 1 А. Р 2 В. Р 1 В. Р 2 A X X 1 A X Y 2 A X Z 2 B X X 1 B X Y 2 B X Z 2 C Y X 1 C Y Y 2 C Y Z 2 Результирующий НД 2. Столбец А. Р 1 Столбец А. Р 2 Столбец В. Р 2 A B C X X Y 1 1 2
Симметричное соединение SELECT A. P 1, A. P 2, B. P 2 FROM A INNER JOIN B ON A. P 2 = B. P 1
Пример 5. SELECT Таб_номер, Фамилия FROM Сотрудники IN "С: documentsxldata. xls" "EXCEL 2000; " WHERE Фамилия Like "A*" ORDER BY Фамилия; IN позволяет одновременно подсоединиться только к одной внешней базе данных.