Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
17-06-2015_23-01-11 / Учебное пособие ИОБД_2013.doc
Скачиваний:
138
Добавлен:
15.02.2016
Размер:
2.9 Mб
Скачать

7.2. Функции sql

Встроенные функции SQL предназначены для облегчения и ускорения обработки данных. Особенностью является то, что они могут указываться непосредственно в выражении. Все встроенные функции можно условно разделить на группы.

Математические функции:

  • ABS(значение) – возвращает абсолютное значение числа;

  • Round(значение, точность) – возвращает числовое значение, округленное до указанного аргументом точность количества десятичных разрядов;

  • SIGN(значение) – возвращает минус, если число отрицательное, и плюс – в противном случае;

  • POWER(значение, степень) – возводит число в степень;

  • SQRT(значение) – извлекает квадратный корень числа;

  • CEILING (значение) – возвращает ближайшее целое число большее или равное значению;

  • -FLOOR(значение) – возвращает ближайшее целое число меньшее или равное значению.

Строковые функции:

  • ASCII(строка) – возвращает ASCII код первого символа строки;

  • CHAR(число)– возвращают символ по ASCII коду;

  • LEN (строка)– возвращает длину строки в символах, исключая конечные пробелы;

  • LTRIM(строка) / RTRIM(строка)- удаляет пробелы в начале/конце строки;

  • LEFT(строка, число)/ RIGHT(строка, число) – возвращает указанное аргументом число количество символов строки, начиная с левого/правого края;

  • SUBSTRING(строка, позиция, длина) – возвращает подстроку указанной длины из строки, начиная с указанной позиции;

  • LOWER(строка) / UPPER(строка) – возвращает строку, преобразованную в нижний / верхний регистр и т.д.

Функции для работы с датами:

  • GETDATE() – возвращает значение, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server;

  • DAY(значение_дата) –возвращает число из указанной даты;

  • MONTH(значение_дата) – возвращает номер месяца из указанной даты;

  • YEAR(значение_дата) – возвращает значение года из указанной даты;

  • DATENANE(часть, значение_дата) – возвращает символьную строку, представляющую указанную часть (Day, Month, Hour и т.д.) из указанной даты;

  • DATEPART(часть, значение_дата) – возвращает целое число, представляющее указанную часть (Day, Month, Hour и т.д.) из указанной даты.

Функции преобразования типов данных

  • CAST (значение AS тип_данных)

  • CONVERT(тип_данных, значение)

Аргумент значение в функциях задает величину, которую необходимо преобразовать.

7.3. Команды языка определения данных

Язык определения данных содержит команды, которые предназначены для создания, изменения и удаления базы данных и ее объектов.

Создание таблицы

Создание новой таблицы выполняется командой CREATE TABLE. В команде выполняется описание структуры таблицы, каждого столбца таблицы и ограничений целостности, которые должны устанавливаться для таблицы.

Синтаксис команды:

CREATE TABLE имя_таблицы ({ описание_столбца | имя_вычисляемого_столбца AS выражение | ограничения_целостности_уровня_таблицы} [, ...])

Именем таблицы является идентификатор длинной не более 128 символов.

Таблица может содержать вычисляемый столбец, тогда значение столбца определяется выражением, которое хранится в структуре таблицы. Изменять данные вычисляемого столбца нельзя, поэтому для него не могут быть установлены ограничения целостности NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и значение DEFAULT.

Синтаксис описания столбца таблицы имеет вид:

имя_столбца тип_данных [(размер)]

[{DEFAULT значение_по_умолчанию | IDENTITY [(значение, шаг)]}]

[ограничения_целостности_уровня_столбца]

Где:

DEFAULT - позволяет задать значение, присваиваемое столбцу во вновь добавляемой записи.

IDENTITY – указывает, что создается столбец с поддержкой автоматической нумерации (столбец-счетчик). В таблице может быть определен только один столбец-счетчик. Параметр значение задает начальное значение счетчика, а параметр шаг – шаг приращения. Если эти параметры не заданы, то они имеют значение 1. IDENTITY может быть задано только для тех столбцов, которые имеют целочисленные или десятичные типы. Вставка значений в столбец IDENTITY запрещена.

Существует две группы ограничений целостности, обрабатываемых СУБД:

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

- процедурные ограничения целостности, которые обрабатываются триггерами.

Декларативные ограничения целостности могут быть ограничениями на уровне таблицы и ограничениями на уровне таблицы. Ограничения на уровне столбца применяется только к одному столбцу. Каждому декларативному ограничению целостности может быть присвоено имя.

Описание ограничений уровня столбца имеет следующий синтаксис:

[CONSTRAINT имя_ограничения]

{{PRIMARY KEY | UNIQUE | NOT NULL } |FOREIGN KEY REFERENCES имя_таблицы(имя_столбца) [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.

Если ключ внешней таблицы состоит из нескольких полей, то ограничение FOREIGN KEY должно задаваться на уровне таблицы. При этом следует перечислить все столбцы, входящие во внешний ключ, указать имя главной таблицы и имена столбцов главной таблицы, на которые ссылается внешний ключ.

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

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

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

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

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

Дополним пример учебной базы данных «Университет», проектирование которой рассматривалось в гл. 4.3 таблицами ДИСЦИПЛИНА и ОБЩАЯ ВЕДОМОСТЬ. В таблицах 6,7 описана логическая структура таблиц.

Таблица 6

Логическая структура информационного объекта ДИСЦИПЛИНА

Поле

Признак ключа

Формат поля

Имя

Наименование

Тип

Размер

Точность

Код дисциплины

Код дисциплины

*

числовой

8

-

Наименование дисциплины

Наименование дисциплины

Текстовый

50

-

Декан

ФИО декана

Текстовый

50

-

Таблица 7

Логическая структура информационного объекта ОБЩАЯ ВЕДОМОСТЬ

Поле

Признак ключа

Формат поля

Имя

Наименование

Тип

Размер

Точность

Номер зачетной книжки

Зарегистрированный номер зачетной книжки студента

*

текстовый

8

-

Код дисциплины

Код дисциплины

*

Числовой

Длинное целое

-

Оценка

Оценка

числовой

1

-

Приведем запросы на создание таблиц в соответствии с приведенной на рис. 35 инфологической моделью БД.

Рис. 35. Схема базы данных «Университет»

Как видно из схемы БД таблица ФАКУЛЬТЕТ является независимой таблицей, поэтому она создается первой. Запрос на создание таблицы с учетом описания логической структуры в табл. 4 (стр.61) будет иметь вид:

CREATE TABLE факультет

( [номер факультета] tinyint PRIMARY KEY , [наименование факультета] char(50) )

Таблица СПЕЦИАЛЬНОСТЬ также является независимой, ее создаем второй. При создании запроса использует описание логической структуры в табл. 5 (стр.62).

CREATE TABLE [специальность] (

[номер специальности] int PRIMARY KEY,

[наименование специальности] char (60),

[стоимость обучения] [money] )

Таблица ГРУППА является зависимой от ФАКУЛЬТЕТА и СПЕЦИАЛЬНОСТИ таблицей. Используем таблицу 3 (стр. 61) при создании запроса и учтем, что столбцы номер факультета и номер специальности являются внешними ключами:

CREATE TABLE [группа] (

[номер группы] smallint PRIMARY KEY,

[номер специальности] int FOREIGN KEY REFERENCES специальность(номер специаль-ности)ON DELETE CASCADE ON UPDADE CASCADE,

[номер факультета] tinyint FOREIGN KEY REFERENCES факультет(номер факультета) ON DELETE CASCADE ON UPDADE CASCADE, [номер курса] tinyint )

Таблица СТУДЕНТ является зависимой от ГРУППЫ таблицей. На основании данных таблицы 2 (стр. 60) составим запрос. Также учтем, что столбец номер группы является внешними ключами:

CREATE TABLE [студент] (

[номер зачетной книжки] char(8) PRIMARY KEY,

[номер группы] smallint NOT NULL FOREIGN KEY REFERENCES группа(номер группы) ,

[фамилия] char(15) NOT NULL ,

[дата рождения] datetime NOT NULL ,

[коммерческий] bit NOT NULL ,

[имя регистрации] char(9))

Данные таблицы ОБЩАЯ ВЕДОМОСТЬ зависят от таблиц СТУДЕНТ и ДИСЦИПЛИНА. В этой таблице первичный ключ составной и каждый из столбцов первичного ключа является внешним ключом (см. табл. 7 и рис. 35).

Воспользуемся описанием логической структуры таблицы дисциплина, приведенной в таблице 6 и составим запрос:

CREATE TABLE [дисциплина] (

[код дисциплины] int PRIMARY KEY,

[наименование дисциплины] char(50) )

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

CREATE TABLE [общая ведомость] (

[код дисциплины] int,

[номер зачетной книжки] char(8),

[оценка] [tinyint] NOT NULL , PRIMARY KEY ([код дисциплины],[номер зачетной книжки]), FOREIGN KEY ([код дисциплины]) REFERENCES [дисциплина] ([код дисциплины]), FOREIGN KEY ([номер зачетной книжки]) REFERENCES [студент] ([номер зачетной книжки]) )

Изменение структуры таблицы

Изменение структуры таблицы выполняется командой ALTER TABLE. С помощью команды можно выполнять изменение свойств существующих столбцов, удалять их или добавлять в таблицу новые столбцы, управлять ограничениями целостности, как на уровне столбцов, так и на уровне таблицы. Назначение многих параметров и ключевых слов аналогично назначению соответствующих параметров и ключевых слов команды CREATE TABLE.

Удаление таблицы

Удаление таблицы выполняется при помощи команды DROP TABLE. Синтаксис команды:

DROP TABLE таблица

Например, запрос на удаление таблицы СТУДЕНТ имеет следующий вид:

DROP TABLE Студент

При удалении таблицы СЛЕДУЕТ учитывать связи установленные в базе данных между таблицами. Если на удаляемую таблицу с помощью ограничения целостности FOREIGN KEY ссылается другая таблица, то СУБД не разрешит ее удаление.

Создание индекса

Индексы используют для ускорения доступа к конкретным данным в таблице базы данных. Индекс является структурой, которая упорядочивает значения в одном или нескольких столбцах таблицы базы данных, например, в столбце Фамилий таблицы СТУДЕНТ. Если проводится поиск конкретного студента по фамилии, индекс помогает получить нужные сведения быстрее по сравнению с поиском по всем строкам таблицы.

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

Создание индекса выполняется командой CREATE INDEX:

CREATE [UNIQUE] INDEX

имя_индекса ON имя_таблицы (столбец [ASC|DESC] [,…])

где UNIQUE – указывает на то, что индекс должен хранить только уникальные значения.

Индекс может быть создан по одному или нескольким столбцам (составной индекс). Составные индексы позволяют различать записи, в которых в одном столбце имеются одинаковые значения.

Пример: Создать составной индекса в таблице СТУДЕНТ для полей Фамилия и Дата рождения

CREATE INDEX Ind_Fam ON

Студент(Фамилия, [Дата рождения] DESC)

Индекс для таблицы следует создавать только в том случае, если предполагается часто выполнять запросы по данным в индексированных столбцах. Индексы занимают место на диске и замедляют операции добавления, удаления и обновления строк.

Удаление индекса таблицы

Удаляет индекс из таблицы команда DROP. Синтаксис команды DROP на удаление индекса:

DROP INDEX индекс ON таблица

Перед удалением индекса из таблицы или самой таблицы ее необходимо закрыть.

Пример: Удалить индекс Ind_Fam из таблицы СТУДЕНТ

DROP INDEX Ind_Fam ON Студент

Соседние файлы в папке 17-06-2015_23-01-11