850 likes | 1.22k Views
Язык SQL. SQL – это аббревиатура от Structured Query Language (структурированный язык запросов). Функции языка SQL. Возможности языка SQL. определение данных выбор данных модификация данных управление данными арифметические вычисления и сравнение значений
E N D
Язык SQL SQL– это аббревиатура от Structured Query Language(структурированный язык запросов)
Возможности языка SQL • определение данных • выбор данных • модификация данных • управление данными • арифметические вычисления и сравнение значений • упорядочение строк и/или столбцов • агрегатирование данных
Развитие языка SQL • Начало 70-х годов – разработка экспериментальной реляционной СУБД System R, для которой затем был создан специальный язык SEQUEL • начало 80-х годов – разработка стандарта • 1986 год – выход стандарта SQL1 (SQL86) • 1989 год – расширение стандарта (SQL89) • 1992 год – выход стандарта SQL2 (SQL92) • 1999 год – выход стандарта SQL3 (SQL:1999) • 2003 год – выход стандарта SQL:2003
Типы операторов языка SQL • Операторы языка определения данных • Операторы языка обработки данных • Оператор языка запросов данных • Операторы языка управления данных • Операторы языка обработки транзакций • Операторы языка управления курсором
Операторы языка определения данных • CREATE TABLE – создать таблицу • ALTER TABLE – модифицировать таблицу • DROP TABLE – удалить таблицу • CREATE INDEX – создать индекс • ALTER INDEX – модифицировать индекс • DROP INDEX – удалить индекс
Операторы языка обработки данных • INSERT – вставить данные в таблицу • UPDATE – обновить данные в таблице • DELETE – удалить данные из таблицы Оператор языка запросов данных • SELECT Операторы языка управления данных • GRANT – предоставить привилегии • REVOKE – отменить привилегии
ОператорыязыкаобработкитранзакцийОператорыязыкаобработкитранзакций Операторы языка управления курсором • BEGIN TRANSACTION – начать транзакцию • COMMIT TRANSACTION – завершить транзакцию • SAVE TRANSACTION – создать точку сохранения внутри транзакции • DECLARE CURSOR – объявить курсор • FETCH INTO – переместить курсор • UPDATE WHERE CURRENT – изменить текущее значение
Синтаксис команды SELECT SELECT [предикат] {*|таблица.*| [таблица.]поле_1 [,[таблица.] поле_2 [,…]]} [AS псевдоним_1 [, псевдоним_2 [, …]]] FROM таблица_1[, таблица_2, [,…]]] [IN внешняя_БД] [WHERE выражение] [GROUP BY …] [HAVING …] [ORDER BY …] [WITH OWNERACCESS OPTION];
простая форма команды SELECT инструктирует БД, что извлечь из таблицы SELECT КОД_С, ФИО, ЗВАНИЕ FROM Сотрудники; • вывод полного списка столбцов таблицы SELECT * FROM Сотрудники;
изменение порядка вывода столбцов SELECT КОД_С, ДАТА_Р, ФИО, ЗВАНИЕ FROM Сотрудники; • исключение дублирования данных SELECT DISTINCT ЗВАНИЕ FROM Сотрудники; • вывод заданного количества записей SELECT TOP 2 ЗВАНИЕ FROM Сотрудники;
Оператор WHERE команды SELECT • WHERE позволяет устанавливать условия, команда извлекает из таблицы только те строки, для которых такое условие верно. SELECT ФИО, ЗВАНИЕ FROM Сотрудники WHERE ЗВАНИЕ = 'сержант'; SELECT ДАТА_Д, КОД_С FROM Дежурство WHERE КОД_С = 1001;
Использование реляционных операторов в условии SELECT * FROM Сотрудники WHERE КОД_С>=1003; SELECT * FROM Сотрудники WHERE ЗВАНИЕ>'м';
Использование булевых операторов в условии SELECT * FROM Объекты WHERE УЛИЦА = 'Советская' AND ДОМ > 100; SELECT * FROM Объекты WHERE УЛИЦА = 'Советская' OR ДОМ <= 10; SELECT * FROM Сотрудники WHERE NOT ЗВАНИЕ = 'майор';
Область действия оператора NOT SELECT * FROM Объекты WHERE Not УЛИЦА = 'Советская' OR ДОМ <= 10; SELECT * FROM Объекты WHERE NOT (УЛИЦА = 'Советская' OR ДОМ <= 10);
Оператор IN • Пример: SELECT * FROM Сотрудники WHERE ЗВАНИЕ IN ('майор', 'капитан');
Оператор BETWEEN • Синтаксис оператора: BETWEEN начальное_значение AND конечное_значение • Пример: SELECT * FROM Объекты WHERE ДОМ BETWEEN 30 AND 100;
Оператор LIKE • применим только к текстовым полям • используется специальные символы • символ подчеркивания (_) • знак процента (%)
Использование специальных символов в операторе LIKE • символ подчеркивания SELECT * FROM Сотрудники WHERE ЗВАНИЕ LIKE 'м_ _ _ _'; • знак процента SELECT * FROM Объекты WHERE УЛИЦА LIKE 'С%';
Значение NULL • поле не имеет никакого значения SELECT * FROM Объекты WHERE УЛИЦА IS NULL;
Специальные операторы могут использоваться вместе с оператором NOT SELECT * FROM Объекты WHERE УЛИЦА NOT NULL; SELECT * FROM Объекты WHERE NOT УЛИЦА IS NULL;
NOT с IN: SELECT * FROM Сотрудники WHERE ЗВАНИЕ NOT IN ('майор', 'капитан'); SELECT * FROM Сотрудники WHERE NOT ЗВАНИЕ IN ('майор', 'капитан');
Агрегатные (групповые) функции Агрегатные функции производят обобщенное групповое значение полей. Они возвращают одиночное значение для всей группы таблицы. • COUNT – количество выделенных записей • SUM – сумму всех выбранных значений • AVG – среднее значение • MAX – наибольшее значение • MIN – наименьшее значение
Пример использования агрегатных функций Результат SELECT SUM (ПРЕМИЯ) FROM Зарплата; SELECT AVG (ОКЛАД) FROM Зарплата; SELECT COUNT (*) FROM Зарплата; SELECT MAX (ОКЛАД+ПРЕМИЯ) FROM Зарплата; 7500 4200 5 7000
Объединение значений в группы • для объединения значений в группы используется оператор GROUP BY • для задания условий по группе используется оператор HAVING • HAVING должен ссылаться только на агрегаты и поля, которые выбраны GROUP BY
Примеры работы с групповыми значениями Результат SELECT COUNT (КОД_С) FROM Дежурство GROUP BY КОД_С; SELECT КОД_С, count (КОД_С) FROM Дежурство GROUP BY КОД_С HAVING count (КОД_С)>2; SELECT КОД_С, MIN (ДАТА_Д) FROM Дежурство GROUP BY КОД_С HAVING КОД_С IN (1002, 1004);
Формирование вывода запроса • размещение скалярных выражений и констант среди выбранных полей SELECT КОД_С, ОКЛАД/25, ПРЕМИЯ/25 FROM Зарплата;
оператор AS позволяет давать наименование столбцам вывода SELECT КОД_C, ОКЛАД/25 AS ОКЛАД_Д, ПРЕМИЯ/25 AS ПРЕМИЯ_Д FROM Зарплата;
вставка текста в выводимые данные SELECT КОД_С, ОКЛАД, 'руб.', ПРЕМИЯ, 'руб.' FROM Зарплата;
оператор ORDER BY – упорядочивание вывода • ASC – возрастание • DESC – убывание SELECT * FROM Зарплата ORDER BY ОКЛАД;
ORDER BY может использоваться с GROUP BY для упорядочения групп SELECT КОД_С, COUNT (КОД_С) FROM Дежурство GROUP BY КОД_С ORDER BY КОД_С DESC;
Организация запросов к нескольким таблицам • таблицы перечисляются в операторе FROM запроса через запятую • используются полные имя столбцов таблицы имя_таблицы.имя_столбца Объекты.НАЗВАНИЕ
Запрос к двум таблицам можно опускать имена таблиц, если столбцы имеют различные имена SELECT Сотрудники.ФИО, Дежурство.ДАТА_Д FROM Дежурство, Сотрудники WHERE Сотрудники.КОД_С = Дежурство.КОД_С; SELECT ФИО, ДАТА_Д FROM Дежурство, Сотрудники WHERE Сотрудники.КОД_С = Дежурство.КОД_С;
Подзапросы • Подзапрос – это запрос, который размещается внутри другого запроса • Подзапрос должен выбирать только одно значение • Для создания подзапроса, производящего несколько значений, можно использовать оператор IN • Операторы BETWEEN, LIKE и IS NULL не могут использоваться с подзапросами • Можно использовать подзапросы в нутрии предложения HAVING
SELECT * FROM Дежурство WHERE КОД_С = (SELECT КОД_С FROM Сотрудники WHERE ФИО = 'Иванов С.П.');
SELECT * FROM Дежурство WHERE КОД_С IN (SELECT КОД_С FROM Сотрудники WHERE звание = 'майор');