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
|
102
|
Васина
|
Анна
|
В-12
|
Физика
|
4
|
103
|
Петров
|
Иван
|
С-11
|
Физика
|
5
|
Пример: запрос для поиска списка отличников
Содержимое таблицы базы данных stud (см. таблицу)
ТекстSQL запроса:
Синтаксический анализ проверяет корректность текста SQLкоманды на соответствие правилам, выполняется очень быстро, т. к. нет обращения к серверу базы (в примере проверяется правильность слов Select, From, Whereи их расположение в тексте).
Проверка параметрованализирует корректность параметров SQL-запроса (имена полей, таблицы, права пользователя и т. д.). Находятся семантические ошибки. Выполняется медленно, т. к. необходимы обращения к системным константам базы данных. (в примере проверяется правильность имени таблицыstud, нахождение в ней полей fam, grupа, mark, а так же целый тип данных поля mark).
Оптимизация оператораразбивает целостный запрос на элементарные операции и производится составление наилучшей последовательности их выполнений. Выполняется очень медленно, т. к. требуется работа не только со словарем данных, но и использовать спастическую информацию о базе, характеризующую текущее состояние связи, расположение данных на терминалах и т. д. (в примере с начала фильтруются записи, для которых поле markимеет значение 5, а затем формируется виртуальная таблица из двух поле и в нее записываются значения из полей таблицы fam, grupа)
Fam
|
Grupа
|
Иванов
|
В-11
|
Петров
|
С-11
|
При Генерации плана выполнениясоздается двоичный код (на внутреннем машинном языке) созданного оптимального плана. Выполняется очень быстро.
Исполнение плана запроса– реализуется выполнение закодированного плана и получается результат запроса. (для примера получается виртуальная (временная) таблица
Структура языка SQL(типы команд):
-
Язык определения данных (DDL – Data Definition Language) – команды создания (удаление, изменение структуры) объектов базы данных (таблицы, триггеры и т. д.) Create, Drop, Alter
-
Язык изменения данных (DML – Data Manipulition Language) – команды для обработки записей (т.е. метаданных). Insert, Delete, UpDate, Select, Commit, RollBack,
-
Команды администрирования базы данных – команды по разграничению прав и архивированию данных GRAND, Revoke
Типы данных используемых в SQL
-
-
Smallint – короткое целое число размером 2 байта с диапазоном — 3200 + 3200;
-
Integer – целые числа размером 4 байта — 2.000000000 +2.000000000;
-
Float – число с плавающей точкой;
-
Date – формат дата/время размер 4 – 6 байт;
-
Char (N)– текстовое значение, где N – максимально допустимое количество символов
-
Основные команды SQL
Имя
|
Тип языка
|
Название
|
Синтаксис
|
Create table
|
DDL
|
Создание таблицы в базе данных
|
Create table имя таблицы (имя поля1 характеристики поле1, остальные поля
Primary key (имя поля))
|
Drop table
|
Удаление таблицы
|
Drop table имя таблицы
|
|
Alter table
|
Изменение структуры таблицы
|
Alter table имя таблицы Опция имя поля
|
|
Delete
|
Удаляет запись из одной таблицы
|
Delete from имя таблицы
|
|
Insert
|
Добавление новых значений в базу данных
|
Insert Into имя таблицы (список полей) VALUES (список значений)
|
|
UpDate
|
Изменение значения в записях таблицы
|
UpDate имя таблицы
Set имя поля = новое значение
|
|
Commit
|
Сохраняет результаты выполнения транзакции
|
Commit
|
|
RollBack
|
Отказ от сохранения результатов транзакции
|
RollBack
|
|
Select
|
Простая выборка данных
|
Select список полей from список таблиц опции
|
Примечание (CreateTable):таблица создается пустая, только структура, ключевые поля является не обязательным.
Характеристики полей:
-
Тип данных (тип Char требует указание длины);
-
Ограничения хранимых значений (Check). Check ((Value>=2)) или Check ((mark>=2));
-
Требования к пусным значениям поля, т.е. является ли обязательным и не может хранить пустые значения. (для ключевых полей надо not null)
Пример: Create Tablestudent (nomer integer not null Check (Value>0), name char(20), primary key (nomer))
Примечание (DropTable):если в удаляемой таблице находятся записи, то они не нуждаются в предварительном удалении. Имя удаляемой таблицы должно быть в базе данных.
Пример:DropTablestudent;
Примечание (AlterTable):действия по изменению структуры таблицы.
-
Добавить новое поле: ADD имя нового поля характеристики;
-
Удаление поля: Drop имя существенного поля;
-
Изменение структуры существенного поля: Alter имя поля характеристики.
Пример:В таблицу «Студент» добавить поле fam(20), удалить поле fioи добавить ограничения номера не меньше 100.
Alter Tablestudent
ADD fam char(20),
Drop name,
Alter nomer integer not null check(Value > = 100);
Примечание (Delete):если в дополнительных параметрах не указано, то удаляются все записи. Если в удалении нуждаются некоторые записи, то в конец команды записывается условие и если оно выполняется, запись будет удалена.
DeleteFrom имя таблицы WHERE условия выборки записи
Пример:удаление из таблицы studentвсе записи о студентах с фамилией Иванов
DeleteFrom student
WHEREfam =”Иванов”
Пример:удалить всех студентов с двухзначными номерами
DeleteFrom student
WHERE (nom > = 10)
Примечание (Insert):список полей указывается в любом порядке разделительными запятыми. А список значений для нового поля указывается в том же порядке, что и списке полей. Так как происходит проверка на соответствие типов.
Пример:добавить в таблицу студента Сидорова с номером 520
Insert Intostudent (Fam, nomer) VALUES(‘Сидоров’, 520)
Примечание (UpDate):изменять можно значение не всех записей, только неуоторых записи. Для этого в конец команды надо дописать WHEREусловие
Пример:изменить фамилию для студента с номером 520 на Иванов
UpDatestudent
Setfam=‘Иванов’
WHEREnomer=520;
Примечание (Select):Selectсоздает на экране виртуальную таблицу, колонки которой соответствуют полям в перечисленном списке полей.
Пример:вывести список студентов с указанием фамилии и группы.
Selectfam, group FROMstudent;
-
Если нужно вывести все поля из таблицы
Select*FROMstudent
-
При необходимости можно отфильтровать отображаемые записи по какому-либо условию. Для этого в конец команды надо дописать WHERE условие
Select* FROMstudent WHEREnomer<520 span=»»></520>
-
Е сли необходимо вывести поля из нескольких таблиц, то они должны быть связаны следующим образом:
-
В главной таблице поле связи должно быть Primary Key
-
В команде связь устанавливается следующим образом:
1 способ:
Select имя поля FROM имя главной таблицы
INNERjoin имя подчиненной таблицы
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
WHEREgroup= “В-21”
-
Команды SQL позволяют отображать не только существующие поля, но и виртуальные поля существующие только при просмотре и рассчитанные по нужным формулам.
Select (создание вычисления полей)
Select выражение As подпись
Пример:в таблице товар вычислить стоимость на основании цены и количества, вывести на экран с названием.
Select name AS fio_stud, cena*kol As sum FROM tovar;
-
Отображенные данные можно отсортировать по выборному полю для этого,
ORDER B поле
Пример:отсортировать список фамилий по алфавиту.
ORDER By fam
ORDERBy поле DESС – по убыванию;
ORDERBy поле ASK– по возрастанию;
ORDER By поле1 ASK, поле2 DESK.
Пример: отсортировать студентов по группам.
Select fam, group FROM student
ORDER By group,Fam
-
Отображаемые данные могут быть сгруппированы по определенному полю, при этом поле группировки будет отображать только уникальные значения.
GROUP B поле
Пример: сгруппировать студентов по группам.
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
GROUPByname;
Avg– подсчет средне арифметического значения.
Пример:найти среднюю цену каждого товара.
Select name, Avg(cena) FROM Tovar
GROUP By name;
Min, max– минимум и максимум.
Пример:Найти наименьшую цену каждого товара
Select name, Min (cena) From Tovar GROUP By name;