
Лекция 4
Введение в язык запросов SQL
Для обращения к данным в MS SQL Server используется язык структурированных запросов SQL (Structured Query Language).
Этот язык используется также для создания, редактирования и удаления самой базы данных и ее отдельных объектов.
Диалекты языка SQL, используемые в различных реляционных базах данных, имеют некоторые различия, но в целом схожи.
Диалект SQL, который используется в Microsoft SQL Server, называется Transact-SQL (T-SQL).
Общие правила синтаксиса SQL очень просты:
Язык SQL не чувствителен к регистру.
Если используется программа (процедура), содержащая несколько операторов SQL, то в конце каждого оператора ставится точка с запятой «;».
Если используется один оператор, точка с запятой в конце не обязательна.
Комментарий может записываться в стиле Си /*<комментарий>*/>, а в некоторых системах – и в стиле Pascal: {<комментарий>}.
Вот, собственно, и все правила.
Язык SQL состоит из двух групп операторов:
Операторы DDL (Data Definition Language)
Create DataBase
Create Table
Alter DataBase
Alter Table
Drop
Операторы DML (Data Manipulation Language)
Select
Insert
Delete
Update
Commit
Rollback
В SQL выборка данных осуществляется командой select. С ее помощью вы можете получать строки из одной или нескольких таблиц базы данных.
Структура команды select
Одна из форм оператора SELECT имеет следующий упрощенный синтаксис:
SELECT [ALL | DISTINCT] <список имен полей или выражений над атрибутами и константами>
[AS <псевдоним результата выбора>]
FROM <список таблиц>
[ WHERE <условие отбора> ]
[GROUP BY <список атрибутов> ]
[HAVING <условие> ]
[UNION <выражение с оператором SELECT> ]
[ORDER BY <список атрибутов> ]
[COMPUTE <агрегатная функция>) [BY <список атрибутов>] ];
Список полей указывается через запятую.
Результат запроса представляет собой виртуальную таблицу.
Итак, команда select состоит из следующих основных частей:
список выборки;
from - определяет, откуда выбирать данные;
where - определяет условия выборки данных;
group by - определяет условия группировки данных;
having - определяет условия выборки данных при использовании агрегатных функций;
UNION - определяет тип соединения между участвующими в запросе таблицами;
order by - определяет условия сортировки.
Все части команды, кроме списка выборки, являются необязательными. Эти части следуют в строго определенном порядке.
В ключевых словах SQL регистр символов не имеет значения.
Сервер может быть настроен так, чтобы в именах таблиц и столбцов различался или не различался регистр символов. Но в целом лучше записывать имена полей в том регистре, в котором они заданы в базе данных.
В SQL Server имена объектов и полей таблиц могут заключаться в квадратные скобки, особенно в том случае, если в именах присутствуют пробелы.
Например,
SELECT id_товара, Название FROM Товары
После выполнения команды select вы получаете от SQL Server итоговый набор - таблицу с результатами запроса. Он может содержать один или несколько столбцов, пустые заголовки столбцов, а также строки с данными.
Рассмотрим подробно каждую из частей команды select.
Список выборки
В списке выборки указываются имена столбцов, которые включаются в итоговый набор команды select.
Столбцы возвращаются в порядке их перечисления в списке выборки.
Например:
SELECT Название_фирмы, Адрес FROM Поставщики
Итоговый набор может содержать константы, столбцы, функции, выражения и производные столбцы (результаты выполнения расчетов или подзапросов).
Пример.
SELECT '123', Товар, @@SERVERNAME, Количество_ед_товара*Цена_ед_товара FROM Поставки
Эта команда возвращает
столбец констант ‘123’,
столбец базы данных с именем Товар,
столбец, содержащий значение функции @@servername,
производный столбец Количество_ед_товара*Цена_ед_товара
Чтобы список выборки содержал все столбцы таблицы, можно либо перечислить имена всех столбцов, либо включить в список выборки символ звездочки (*).
Символ * может быть указан наряду с ограничениями, именами столбцов и производными столбцами.
Следующий пример демонстрирует использование звездочки в команде select:
SELECT * FROM Поставки
SELECT * , @@SERVERNAME, Количество_ед_товара*Цена_ед_товара FROM Поставки