Файл: Учебное пособие СанктПетербург 2017.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.11.2023

Просмотров: 177

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

8.1 Структурированный язык запросов Transact-SQL
Язык SQL на сегодняшний день является стандартом языков манипули- рования реляционными данными. Разработка языка началась в середине 70-х годов компанией IBM. Первоначально язык был назван SEQUEL (Structured
English Query Language – структурированный английский язык запросов), од- нако в 1980 году был переименован в SQL (Structured Query Language – струк- турированный язык запросов). В настоящее время действует уже шестая вер- сия стандарта SQL:2008.
В данном учебном пособии рассматривается диалект Transact-SQL, реа- лизованный в Microsoft SQL Server.
В соответствии со стандартом все команды SQL определены в подразделы:
Data Definition Language (DDL) язык определения данных содержит ко-манды создания, изменения и удаления объектов базы данных, таких как таблицы, индексы, представления и др.;
Data Manipulation Language (DML) –язык манипулирования данными содержит команды извлечения и изменения данных, хранящихся в таблицах;
Data Control Language (DCL) –язык управления данными включает в себя команды предоставления пользователю привилегий доступа или их отмены.
Идентификаторы
Идентификатор используется для определения объектов, таких как базы
данных, таблицы, столбцы, переменные.
В Transact SQL определено два класса идентификаторов:

обычные идентификаторы;

идентификаторы с разделителем.
Обычные идентификаторы не разделяются при использовании в инст- рукциях языка Transact-SQL.
Существуют следующие правила задания обычного идентификатора:

Идентификатор может включать любые символы, кроме запрещен- ных символов, к которым относятся: ― ―(пробел), ‖(―, ―)‖, ―{―, ―}‖,
―!‖, ―%‖, ―&‖, ―

‖, ―^‖, ―-―, ―.‖, ―\‖, ― ‗ ― (апостроф).

В идентификатор не должны входить слова, являющиеся зарезерви- рованными.

Первым символом в идентификаторе может быть:

буква латинского, национального алфавита или символ «_»;

символ ―@‖ в идентификаторах временных переменных или сим- вол ―#‖ в идентификаторах временных таблиц и хранимых про- цедур.
Длина идентификатора от 1 до 128 символов.

93
Идентификаторы, не соответствующие правилам формата обычных идентификаторов, называются идентификаторами с разделителем. В качестве разделителей могут быть использованы квадратные скобки ([ ]) или двойные кавычки ("). Например:
[номер группы], [% вклада] или
"номер группы", "% вклада"
Один и тот же идентификатор может использоваться в качестве имен объектов, которые хранятся в разных базах данных. Разным объектам одной базы данных также может быть присвоено одно имя, если они принадлежат разным пользователям. В этом случае для обращения к объекту нужно ис- пользовать полное имя. Полное имя объекта состоит из четырех идентифика- торов:
[имя_сервера.][база_данных].[имя_схемы].имя_объекта
Имя сервера, базы данных и схемы называются квалификаторами име- ни объекта.
Схема является коллекцией объектов базы данных, которыми владеет
один пользователь.
Некоторые квалификаторы могут быть опущены, их позиции отмеча- ются точками, например:
lti.студент
В примере текущий пользователь обращается к своему объекту сту- дент, хранящемуся в базе данных lti.
Константы
Константами называются постоянные величины, значения которых не
могут быть изменены.
Допускается использование числовых, десятично-шестнадцатеричных и алфавитно-цифровых констант.
Числовые константы включают все целые числа, числа с фиксирован- ной или плавающей точкой. Примеры числовых констант:
10; -15; 105.25; -0.48E3; 0,25E-2
Строковая константа представляет собой последовательность симво- лов, заключенных в одинарные кавычки (апострофы).
Константы разрешается указывать явно в некоторых командах языка и в выражениях.
Выражения
Выражение – это совокупность операндов и операторов.
Операндами в выражении могут быть: константы, скалярные функции, имена столбцов таблицы, переменные и подзапросы. Подзапрос – это запрос, данные которого используются другим запросом.


94
К арифметическим операторам относятся унарные операторы: (-) для обозначения отрицательных чисел и (+) для обозначения положительных чи- сел. К бинарным арифметическим операторам относятся: сложение (+), вы- читание (-), умножение (*), деление (/), остаток от деления (%).
Над операндами строкового типа можно выполнять единственную опе- рацию (+) – конкатенацию (сложение или слияние строк).
Для сравнения значений используются следующие операторы: равно -
―=‖, больше - ―>‖, меньше - ―<‖, меньше или равно - ―<=‖, больше или равно
- ―>=‖, не равно - ―<>‖.
Операторы сравнения можно использовать в логических выражениях для задания ограничений и условий.
Ограничения и условия могут быть заданы сложными логическими вы- ражениями. Сложные логические выражения строятся с использованием ло- гических операторов: NOT – отрицание, AND – конъюнкция и OR – дизъ- юнкция. К логическим операторам относятся также:
BETWEEN – проверяет, принадлежит ли значение указанному диапазо- ну;
LIКE – проверяет, соответствует ли значение указанному шаблону; IN – проверяет, присутствует ли значение в указанном списке;
ISNULL – выполняет проверку на отсутствие значения;
ALL – выполняет проверку для набора данных, если условие выполне- но для всего набора данных, возвращает значение TRUE;
ANY – выполняет проверку для набора данных, если условие выполне- но хотя бы для одного элемента из набора данных, возвращает значение
TRUE;
EXISTS – проверяет существование данных.
Типы данных
Тип данных определяет, какого рода данные и какого диапазона значений
могут храниться в переменной или в столбце таблицы.
SQL Server предоставляет набор системных типов данных, определяю- щих все типы данных, которые могут использоваться в нем. Типы данных в
SQL Server объединены в следующие категории: точные числа, приблизи- тельные числа, дата и время, символьные строки, двоичные данные и прочие типы. В табл. 8 – 11 описаны свойства некоторых системных типов данных.
В дополнение к рассмотренным в таблицах типам важным является тип
table. Этот тип относится к категории прочих и применяется, главным обра- зом, для временного хранения набора строк, возвращаемого в качестве ре- зультирующего набора. Переменные типа table могут использоваться в функциях и хранимых процедурах.

95
Таблица 8 – Свойства точных типов
1
Десятичные типы предназначены для хранения чисел с фиксированным ко- личеством знаков до и после запятой. Размер числа задается двумя значе- ниями: точностью (p – общее количество цифр) и масштабом (s – количество цифр после запятой).
Таблица 9 – Свойства приблизительных типов
2
Аргумент n определяет количество разрядов мантиссы. Если n имеет зна- чение от 1 до 24, то поддерживается точность 7 цифр, а если n от 25 до 53, то поддерживается точность 15 цифр.


96
Таблица 10 – Свойства типов даты и времени
С данными типа дата и время можно выполнять арифметические опе- рации сложения и вычитания, и операции сравнения.
Таблица 11 – Свойства символьных типов данных
Функции SQL
Встроенные функции SQL предназначены для облегчения и ускорения обработки данных. Особенностью является то, что они могут указываться непосредственно в выражении. Все встроенные функции можно условно раз-

97 делить на группы: математические функции, строковые функции, функции для работы с датами и др.
Приведем функции преобразования типов данных:
CAST (
значение AS тип_данных)
CONVERT(
тип_данных, значение)
Аргумент значение в функциях задает величину, которую необходимо преобразовать.
8.1 Команды языка определения данных
Язык определения данных содержит команды, которые предназначены для создания (CREATE), изменения (ALTER) и удаления (DROP) базы дан- ных и ее объектов.
Создание таблицы
Создание новой таблицы выполняется командой CREATE TABLE. В команде выполняется описание структуры таблицы, каждого столбца табли- цы и ограничений целостности, которые должны устанавливаться для табли- цы.
Синтаксис команды:
CREATE TABLE имя_таблицы
({ описание_столбца | имя_вычисляемого_столбца
AS
выражение | ограничения_целостности_уровня_таблицы} [, ...] )
Значение вычисляемого столбца определяется выражением, которое хранится в структуре таблицы. Изменять данные вычисляемого столбца нельзя, поэтому для него не могут быть установлены ограничения целостно- сти NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и значение DE-
FAULT.
Синтаксис описания столбца таблицы имеет вид: имя_столбца тип_данных [(размер)]
[{
DEFAULT
значение_по_умолчанию |
IDENTITY
[
(значение, шаг)]}]
[ограничения_целостности_уровня_столбца]
Где
DEFAULT – позволяет задать значение, присваиваемое столбцу по умолчанию во вновь добавляемой строке;
IDENTITY – указывает, что создается столбец с поддержкой автомати- ческой нумерации (столбец-счетчик). IDENTITY может быть задано только для тех столбцов, которые имеют целочисленные или десятичные типы.

98
Вставка значений в столбец IDENTITY запрещена. В таблице может быть оп- ределен только один столбец-счетчик.
Существует две группы ограничений целостности, обрабатываемых
СУБД:

декларативные ограничения целостности, которые объявляются при создании или изменении таблицы;

процедурные ограничения целостности, которые обрабатываются триг- герами.
Декларативные ограничения целостности могут быть определены на уровне таблицы или на уровне столбца. Ограничения на уровне столбца при- меняется только к одному столбцу. Каждому декларативному ограничению целостности может быть присвоено имя.
Описание ограничений уровня столбца имеет следующий синтаксис:
[ CONSTRAINT имя_ограничения]
{ { PRIMARY KEY | UNIQUE | NOT NULL }
| FOREIGN KEY REFEREN
CES имя_таблицы(имя_столбца)
[ ON UPDATE { NO ACTION|CASCADE| SET NULL|SET DEFAULT } ] [
ON DELETE { NO ACTION|CASCADE|SET NULL|SET DEFAULT } ]
|CHECK логическое_выражение }
Имя ограничения целостности данных должно быть уникальным в пре- делах базы данных. Рассмотрим ограничения, которые могут быть определе- ны на уровне столбца:

ограничение по первичному ключу PRIMARY
KEY
. Все значения пер- вичного ключа таблицы должны быть уникальными и отличаться от значения NULL. В таблице может быть только один первичный ключ;

ограничения уникальности значения столбца UNIQUE. Это означает, что в таблице не может быть двух записей, имеющих одно и то же зна- чение в этом столбце;

ограничение NOT NULL, запрещающее хранить в столбце значение
NULL;

ограничение по внешнему ключу FOREIGN KEY (ограничение ссы- лочной целостности). Для столбца, который является внешним ключом, с помощью REFERENCES указывается имя таблицы и имя столбца этой таблицы, на которые указывает ссылка. Такая таблица является главной (родительской) по отношению к создаваемой таблице. Для столбца главной таблицы, по значениям которого устанавливается связь, должно быть установлено ограничение PRIMARY
KEY.

Если между таблицами устанавливается ссылочная целостность, то не- обходимо указать правила изменения связанных данных. Предложения
ONUPDATE и ON DELETE для внешнего ключа определяют сле- дующие правила изменения связанных данных:


99

NO ACTION – разрешает изменять (удалять) только те значения в главной таблице, которые не имеют соответствующих значений внеш- него ключа в дочерней таблице. Это правило действует по умолчанию;

CASCADE означает, что каждое значение внешнего ключа дочерней таблицы будет автоматически изменяться (удаляться) при модифика- ции значения первичного ключа родительской таблице;

SETNULL означает, что в случае изменения (удаления) первичного ключа родительской таблицы, во всех ссылающихся строках дочерней таблицы значениям внешнего ключа будут автоматически присвоены значения NULL;

SET DEFAULT означает, что в случае изменения (удаления) первично- го ключа родительской таблицы, во всех ссылающихся строках до- черней таблицы значениям внешнего ключа будут автоматически при- своены значения по умолчанию.
Если первичный или внешний ключи таблицы являются составными, то соответствующие ограничения должны задаваться на уровне таблицы.
Приведем запросы на создание таблиц учебной базы данных «Универ- ситет», проектирование которой рассматривалось в разд. 3.3. Будем руково- дствоваться инфологической моделью БД приведенной на рис. 14 и описа- ниями логической структуры таблиц (табл. 2 – 5).
Как видно из схемы БД (рис. 14) таблица ФАКУЛЬТЕТ является неза- висимой таблицей, поэтому она создается первой. Запрос на создание табли- цы с учетом описания логической структуры в табл. 4 будет иметь вид:
CREATE TABLE факультет
(
[номер факультета] tinyint PRIMARY KEY, [наименование фа- культета] char(50) )
Таблица
СПЕЦИАЛЬНОСТЬ также является независимой, ее соз- даем второй. При создании запроса использует описание логической структуры в табл. 5.
CREATE TABLE
[специальность]
(
[номер специальности] int PRIMARY KEY,
[наименование специальности] char (60),
[стоимость обучения] [money])
Таблица ГРУППА является зависимой от ФАКУЛЬТЕТА и СПЕЦИ-
АЛЬНОСТИ таблицей. Используем таблицу 3 при создании запроса и учтем, что столбцы номер факультета и номер специальности являются внешними ключами:
CREATE TABLE [
группа] (
[номер группы] smallint PRIMARY KEY,
[номер специальности] int FOREIGN KEY REFERENCES

100 специальность(номер специальности) ON DELETE CASCADE ON
UPDADE CASCADE,
[номер факультета] tinyint FOREIGN KEY REFERENCES факультет(номер факультета) ON DELETE CASCADE ON
UPDADE CASCADE, [номер курса] tinyint )
Таблица СТУДЕНТ является зависимой от ГРУППЫ таблицей. На ос- новании данных таблицы 2 составим запрос. Также учтем, что столбец но- мер группы является внешними ключами:
CREATE TABLE [
студент] (
[номер зачетной книжки] char(8) PRIMARY KEY,
[номер группы] smallint NOT NULL FOREIGN KEY
REFERENCES группа(номер группы),
[фамилия] char(15) NOT NULL ,
[дата рождения] datetime NOT NULL ,
[коммерческий] bit NOT NULL ,
[имя регистрации] char(9))
Изменение структуры таблицы
Изменение структуры таблицы выполняется командой ALTER
TABLE.
С помощью команды можно выполнять изменение свойств существующих столбцов, удалять их или добавлять в таблицу новые столбцы, управлять ог- раничениями целостности, как на уровне столбцов, так и на уровне таблицы.
Назначение многих параметров и ключевых слов аналогично назначению со- ответствующих параметров и ключевых слов команды CREATE TABLE.
Удаление таблицы
Удаление таблицы выполняется при помощи команды DROP TABLE.
Синтаксис команды:
DROP TABLE таблица
При удалении таблицы СЛЕДУЕТ учитывать связи, установленные в базе данных между таблицами. Если на удаляемую таблицу с помощью огра- ничения целостности FOREIGN KEY ссылается другая таблица, то СУБД не разрешит ее удаление.
8.2 Команды языка манипулирования данными
Выборка данных из таблицы
Выборка данных из таблицы (таблиц) выполняется командой
SELECT. При выполнении команды осуществляется поиск указанной таб-


101 лицы или таблиц, извлечение данных, соответствующих условию отбора, их группировка или сортировка в указанном порядке и возвращение в виде таблицы запроса. Команда SELECT не изменяет данные в базе данных.
Команда имеет синтаксис:
SELECT [
предикат] список_столбцов
FROM имена_таблиц
[WHERE условие_отбора]
[GROUP BY критерий_группировки ]
[HAVING критерий_отбора]
[ORDER BY критерий_столбца]
Команда состоит из шести разделов. Два первых раздела являются обя- зательными, остальные включаются по необходимости.
В разделе SELECT указываются элементы данных, которые будут воз- вращены в результате запроса. Раздел имеет следующий синтаксис:
SELECT [ALL|DISTINCT] [TOP n [PERCENT]] список_столбцов.
Аргумент список_столбцов определяет список и происхождение столб- цов (полей), значение которых будут возвращены в результате выполнения команды. Список может быть задан одним из следующих способов:
{ [таблица.]* | [представление. ]* | [псевдоним.]* } – что означает вы- брать все столбцы из таблицы или представления с указанием их имени или псевдонима. Псевдонимом является другое имя таблицы (представления), ко- торое может быть использовано в запросе для ссылки на таблицу.
{[таблица.]столбец выражение}[AS псевдоним][,...] –с помощью этого способа можно указать имена столбцов, значение которых требуется полу- чить в результате выполнения команды. Если имя столбца уникально среди указанных таблиц, то перед именем столбца имя таблицы можно не указы- вать. С помощью выражения можно задать вычисляемый столбец. Значение такого столбца будет вычисляться во время выполнения запроса. Столбцам таблиц или вычисляемым полям можно присваивать псевдонимы. Они зада- ются по правилам именования объектов. Псевдонимы столбцов –это имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице результатов.
В разделе SELECT могут быть указаны предикаты ALL или DISTINCT.
Предикат – это выражение, которое может быть истинным,
ложным или неопределенным.
Предикат ALL используется для выбора всех строк, удовлетворяющих условию отбора, и действует по умолчанию.
Предикат DISTINCT используется для исключения строк, содержащих повторяющиеся значения в столбце.

102
Аргумент TOP n [PERCENT] указывает на необходимость выбора не всех строк, а только первых n.
Раздел FROM определяет имена одной или нескольких таблиц или представлений, которые содержат отбираемые данные.
Синтаксис раздела:
FROM
{таблица [AS псевдоним]|представление [AS псевдоним][,…]}
Раздел WHERE позволяет задать правило отбора строк из таблиц, пе- речисленных в разделе FROM для включения их в результат выполнения ко- манды SELECT.
Синтаксис раздела:
WHERE условие_отбора
Условие_отбора определяет логическое условие,при выполнениико- торого строка будет включена в результат.
Стандартом определены следующие предикаты (условия отбора):
предикат сравнения –проверяемое значение сравнивается со значени- ем выражения;
предикат «между» –проверяется,попадает ли значение в указанный диапазон;
предикат «в» –проверяется,совпадает ли значение с одним из значе- ний заданного множества;
предикат «как» –проверяется,соответствует ли строковое значение заданному шаблону;
1   ...   4   5   6   7   8   9   10   11   12