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;