Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

Числовые константы

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

В случае с данными, представляющими денежные величины, в большинстве реализаций SQL просто используются целые или десятичные константы, хотя в некоторых из них можно перед константой указывать символ денежной единицы:

$0.75 $5000.00 $ -567.89

Константы с плавающей запятой (известные также под названием приблизительных числовых литералов) определяются с помощью символа Е и имеют такой же формат, как и в большинстве языков программирования. Ниже приведены примеры констант с плавающей запятой:

1.5Е3-3.141.59Е1 2.5Е-7 0.783926Е21

Символ Е читается: "умножить на десять в степени", так что первая константа представляет число "1,5 умножить на десять в степени 3", или 1500.

Если необходимо включить в строковую константу одинарную кавычку, вместо нее следует написать две одинарные кавычки. Таким образом, константа 'I can' 't' представляет строку "I can't".

В реляционных СУБД календарные даты, время и интервалы времени представляются в виде строковых констант. Форматы этих констант в различных СУБД отличаются друг от друга.

Таблица 2.3 - Символьные константы SQL

Константа

Описание

USER

Имя пользователя, под которым вы подключились к базе данных (DB2, SQL/DS, Oracle, SQL, VAX SQL, SQLBase, также определена в стандарте ANSI/ISO)

CURRENT DATE

Текущая дата (DB2,SQL/t>S, SQLBase)

CURRENT TIME

Текущее время дня (DB2, SQL/DS, SQLBase)

CURRENT TIMESTAMP

Текущие дата и время (DВ2, SQL/DS)

CURRENT ТIMEZONE

Интервал времени, определяющий разницу между текущим часовым поясом и временем по Гринвичу (DB2, SQL/DS, SQLBase)

SYSDATE

Текущие дата и время (Oracle, SQLBase)

ROWNUM

Внутренний идентификатор строки (Oracle)

ROWID

Внутренний идентификатор строки (SQLBase)

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

SELECT CITY, TARGET, SALES, (SALES/TARGET) * 100 FROM OFFICES

В соответствии со стандартом ANSI/ISO в выражениях можно использовать четыре арифметические операции: сложение (X + Y), вычитание (X - Y), умножение (X * Y) и деление (X / Y). Для формирования сложных выражений можно использовать скобки, например:

(SALES * 1.05) - (TARGET * .95)

2 Создание базы данных и структуры таблицы

Чтобы создать базу данных пользователь должен иметь соответствующую привилегию, т.е. разрешение на создание. После того как он создаст БД он является ее владельцем и имеет все права на изменение, обновление и удаление объектов созданной им базы данных.

Синтаксис команды создания базы данных:

CREATE DATABASE <имя базы данных>.

Структура таблицы создается командой CREATE TABLE во всех диалектах языка SQL. Эта команда создает пустую таблицу – таблицу без строк. Команда CREATE TABLE в основном определяет имя таблицы в виде описания набора имен столбцов, обозначенных в определенном порядке. Она также определяет типы данных и размеры столбцов. Каждая таблица должна иметь, по крайней мере, один столбец.

Синтаксис команды CREATE TABLE

CREATE TABLE имя таблицы

(<имя столбца> <тип данных> <размер> <ограничения на столбец>,

<имя столбца> <тип данных> <размер>, …,

<имя столбца> <тип данных> <размер>, …,

<ограничения на таблицу> <имя столбца> [,<имя столбца>…])

Пропуски используются для разделения частей команды SQL, поэтому они не могут быть именем таблицы или другого объекта. Значение размера аргумента зависит от типа данных. Если его не указывать система сама будет назначать автоматически.

При создании таблиц различают следующие виды ограничений:

  1. Ограничения на столбец – средство обеспечения целостности домена и целостности таблицы;

  2. Ограничения на таблицу – средство обеспечения целостности ссылок БД.

Ограничение на столбец указывается после определения столбца; ограничение на таблицу – после определения последнего столбца таблицы.

Основные ограничения на столбец:

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

  2. UNIQUE - ограничение уникальности значений, которые вводятся в таблицу. Это ограничение применяется к столбцам, для которых было объявлено NOT NULL.

  3. PRIMARY KEY – ограничение обозначения первичного ключа – выполняется прибавлением этих ключевых слов после соответствующего столбца таблицы.

Первичные ключи не могут иметь нулевых значений.

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

PRIMARY KEY рекомендуется использовать как уникальный идентификатор рядков таблицы; UNIQUE – как обозначение уникальности значений в одном столбце или в группе столбцов.

  1. CHECK – ограничения на значение, что вводятся. Вслед за этим в круглых скобках указывается предикат (диапазон данных, что вводятся; константы; выражения).

  2. DEFAULT – ограничения присвоения значений по умолчанию. Вслед за этим ключевым словом указывается значение, которое присваивается столбцу.

Основные ограничения на таблицу

Под ограничением на таблицу имеется виду объявление внешнего ключа порожденной таблицы и возможность обеспечить целостность ссылок БД. Каждое значение внешнего ключа должно быть подано в родительском ключе только один раз. Родительский ключ должен иметь ограничения PRIMARY KEY или UNIQUE для гарантии того, что значение в нем не представлено больше чем один раз.

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

Ограничения на обновление таблицы (при выполнении команд DELETE, UPDATE), семантически связанной с другими таблицами, выполняется разрешением или запретом на изменение данных.

Согласно с ANSI для изменения или исключения значений родительского ключа, на который имеются ссылки, есть три основные возможности:

  1. можно ограничить или запретить изменение родительского ключа, указавши: ограничено (restricted);

  2. можно изменить родительский ключ и автоматически изменить внешний ключ, назначив его каскадное изменение (cascades);

  3. можно изменить родительский ключ, и тем самым установить значение внешнего ключа в NULL автоматически (предусматривается, что NULL-значения разрешены во внешнем ключе); в этом случае говорят, что внешний ключ изменяется в NULL.

  • SET CONSTRAINTS - установить момент проверки ограничений

Пример

Фрагмент транзакционной базы данных. Данный фрагмент позволяет выполнять учет заказов на товар в коммерческой фирме. Задача учета базируется на том, что фирма производит заказы многим поставщикам на множество товаров, при этом один и тот же товар предлагается несколькими поставщиками, но каждый поставщик предлагает множество товаров. Цены на товар зависят от поставщика.

Для упрощения будем считать, что:

  1. в БД хранятся данные о поставщиках, товары и заказы, которые оформляются на товары;

  2. каждый заказ может включать один товар в некотором количестве, при определенной цене;

  3. предусматривается, что названия фирм-поставщиков является уникальным, названия городов выбираются с определенного домена – списка ограниченного размера.

В примере будет использован самый простой набор типов данных со следующим назначением: символьные – C; числовые – N; дата – D.

Диаграмма «сущность-связь» представлена на рисунке 2.1

Реляционная модель имеет вид:

Поставщик (Код_пост, наименование фирмы, Город, Рейтинг, Телефон)

Товар (Код_тов, наименование товара, Параметр 1, Параметр 2, Параметр 3)

Заказ [поставщик, Товар] (№_заказа, Код_пост, Код_тов, Дата_зак, Цена единицы, количество).

В отношении «Заказ» атрибут «№_заказа» является первичным ключом, атрибуты «Код_пост» и «Код_тов» - внешними ключами.

В терминах СУБД реляционная модель имеет вид:

SUPPL (S_ID, S_NAME, S_CITY, S_RATING, S_TEL)

GOOD (G_ID, G_NAME, PAR_1, PAR_2, PAR_3)

ORDERS (O_ID, S_ID, G_ID, DAT, PRICE, QN_TY).

Рисунок 2.1 – Модель «сущность-связь»

Теперь при помощи языка SQL создадим перечисленные таблицы.

CREATE TABLE SUPLL

(S_ID C(3) NOT NULL PRIMARY KEY,

S_NAME C(20) NOT NULL UNIQUE,

S_CITY C(20) NOT NULL

CHECK (S_CITY IN («Харьков», «Киев», «Лондон», «Москва», «Полтава»)),

S_RATIHG N(2) NOT NULL,

S_TEL C(10) NOT NULL);

CREATE TABLE GOOD

(G_ID C(5) NOT NULL PRIMARY KEY,

G_NAME C(20) NOT NULL,

PAR_1 C(10) NOT NULL,

PAR_2 C(10) NOT NULL,

PAR_3 C(10) NOT NULL);

CREATE TABLE ORDERS

(O_ID N(3) NOT NULL PRIMARY KEY

S_ID C(3) NOT NULL,

G_ID C(5) NOT NULL,

PRICE N(10.2) NOT NULL,

QN_TY N(5) NOT NULL,

DAT Date DEFAULT CURRENT DATE,

FOREIGN KEY (S_ID) REFERENCES SUPPL,

FOREIGN KEY (G_ID) REFERENCES GOOD,

UPDATE OF GOOD CASCADES,

DELETEOF GOOD CASCADES,

UPDATE OF SUPPLCASCADES,

DELETE OF SUPPL CASCADES);

Синтаксис приведенных команд необходимо уточнять при работе в конкретной СУБД, иногда типы данных необходимо писать полностью без сокращений.

Команда создания таблицы ORDERS обеспечивает целостность ссылок следующим образом: при удалении из таблицы SUPPL какого-либо поставщика в таблице ORDERS будут удалены все записи, связанные с этим поставщиком. При удалении с таблицы GOOD какого-либо товара, в таблице ORDERS будут удалены все записи, связанные с этим товаром. При восстановлении кода поставщика или товара в таблицах SUPPL или GOOD, соответственно, будут восстановлены эти коды в таблице ORDERS.

Необходимо помнить, что объединять при помощи арифметических операторов столбцов, что принадлежат разным типам данных, нельзя. Необходимо привести все данные, что соединяются, к одному типу специальными функциями преобразования типов данных. В разных СУБД эти функции разные.