Слайд 1Тема 9: Язык структурированных запросов SQL
Слайд 2Создание
Одним из языков, появившихся в результате разработки реляционной модели данных,
является язык SQL (Structured Query Language), который в настоящее время
получил очень широкое распространение и фактически превратился в стандартный язык реляционных баз данных. Стандарт на язык SQL был выпущен Американским национальным институтом стандартов (ANSI) в 1986 г., а в 1987 г. Международная организация стандартов (ISO) приняла его в качестве международного. Нынешний стандарт SQL известен под названием SQL/92.
Слайд 3Основные категории команд языка SQL:
Основные категории команд языка SQL предназначены
для выполнения различных функций, включая построение объектов базы данных и
манипулирование ими, начальную загрузку данных в таблицы, обновление и удаление существующей информации, выполнение запросов к базе данных, управление доступом к ней и ее общее администрирование.
Основные категории команд языка SQL:
- DDL – язык определения данных;
- DML – язык манипулирования данными;
- DQL – язык запросов;
- DCL – язык управления данными;
- команды администрирования данных;
- команды управления транзакциями
Слайд 4Основные категории команд языка SQL:
Определение структур базы данных (DDL)
Язык определения
данных (Data Definition Language, DDL) позволяет создавать и изменять структуру
объектов базы данных, например, создавать и удалять таблицы. Основными командами языка DDL являются следующие: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX.
Манипулирование данными (DML)
Язык манипулирования данными (Data Manipulation Language DML) используется для манипулирования информацией внутри объектов реляционной базы данных посредством трех основных команд: INSERT, UPDATE, DELETE.
Слайд 5Основные категории команд языка SQL:
Выборка данных (DQL)
Язык запросов DQL наиболее
известен пользователям реляционной базы данных, несмотря на то, что он
включает одну команду: SELECT. Эта команда вместе со своими многочисленными опциями и предложениями используется для формирования запросов к реляционной базе данных.
Язык управления данными (DCL)
Команды управления данными позволяют управлять доступом к информации, находящейся внутри базы данных. Как правило, они используются для создания объектов, связанных с доступом к данным, а также служат для контроля над распределением привилегий между пользователями. Команды управления данными следующие: GRANT, REVOKE.
Слайд 6Основные категории команд языка SQL:
Команды администрирования данных
С помощью команд администрирования
данных пользователь осуществляет контроль за выполняемыми действиями и анализирует операции
базы данных; они также могут оказаться полезными при анализе производительности системы. Не следует путать администрирование данных с администрированием базы данных, которое представляет собой общее управление базой данных и подразумевает использование команд всех уровней.
Команды управления транзакциями
Существуют следующие команды, позволяющие управлять транзакциями базы данных: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
Слайд 7Преимущества языка SQL
Основные достоинства языка SQL заключаются в следующем:
- стандартность
— как уже было сказано, использование языка SQL в программах
стандартизировано международными организациями;
- независимость от конкретных СУБД — все распространенные СУБД используют SQL, т.к. реляционную базу данных можно перенести с одной СУБД на другую с минимальными доработками;
- возможность переноса с одной вычислительной системы на другую — СУБД может быть ориентирована на различные вычислительные системы, однако приложения, созданные с помощью SQL, допускают использование как для локальных БД, так и для крупных многопользовательских систем;
- реляционная основа языка — SQL является языком реляционных БД, поэтому он стал популярным тогда, когда получила широкое распространение реляционная модель представления данных. Табличная структура реляционной БД хорошо понятна, а потому язык SQL прост для изучения;
Слайд 8Преимущества языка SQL
- возможность создания интерактивных запросов — SQL обеспечивает
пользователям немедленный доступ к данным, при этом в интерактивном режиме
можно получить результат запроса за очень короткое время без написания сложной программы;
- возможность программного доступа к БД — язык SQL легко использовать в приложениях, которым необходимо обращаться к базам данных. Одни и те же операторы SQL употребляются как для интерактивного, так и программного доступа, поэтому части программ, содержащие обращение к БД, можно вначале проверить в интерактивном режиме, а затем встраивать в программу;
- обеспечение различного представления данных — с помощью SQL можно представить такую структуру данных, что тот или иной пользователь будет видеть различные их представления. Кроме того, данные из разных частей БД могут быть скомбинированы и представлены в виде одной простой таблицы, а значит, представления пригодны для усиления защиты БД и ее настройки под конкретные требования отдельных пользователей;
Слайд 9Преимущества языка SQL
- озможность динамического изменения и расширения структуры БД
— язык SQL позволяет манипулировать структурой БД, тем самым обеспечивая
гибкость с точки зрения приспособленности БД к изменяющимся требованиям предметной области;
- поддержка архитектуры клиент-сервер — SQL одно из лучших средств для реализации приложений на платформе клиент-сервер. SQL служит связующим звеном между взаимодействующей с пользователем клиентской системой и серверной системой, управляющей БД, позволяя каждой из них сосредоточиться на выполнении своих функций.
Слайд 10Запросы
В Access могут быть созданы следующие типы запросов:
Запрос на выборку. Извлекает данные из
одной или нескольких таблиц и отображает их в таблице.
Помимо этого,
пользователю предоставляется возможность создавать дополнительное вычисляемое поле с данными, полученными в результате проведения математических или логических операций с другими полями, и вводить параметры (числа, тексты) запроса.
Запрос на изменение. Изменяет или перемещает данные. К этому типу относятся запросы на добавление или удаление записей, на создание или обновление таблицы.
Итоговый запрос. Служит для вычисления итоговых значений (сумма, среднее значение, количество по группам данных). Разновидностью итоговых запросов является перекрёстный запрос, позволяющий представить итоговые данные в виде таблицы, напоминающей электронную. Обычно перекрёстный запрос применяется к повторяющимся данным и связанных с ними датами, чтобы получить более наглядную, сгруппированную по интервалам времени (месяц, квартал) информацию.
Слайд 11Запрос на выборку
Запрос на выборку
SELECT [ALL | DISTINCT] список полей
FROM
имена таблиц
WRERE (критерий отбора)
ORDER BY столбцы сортировки [ASC | DESC]
Где
SELECT - команда, определяющая запрос на выборку и содержащая спи-сок полей, в котором указываются поля, подлежащие выводу;
ALL,DISTINCT - предикаты, включающие все строки удовлетворяющие принятым условиям, исключающие строки с повторяющимися данными;
FROM_имена таблиц - определяет имена таблиц, у которых запрос должен отобрать данные.
WHERE - (критерий отбора) - определяет условия для отбора записей указанных таблиц;
ORDER BY столбцы_сортировки - определяет порядок сортировки записей по возрастанию (ASC) или убыванию (DESC); по умолчанию производится сортировка по возрастанию.
Слайд 12Пример
Пример 1. Запрос на выборку, позволяющий получить из таблицы СТУДЕНТ данные
(таблицу с полями «ФИО», «Дата рождения», «Группа») о студентах мужского
пола, родившихся до 1976 г.
SELECT СТУДЕНТ.ФИО,СТУДЕНТ.[Дата рождения],
СТУДЕНТ. Группа
FROM СТУДЕНТ
WHERE (((СТУДЕНТ.[Дата рождения])<#1/1/76#) АND (СТУДЕНТ.Пол)="М"));
Пример 2. Запрос на выборку с формированием в таблице СТИПЕНДИЯ вычисляемого поля "Размер", в котором данные получаются умножением значений столбца "Процент" на 80.
SELECT СТИПЕНДИЯ. Оценка, СТИПЕНДИЯ. Процент, [СТИПЕНДИЯ]! [Процент]*80 AS Размер FROM СТИПЕНДИЯ;
Слайд 13Запрос на выборку с параметром
Запрос на выборку с параметром
SELECT [ALL
| DISTINCT] список полей
FROM имя таблицы
WHERE ((имя поля)=[выражение])
Здесь в квадратных
скобках помещается выражение, поясняющее видвводимого параметра.
Пример 3. Запрос с параметром, позволяющий выделить в таблице СЕССИЯ имена студентов, имеющих оценку УДО, ХОР, ХОТ или ОТЛ, используемую в качестве параметра.
SELECT СЕССИЯ. ФИО,СЕССИЯ.Оценка
FROM СЕССИЯ
WHERE (((СЕССИЯ.Оценка)=([ВвеДите оценку])));
Слайд 14Запрос на добавление
Запрос на добавление
INSERT INTO таблица_получатель
SELECT [ALL | DISYINCT]
список полей
FROM таблица_источник
WHERE условие добавления,
где INSER INTO таблица_получатель - вставляет
в таблицу_получатель одну, несколько или все (если отсутствует WHERE) строки таблицы_источника.
Пример 4. Запрос на добавление, позволяющий таблицу АНКЕТА дополнить записями таблицы СТУДЕНТ, содержащими информацию о студентах группы ЭУ - 2.
INSERT INTO АНКЕТА(Номер,ФИО,Пол,[Дата рождения],Группа)
SELECT СТУДЕНТ.Номер,СТУДЕНТ.ФИО,СТУДЕНТ.Пол,СТУДЕНТ.[Дата рождения],СТУДЕНТ.Группа
FROM СТУДЕНТ WHERE (((СТУДЕНТ.Группа)="ЭУ-2"));
Слайд 15Запрос на обновление
Запрос на обновление
UPDATE имя_таблицы
SET имя_поля1=значение1[, имя_поля2=значение2[,...]]
WHERE условие_обновления,
где UPDATE
имя_таблицы - обновляет выбранные поля в записях таблицы, удовлетворяющих условию
обновления.
SET - указывает имя поля и присваемое ему значение.
Пример 5. Запрос на обновление, позволяющий в таблице АНКЕТА восстановить прежнюю дату рождения 24.06.75 Ветровой
UPDATE АНКЕТА
SET АНКЕТА. [Дата рождения]=#24/6/75#
WHERE ((АНКЕТА.ФИО)="Ветрова А.Ф.")
Слайд 16Запрос на удаление
Запрос на удаление
DELETE список_полей
FROM имя_таблицы
WHERE условия_удаления
где DELETE список_полей
- удаляет одну или несколько записей из таблицы в соответствии
с принятыми условиями. Если WHERE отсутствует, то удаляются все строки.
Пример 6. Запрос на удаление из таблицы АНКЕТА записей, содержащих информацию о группе ЭУ -2.
DELETE АНКЕТА.Номер,АНКЕТА.ФИО,АНКЕТА.Пол,АНКЕТА.[Дата рож-дения],АНКЕТА.Группа
FROM АНКЕТА
WHERE (((АНКЕТА.Группа)="ЭУ-2"));
Слайд 17Итоговые запросы
Итоговые запросы
SELECT [ALL | DISTINCT] список_полей, функция (имя поля)
AS
[заголовок_поля]
FROM имена_таблиц
WHERE условие_отбора
GROUP BY условие_группировки
HAVING условие_для_результата
где AS [заголовок_поля] - определяет
заголовок столбца результирующего набора записей; GROUP BY условие группировки - выбирает поле, по значениям которого записи объединяются в группы, к каждой из которых применяется функция; HAVING условие_для_результата - одно или несколько условий, налагаемых на значения поля (заголовок_поля), полученные после выполнения группировки и применения функции; WHERE услойие_отбора - условие для отбора исходных записей перед выполнением группировки и применением функции.
Слайд 18Примеры
Пример 7. Итоговый запрос для вычисления в таблице СТУДЕНТ количества студентов
мужского пола в группе ЭУ-1.
SELECT Count (СТУДЕНТ.Номер) А8[количество]
FROM СТУДЕНТ
WHERE ((СТУДЕНТ.Группа)="ЭУ-1")
AND ((СТУДЕНТ. Пол)="М");
Пример 8. Итоговый запрос, позволяющий рассчитать средний балл по информатике в таблице СЕССИЯ.
SELECT Avg (СЕССИЯ.Информ) AS Среднее
FROM СЕССИЯ;
Слайд 19Перекрестный запрос
Перекрестный запрос
TRANSFORM функция (имя_поля) [AS подпись]
SELECT [ALL | DISTINCT] список_полей
FROM имя_таблицы
PIVOT
Format (имя поля, "тип_форматирования" IN (список_значений)
где TRANSFORM - ключевое слово,
определяющее перекрестный запрос; PIVOT..IN - описывает формат и имена тех полей результирующего набора записей, которые соответствуют группам исходных строк и содержат значения, определенных функций.
Пример 9. Перекрестный запрос к таблице УСПЕВАЕМОСТЬ для получения таблицы со средними баллами студентов по месяцам.
TRANSFORM Аvg([Балл]) AS [Значение]
SELECT [ФИО], Аvg([Балл]) AS [Итоговое значение Балл]
FROM УСПЕВАЕМОСТЬ
GROUP BY [ФИО]
PIVOT Format ([Дата],"mmm") IN ("янв","фев","мар","апр","май”,“июнь”,"июл","авг","сен","окт","ноя","дек");
Слайд 20Запрос на создание таблицы
а) путем выборки полей из таблицы
SELECT [ALL |
DISTINCT] список_полей
INTO новая_таблица
FROM исходная_таблица
WHERE условия_добавления
SELECT... INTO - ключевое выражение для создания
новой таблицы со списком полей выбранных из исходной таблицы.
Пример 10. Запрос на создание таблицы СПИСОК с полями "Номер", "ФИО", "Дата рождения" из таблицы АНКЕТА.
SELECT АНКЕТА.Номер,АНКЕТА.ФИО,АНКЕТА.[Дата рождения]
INTO СПИСОК
FROM АНКЕТА
WHERE (((АНКЕТА.Пол)=“М”)) ;
Слайд 21Запрос на создание таблицы
б) путем слияния полей, выбранных из нескольких
таблиц
SELECT [ALL:DISTINCT] список_полей
FROM имя_таблицы 1
INNER JOIN имя_таблицы 2
ON условие_объединения
где INNER JOIN - операция
объединения из двух таблиц всех записей полей, указанных в инструкции SELECT и удовлетворяющих условию объединения.
Пример 11. Запрос на создание таблицы ВЕДОМОСТЬ с полями "Номер", "ФИО", "Пол", "Группа" на основании таблиц СЕССИЯ и СТУДЕНТ.
SELECT СЕССИЯ.Номер,СЕССИЯ.ФИО,СЕССИЯ.Матем,СТУДЕНТ.Пол, СТУДЕНТ.Группа AS ВЕДОМОСТЬ
FROM СЕССИЯ
INNER JOIN СТУДЕНТ
ON СЕССИЯ.Номер=СТУДЕНТ.Номер