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 запроса:
Select fam, grupаFrom stud Where mark=5; fam, grupа From stud Where mark=5;
Синтаксический анализ проверяет корректность текста 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;