Язык структурированных запросов SQL (Савельева Н. П. ) стр. 1 Язык структурированных запросов SQL SQL (Structure Query Language) – является общепринятом языком написания запросов к реляционной базе данных. Не является языком программирования и СУБД, т. к. не содержит команд создания интерфейса, а имеет только команды обработки данных. SQL запрос - команды, написанные на языке SQL Способы применения SQL в прикладных программах: 1. Встроенные – SQL запрос записываются в тексте программы. Компиляция приложения специальным перепроцессором SQL преобразует исходный текст в исполняемую программу. SQL встроен почти во все СУБД и языки программирования, способные работать с базой данных (Delphi, FoxPro, Access и т.д.). 2. Интерактивный – имеются специальные оболочки мгновенного создания и выполнения SQL запроса. Прикладная программа, передает SQL запрос и при помощи специальных функций SQL получает результат запроса без применения перепроцесора. Этапы выполнения операторов SQL Пример: запрос для поиска списка Nom Fam Name Grupа Predmet mark отличников 101 Иванов Олег В-11 История 5 Содержимое таблицы базы данных stud (см. 102 Васина Анна В-12 Физика 4 таблицу) 103 Петров Иван С-11 Физика 5 Текст SQL запроса: Select fam, grupа From stud Where mark=5; Синтаксический анализ проверяет 1 этап синтаксический корректность текста SQL команды на анализ соответствие правилам, выполняется очень быстро, т. к. нет обращения к серверу базы (в 2 этап проверка параметров примере проверяется правильность слов Select, From, Where и их расположение в тексте). Проверка параметров анализирует словарь БД корректность параметров SQL-запроса (имена 3 этап оптимизация и полей, таблицы, права пользователя и т. д.). оператора метаданные Находятся семантические ошибки. Выполняется медленно, т. к. необходимы обращения к 4 этап генерация плана системным константам базы данных. (в примере выполнения проверяется правильность имени таблицы stud, нахождение в ней полей fam, grupа, mark, а так же 5 этап исполнение плана целый тип данных поля mark). запроса Оптимизация оператора разбивает целостный запрос на элементарные операции и производится составление наилучшей последовательности их выполнений. Выполняется очень медленно, т. к. требуется работа не только со словарем данных, но и использовать спастическую информацию о базе, характеризующую текущее состояние связи, расположение данных на терминалах и т. д. (в примере с начала фильтруются записи, для которых поле mark имеет значение 5, а затем формируется виртуальная таблица из двух поле и в нее записываются значения из полей таблицы fam, grupа) При Генерации плана выполнения создается двоичный код (на внутреннем машинном языке) созданного оптимального плана. Выполняется очень быстро. Grupа Исполнение плана запроса – реализуется выполнение закодированного Fam Иванов В-11 плана и получается результат запроса. (для примера получается виртуальная Петров С-11 (временная) таблица Язык структурированных запросов SQL (Савельева Н. П. ) стр. 2 Структура языка SQL (типы команд): 1. Язык определения данных (DDL – Data Definition Language) – команды создания (удаление, изменение структуры) объектов базы данных (таблицы, триггеры и т. д.) Create, Drop, Alter 2. Язык изменения данных (DML – Data Manipulition Language) – команды для обработки записей (т.е. метаданных). Insert, Delete, UpDate, Select, Commit, RollBack, 3. Команды администрирования базы данных – команды по разграничению прав и архивированию данных GRAND, Revoke Типы данных используемых в SQL Smallint – короткое целое число размером 2 байта с диапазоном - 3200 + 3200; Integer – целые числа размером 4 байта - 2.000000000 +2.000000000; Float – число с плавающей точкой; Date – формат дата/время размер 4 – 6 байт; Char (N)– текстовое значение, где N – максимально допустимое количество символов Основные команды SQL Имя Create table Drop table Alter table Delete Insert UpDate Commit RollBack Select Тип языка DDL Название Создание таблицы в базе данных Удаление таблицы Изменение структуры таблицы Удаляет запись из одной таблицы Добавление новых значений в базу данных Изменение значения в записях таблицы Сохраняет результаты выполнения транзакции Отказ от сохранения результатов транзакции Простая выборка данных Синтаксис Create table имя таблицы (имя поля1 характеристики поле1, остальные поля Primary key (имя поля)) Drop table имя таблицы Alter table имя таблицы Опция имя поля Delete from имя таблицы Insert Into имя таблицы (список полей) VALUES (список значений) UpDate имя таблицы Set имя поля = новое значение Commit RollBack Select список полей from список таблиц опции Примечание (Create Table): таблица создается пустая, только структура, ключевые поля является не обязательным. Характеристики полей: 1. Тип данных (тип Char требует указание длины); 2. Ограничения хранимых значений (Check). Check ((Value>=2)) или Check ((mark>=2)); 3. Требования к пусным значениям поля, т.е. является ли обязательным и не может хранить пустые значения. (для ключевых полей надо not null) Пример: Create Table student (nomer integer not null Check (Value>0), name char(20), primary key (nomer)) Примечание (Drop Table): если в удаляемой таблице находятся записи, то они не нуждаются в предварительном удалении. Имя удаляемой таблицы должно быть в базе данных. Пример: Drop Table student; Язык структурированных запросов SQL (Савельева Н. П. ) стр. 3 Примечание (Alter Table): действия по изменению структуры таблицы. 1. Добавить новое поле: ADD имя нового поля характеристики; 2. Удаление поля: Drop имя существенного поля; 3. Изменение структуры существенного поля: Alter имя поля характеристики. Пример: В таблицу «Студент» добавить поле fam (20), удалить поле fio и добавить ограничения номера не меньше 100. Alter Table student ADD fam char(20), Drop name, Alter nomer integer not null check(Value > = 100); Примечание (Delete): если в дополнительных параметрах не указано, то удаляются все записи. Если в удалении нуждаются некоторые записи, то в конец команды записывается условие и если оно выполняется, запись будет удалена. Delete From имя таблицы WHERE условия выборки записи Пример: удаление из таблицы student все записи о студентах с фамилией Иванов Delete From student WHERE fam =”Иванов” Пример: удалить всех студентов с двухзначными номерами Delete From student WHERE (nom > = 10) Примечание (Insert): список полей указывается в любом порядке разделительными запятыми. А список значений для нового поля указывается в том же порядке, что и списке полей. Так как происходит проверка на соответствие типов. Пример: добавить в таблицу студента Сидорова с номером 520 Insert Into student (Fam, nomer) VALUES (‘Сидоров’, 520) Примечание (UpDate): изменять можно значение не всех записей, только неуоторых записи. Для этого в конец команды надо дописать WHERE условие Пример: изменить фамилию для студента с номером 520 на Иванов UpDate student Set fam =‘Иванов’ WHERE nomer=520; Примечание (Select): Select создает на экране виртуальную таблицу, колонки которой соответствуют полям в перечисленном списке полей. Пример: вывести список студентов с указанием фамилии и группы. Select fam, group FROM student; Если нужно вывести все поля из таблицы * Select FROM student При необходимости можно отфильтровать отображаемые записи по какому-либо условию. Для этого в конец команды надо дописать WHERE условие Select * FROM student WHERE nomer<520; Язык структурированных запросов SQL (Савельева Н. П. ) стр. 4 Если необходимо вывести поля из нескольких таблиц, то они должны быть связаны следующим образом: 1. В главной таблице поле связи должно быть Primary Key 2. В команде связь устанавливается следующим образом: 1 способ: Select имя поля FROM имя главной таблицы INNER join имя подчиненной таблицы ON выражение связи Пример: из связных таблиц «Группа» и «Студент» по полю ‘Код группы’ вывести поля фамилии студента, название Группы и Фамилию Кл. руководителя. Select fam, group.name, fio_kl FROM group INNER join student ON group.kod_gr = student.kod_gr 2 способ: Select имя поля FROM имя главной таблицы, имя подчиненной таблицы WHERE выражение связи Пример: из связных таблиц «Группа» и «Студент» по полю ‘Код группы’ вывести поля фамилии студента, название Группы и Фамилию Кл. руководителя. SELECT fam, group.name, fio_kl FROM group, student WHERE group.kod_gr = student.kod_gr Пример: если необходимо вывести нужные записи. Select fam FROM group INNER join student ON group kod_gr = student.kod_gr WHERE group = “В-21” Команды SQL позволяют отображать не только существующие поля, но и виртуальные поля существующие только при просмотре и рассчитанные по нужным формулам. Select (создание вычисления полей) Select выражение As подпись Пример: в таблице товар вычислить стоимость на основании цены и количества, вывести на экран с названием. Select name AS fio_stud, cena*kol As sum FROM tovar; Главн. табл. Подчин. табл. поле 1 поле 3 поле 1 поле 2 поле 2 Отображенные данные можно отсортировать по выборному полю для этого, ORDER By поле Пример: отсортировать список фамилий по алфавиту. ORDER By fam ORDER By поле DESС – по убыванию; ORDER By поле ASK – по возрастанию; ORDER By поле1 ASK, поле2 DESK. Пример: отсортировать студентов по группам. Select fam, group FROM student ORDER By group, Fam Язык структурированных запросов SQL (Савельева Н. П. ) стр. 5 Отображаемые данные могут быть сгруппированы по определенному полю, при этом поле группировки будет отображать только уникальные значения. GROUP By поле Пример: сгруппировать студентов по группам. Select fam, group FROM student GROUP By group Если в таблице две группы по четыре студента в каждой, то будет отображено только две записи. При группировке обычно испытывают вычисления итоговых значений с помощью агрегатных функций. Count – подсчет количества записей в каждой группе. Пример: подсчитать количества студентов в каждой группе. Select group, count (*) as Kol FROM student GROUP By group; Sum – подсчет суммы значений, указанных записей по указанному полю. Пример: найти сумму общего количества каждого товара. Select name, Sum (kol) FROM tovar GROUP By name; Avg – подсчет средне арифметического значения. Пример: найти среднюю цену каждого товара. Select name, Avg(cena) FROM Tovar GROUP By name; Min, max – минимум и максимум. Пример: Найти наименьшую цену каждого товара Select name, Min (cena) From Tovar GROUP By name; Список литературы: Т. С. Карпова Базы данных: Модели, разработка, реализация. Санкт -Петербург: Питер 2001.г. (с 66-103) 2. А. Чекалов. Базы данных: от проектирования до разработки приложений. Санкт - Петербург: БХВ-Петербург 2003.г. (с 85-101) 3. А.Я. Скляр. Введение в InterBase. Москва: Горячая линия - Телеком 2002.г. (с 27-32) 1. Список средств обучения: 1. Файл видео презентации «3_Основные команды SQL.ppt»