Язык структурированных запросов SQL
План
- Введение в SQL.
- Обзор основных инструкций SQL.
- Приемы создания запросов SQL.
Язык SQL (Structured Query Language – язык структурированных запросов) был создан компанией Microsoft в конце 70-х годов и получил через некоторое время широкое распространение. Он позволяет формировать весьма сложные запросы к базам данных.
Общие правила синтаксиса SQL очень просты. Язык SQL нечувствителен к регистру, так что, например, оператор Select можно писать и Select, и SELECT, и select. Если используется программа из нескольких операторов SQL, то в конце каждого оператора ставится точка с запятой «;». Впрочем, если используется всего один оператор, то точка с запятой в конце необязательна. Комментарий может писаться или так /**/ или {}. Вот, собственно, и все правила.
К основным директивам (операторам) SQL которые выполнялись практически, на любом SQL сервисе относятся следующие директивы:
- CREATE-создание объектов баз данных (например; таблиц).
- ALTER- изменение объектов БД.
- INSERT-добавление новых записей в уже существующие в БД таблицы.
- DELETE- удаление записей из таблицы.
- SELECT - выборка данных из существующих в БД таблиц по определённым критериям.
- UPDATE - изменение данных в существующих записях созданных таблиц.
Директива CREATE.
CREATE TABLE – создать таблицу.
Общий синтаксис этой директивы выглядит след образом:
CREATE TABLE Имя_таблицы ( Имя_столбца1 Тип_данных (размер_данных), Имя_столбца2 Тип_данных (размер_данных), . . .),
Имя_таблицы – это имя создаваемой таблицы.
Имя_столбца – это имена необходимых столбцов в создаваемой таблице.
Тип_данных – задается для каждого столбца и определяется данными, которые будут храниться в столбце.
Для некоторых типов данных в обязательном порядке необходимо задать Размер_данных.
Размер_данных определяет, какое количество символов будет храниться в каждой записи этого столбца.
Имена таблиц должны быть уникальными, т.е. в одной , базе не может быть двух таблиц с одинаковыми именами. В каждой таблице имена столбцов должны быть уникальными.
В качестве имен таблиц, столбцов и др. объектов нельзя использовать зарезервированные слова SQL-языка. Например, TABLE, INSERT, DELETE и др.
Пример.
CREATE TABLE Tabl1(NUM Integer, FIO Char(50), FOTO Image);
В результате выполнения этого запроса будет создана таблица с названием Tabl1, в которой 3 столбца NUM, FIO, FOTO.
Этот SQL-запрос можно запускать на выполнение всего 1 раз.
Директива ALTER-
позволяет модифицировать созданный объект. С помощью этого оператора можно добавлять и удалять столбцы таблицы.
Синтаксис оператора ALTER TABLE для добавления новых столбцов выглядит следующим образом:
ALTER TABLE Имя_таблицы
ADD COLUMN
Имя_столбца Тип_данных (размер_данных),
ADD COLUMN
Имя_столбца Тип_данных (размер_данных),
…… .
ADD COLUMN
Имя_столбца Тип_данных (размер_данных);
Синтаксис оператора ALTER TABLE для удаления существующих столбцов из таблицы выглядит так:
ALTER TABLE Имя_таблицы
DROP COLUMN
Имя_столбца;
В этих директивах:
ALTER TABLE –зарезервированные слова SQL-запроса,
Имя_таблицы – имя той таблицы, которая будет изменяться,
ADD COLUMN, DROP COLUMN - зарезервированные слова SQL-запроса,
ADD –создание столбца,
DROP – удаление столбца,
Имя_столбца – имена столбцов, с которыми будут выполняться действия (создание, удаление),
Тип_данных – для каждого вновь создаваемого столбца указать тип данных. Для некоторых типов данных указать размер.
Удаляя столбцы из таблицы, следует иметь в виду, что все данные в удаляемом столбце тоже удаляются. Нельзя удалить из таблицы все столбцы, необходимо оставить хотя бы один столбец.
Пример.
Запрос 1.
CREATE TABLE Tabl1 Tovar Char (32);
Запрос 2.
ALTER TABLE Tabl1
ADD COLUMN Zena Integer,
ADD COLUMN Kolichestvo Integer,
ADD COLUMN Summa Integer;
Запрос 3.
ALTER TABLE Tabl1
DROP COLUMN Summa;
Директива DROP TABLE-
позволяет удалять таблицу. Синтаксис следующий:
DROP TABLE Имя_таблицы,
где DROP TABLE – зарезервированные слова,
Имя_таблицы – имя удаляемой таблицы.
После запуска такого SQL-запроса таблицы удаляются безвозвратно вместе со всеми данными, накопленными в них.
Пример.
DROP TABLE Tabl1.
Директива INSERT-
позволяет вставлять в таблицу новые записи. Синтаксис следующий:
INSERT INTO Имя_таблицы (Имя_столбца1, Имя_столбца2, …)
VALUES (значение1, значение2, …);
INSERT INTO - зарезервированные слова,
Имя_таблицы – имя той таблицы, в которую будет добавлена новая запись,
Имя_столбца1,…- в круглых скобках перечисляется список столбцов, имеющихся в таблице,
VALUES - зарезервированное слово,
Значение1, значение2,…- в круглых скобках перечисляются значения , которые присвоены перечисленным ранее столбцам.
Пример.
Запрос 1. CREATE TABLE Сотрудники
(Name Char (16), Famil Char (24), Vozrast Integer, Ind_Cod Integer);
Запрос 2. INSERT INTO Сотрудники
(Name, Famil, Vozrast, Ind_Cod) Values (’Ахмед’,’Магомедов’,20,100);
Запрос 3. INSERT INTO Сотрудники
(Name, Famil) Values (Гаджи, Юнусов);
В каком порядке перечисляются столбцы, в таком порядке и должны перечисляться присваиваемые значения.
Т.е. после выполнения этих команд получим:
Name
Famil
Ахмед
Гаджи
Магомедов
Vozrast
Юсупов
Ind_Cod
20
100
Возможен и следующий синтаксис:
INSERT INTO Имя_таблицы
VALUES (Значение1, значение2, …);
В нем пропускается список столбцов и сразу следует список значений.
При такой записи сначала анализируется таблица, в которую добавляется запись, а затем по порядку (начиная с 1-го столбца) подставляются значения. Количество значений должно быть равно количеству столбцов в таблице.
Директива DELETE (удалить)-
имеет следующий синтаксис:
DELETE FROM Имя_таблицы
[WHERE Условия_поиска],
где DELETE FROM – зарезервированные слова SQL-языка,
Имя_таблицы – имя той таблицы, из которой удаляются записи,
WHERE– зарезервированное слово SQL-языка, которое означает, что следующее за ним выражение определяет условия поиска записей в таблице,
Условия_поиска – это выражение, определяющее для директивы DELETE критерии записей, которые необходимо удалить.
Директива DELETE удаляет записи из таблицы безвозвратно, без права восстановления. Если в этой директиве отсутствует слово WHERE и условия поиска, то из таблицы удаляются все записи.
Пример.
Создадим таблицу со столбцами ID, Famil, Name, tel_rab, tel_dom, gruppa. Для этого
CREATE TABLE Svedeniya
(ID integer, Famil Char(16), Name Char(24), tel_rab Char(8), tel_dom Char(8), gruppa integer);
1)Удалим из таблицы всех студентов из группы 5:
DELETE FROM Svedeniya
WHERE gruppa=5.
2)Удалить из таблицы всех студентов, чья фамилия Магомедов:
DELETE FROM Svedeniya
WHERE Famil =’Магомедов’;
3)Чтобы полностью очистить таблицу от всех записей, надо:
DELETE FROM Svedeniya.
Директива SELECT (выборка данных)
имеет следующий синтаксис:
SELECT Столбец1 [Столбец2, Столбец3, …]
[INTO Новая таблица]
FROM Таблица1 [Таблица2, Таблица3, …]
[WHERE Условия_поиска]
[GROUP BY выражение (условие) группировки]
[ORDER BY выражение упорядочивания],
где SELECT - зарезервированное слово SQL-языка,
Столбец1, Столбец2,… -это те столбцы, которые будут отображаться в результирующей таблице запроса,
INTO - зарезервированное слово SQL-языка, которое предписывает директиве SELECT сохранить результирующий набор данных в Новую таблицу,
FROM - зарезервированное слово SQL-языка, после которого следует определение объединения таблиц, из которых выбираются запрашиваемые данные,
WHERE - зарезервированное слово SQL-языка, которое указывает выбирать только те данные, которые удовлетворяют условиям поиска,
GROUP BY - зарезервированное слово SQL-языка, выполняющее группировку данных в результирующем наборе записей, в соответствии с условиями группировки,
ORDER BY - зарезервированное слово SQL-языка, выполняющее упорядочивание данных в результирующем наборе данных в соответствии с Выражением_упорядочивания.
Директива SELECT – служит для отбора данных из одной или нескольких таблиц и предоставление их в виде результирующего набора записей.
Пример.
Создадим таблицу, содержащую Номер, Фамилию, Имя, Дату_рождения, Город, Группу.
CREATE TABLE Student
(Номер Integer,
Фамилия Char (30),
Имя Char (15),
Дата_рождения Date,
Город Char (30),
Группа Integer);
Если в запросе необходимо выбрать значения всех столбцов, то можно вместо перечисления всех столбцов использовать символ «*».
Например, SELECT* FROM Student;
Если из таблицы надо выбрать только столбцы Фамилия и Имя, то
SELECT Фамилия, Имя FROM Student;
Чтобы выбрать студентов махачкалинцев из группы 6, надо создать запрос
SELECT* FROM Student
WHERE Город =’Махачкала’ and Группа=6;
WHERE определяет, какие строки из указанной таблицы должны быть выбраны.
больше,= больше или равно, не равно, а также логические операторы AND, OR, NOT). " width="640"
В условиях могут использоваться операции сравнения (= равно, больше,= больше или равно, не равно, а также логические операторы AND, OR, NOT).
Выбрать не махачкалинцев
SELECT Город FROM Student;
получим таблицу, в которой встречаются одинаковые строки.
Для исключения из результирующей таблицы повторяющихся значений используют ключевое слово DISTINCT (отличный).
Поэтому предыдущий запрос правильно писать в виде:
SELECT DISTINCT Город FROM Student.
Противоположное действие оказывает ключевое слово ALL (все), т.е. при его использовании повторяющиеся строки включаются в состав выходных данных. Этот режим действует по умолчанию, поэтому в запросах для этих целей ALL практически не используется.
ORDER BY – позволяет упорядочивать данные в результирующей таблице. При этом можно задать возрастающую (ASC) и убывающую последовательность (DESC) для каждого столбца.
Запрос, сортирующий по убыванию Фамилий студентов:
SELECT* FROM Student
ORDER BY Фамилия DESC;
ORDER BY может использоваться с GROUP BY для упорядочения групп записей. При этом ORDER BY в запросе всегда должен быть последним.
SELECT Фамилия, Группа FROM Student
GROUP BY Группа
ORDER BY Фамилия.
Агрегирование и групповые операции.
Агрегирующие функции позволяют получать из таблицы сводную (агрегированную) информацию, выполняя операции над группой строк таблицы. Для задания в SELECT-запросе агрегирующих операций используются следующие ключевые слова:
COUNT – определяет количество строк или значений поля, выбранных с помощью запроса;
SUM – вычисляет сумму выбранных значений;
AVG – вычисляет среднее из выбранных значений;
MAX, MIN – вычисляет наибольшее и наименьшее значение.
В SELECT-запросе эти функции используются аналогично именам полей, при этом имена полей указываются как аргументы в скобках ().
Из предыдущего примера найти количество человек в таблице, т.е. подсчитать количество строк в таблице.
SELECT COUNT (*) FROM Student;
Найти количество студентов в каждой группе. Для этого надо сгруппировать все записи в столбце Группа и к каждой группе записей применить агрегирующую функцию:
SELECT COUNT (Фамилия) FROM Student
GROUP BY Группа;
Найти самого старшего человека в таблице:
SELECT Фамилия, MIN (Дата_рождения) FROM Student;
При необходимости часть сформированных с помощью GROUP BY групп может быть исключена с помощью предложения HAVING.
HAVING определяет критерий, по которому группы следует включать в выходные данные (аналогично WHERE, которое осуществляет это для отдельных строк).
1000; " width="640"
Пример . Пусть имеем таблицу с ФИО_заказчика, Сумма_заказа, Дата_заказа. Выбрать максимальные суммы заказов каждого заказчика, которые больше 1000р.
SELECT ФИО_заказчика, Дата_заказа, MAX (Сумма_заказа)
FROM Таблица1
GROUP BY ФИО_заказчика, Дата_заказа
HAVING MAX (Сумма_заказа)1000;
Директива UPDATE
изменяет данные в уже существующих записях существующих таблиц.
Синтаксис следующий:
UPDATE Имя_таблицы
SET Столбец1=Значение1 [Столбец2=Значение2, …]
WHERE Условия_поиска;
где Имя_таблицы – имя той таблицы, в которой должны быть изменены данные,
Столбец1, … , столбец n – имена существующих в таблице столбцов, которым присваиваются новые значения,
Значение 1,…, Значение n – SQL-выражения, возвращающие значения, присваиваемые соответствующим столбцам,
WHERE Условия_поиска – означает , выражение определяет выбор записей в таблице, в которых будут изменены данные.
Пример. Имеем таблицу Отдел с данными ФИО и Оклад. Увеличить данные в столбце оклад на 1,5%
UPDATE Отдел
SET Оклад=Оклад*1,5%;