|
Лекция. Стандарт языка sql определяет ряд типов данных. Ниже перечислены наиболее часто используемые из них
Основы языка SQL
Типы данных
Стандарт языка SQL определяет ряд типов данных. Ниже перечислены наиболее часто используемые из них.
INTEGER, SMALLINT - целые числа со знаком. Точность представления и размерность определяется реализацией, точность SMALLINT не должна превышать точность INTEGER. Многие СУБД позволяют сокращать INTEGER до INT.
NUMERIC (p, s), DECIMAL (p, s) - задают в общем виде формат точного числа, целого или с дробной частью. NUMERIC представляет число с точностью р (число знаков) и масштабом s (число знаков после запятой). Если опушен масштаб, то он полагается равным 0 (т.е. число целое), а если опущена точность, то её значение по умолчанию определяется реализацией. Тип DECIMAL требует, чтобы использовалась зависящая от реализации точность m, такая, что m> = p. Допустимо сокращение DEC.
FLOAT (p), REAL, DOUBLE PRECISION числа в представлении с плавающей точкой (приближенные числовые типы). Точность REAL определяется реализацией, точность DOUBLE PRECISION должна быть больше точности REAL. Точность FLOAT задается параметром р, если параметр отсутствует- определяется реализацией. Примеры допустимых значений: 34, -11.23, 23.45E-15 (запись числа 23,45^-15).
CHARACTER (n) - строка из n символов, допускается сокращение CHAR (n). Запись "CHAR" соответствует СНАR (1). Если длина сохраняемого значения меньше n, в конце будет добавлено соответствующее число пробелов. Тип NATIONAL CHARACTER (n) хранит данные в кодировке UNICODE (2 байта на символ для поддержки национальных алфавитов). Допустима запись NCHАR. Строковые константы заключаются одинарные или двойные кавычки (например, "example", "example 2").
CHARACTER VARYING (n) - строка переменной длины не более чем из n символов, допускается сокращение VARCHAR (n).
CHARACTER LARGE OBJECT – Символьный тип, позволяющий хранить большие объемы текста. Допустима запись CLOB. Также существует тип NCLOB.
XML-документ в формате XML (тип данных введён в версии стандарта SQL:2003).
BIT (n) -битовая строка длиной n бит. Запись "ВIТ" аналогична BIT (1).
BIT VARYING (n) -битовая строка переменной длины не более n бит.
BINARY LARGE OВЈЕСТ - большой двоичный объект, допустима запись BLOB
DATE - дата в формате "YYYY-MM-DD, например "1961-04-12” для 12 апреля 1961 г.
TIME – тип данных для хранения отметок времени, включающих поля <часы><минуты> <секунды><доли секунды>
TIMESTAMP- тип данных для совместного хранения даты и времени
Создание доменов
В SQL понятие «домен» несколько отличается от аналогичного понятия реляционной модели:
• использование доменов не обязательно - столбцы в таблицах могут определяться напрямую через встроенные типы данных:
• домен в SQL должен определяться в терминах одного из встроенных типов данных
• домен и SQL играет роль синтаксического сокращения, позволяющего один раз ввести значение по умолчанию или набор ограничений и использовать их для определения множества столбцов.
• домены в SQL не ограничивают сравнение - контролируется, чтобы в сравнении участвовали значения одного базового типа (числовые, строковые и т.д.), которые не обязательно должны принадлежать одному домену.
Для создания домена используется оператор CREATE DOMAIN, формат которого приведён ниже:
CREATE DOMAIN [AS]
[default definition] [domain-constraint-definition-list] где -название создаваемого домена; - поддерживаемый SQL тип данных, который является базовым для создаваемого домена; AS - необязательное ключевое слово, разделяющее название домена и тип базового типа данных (в описании формата здесь и далее необязательные параметры будут записываться в квадратных скобках); default definition – необязательный параметр, определяющий значение по умолчанию, которое применяется к элементам каждого столбца, определённого на данном домене и не имеющего собственного определения значения по умолчанию; domain-constraint-definition-list -список ограничений целостности, применяемых к каждому столбцу, основанному на домене.
Существующий домен можно уничтожить оператором DROP DOMAIN.
Его синтаксис:
DROP DOMAIN (RESTRICT | CASCADE) где -это имя домена. Если указывается RESTRICT, домен не будет уничтожен, если он используется в определении какого-либо столбца, представления или ограничения целостности. Если указана опция CASCADE. домен будет удален. Столбцы, определённые на этом домене, автоматически переопределяются следующим образом:
• считается, что каждый такой столбец теперь относится к типу дополнительных, на основе которого определялся уничтожаемый домен;
• если у столбца не было определено собственное значение теперь у него значение по умолчанию, которое было у уничтожаемого домена;
• каждый столбец наследует все ограничения уничтожаемого домена.
Создание таблиц
Вначале отметим две важные особенности таблиц SQL по сравнению с отношениями реляционной модели:
• в таблицах SQL допустимы идентичные сроки, поэтому нет необходимости обязательного наличия потенциальный клей
• в таблицах SQL столбцы рассматриваются в порядке слева направо, тогда как в отношении порядок атрибутов неважен.
Базовые таблицы создаются при помощи оператора CREATE TABLE, формат которого
CREATE TABLE (table-element-commalist) где - имя созданной таблицы; table-element-commalist - список через запятую определений столбцов или ограничений уровня таблицы. В списке элементов должно быть хотя бы одно поредение столбца.
Операция добавления, обновления и удаления данных
Язык обработки данных (DML) включает три операции обновления: INSERT (вставка), UPDATE (изменение) и DELETE (удаление). Рассмотрим синтаксис этих операторов в несколько упрощенном виде по сравнению со стандартом SQL.
Вставка строк производиться с помощью оператора INSERT, формат которого приведен ниже:
INSERT INTO [ (column_list)]
{VALUES (value_list) | }
Где имя базовой таблицы или обновляемого представления. Column_list - необязательный параметр, позволяющий указать обновляемые столбцы; если он не указан, то порядок столбцов принимается таким же, как в определении таблицы.
Значения полей существующих записей таблицы можно изменить с помощью оператора UPDATE, формат которого следующий:
UPDATE
SET column_1 = value_1 [, column_2 = value_2 …]
[WHERE ]
Здесь -название обновляемой таблицы; column_1 - название первого из обновляемых столбцов, value_1 - присваиваемое ему значение (константа или результат вычислений). Обновляемых столбцов может быть несколько.
Выражение обозначает логическое условие.
Удаление строк на таблицы проводится оператором DELETE:
DELETE FROM
[WHERE ]
Здесь -название таблицы, из которой удаляются данные; логическое условие
Оператор MERGE позволяет изменить, добавить или удалить записи в таблице, на основании проверки условий относительно совпадения записей изменяемой таблицы и какой-то другой. Это может понадобиться, например, при синхронизации данных, хранящихся в разных таблицах.
Выборка данных: оператор SELECT
Для формирования запросов на выборку данных в SQL используется оператор SELECT. Его формат представлен ниже:
SELECT [ ALL | DISTINCT] select_item_commalist
FROM table_reference_commalist
[ WHERE conditional_expression]
[ GROUP BY column_name_commalist]
[ HAVING conditional_expression]
[ ORDER BY order_item_commalist]
SELECT является достаточно сложным оператором, позволяющим выбирать данные из одной или нескольких таблиц, выполнять группировку, обработку данных с помощью агрегатных функций, формировать вложенные запросы и т.д. Выражение SELECT обрабатывается целиком, а не «построчно», как обычно бывает в языках программирования. В несколько обобщенном виде схема выполнения оператора SELECT выглядит следующим образом:
1) выполняется раздел FROM;
2) выполняется раздел WHERE (если есть);
3) выполняется GROUP BY (если есть);
4) выполняется HAVING (если есть);
5) выполняются определения в разделе SELECT
6) выполняется ORDER BY (если есть)
Раздел WHERE
В условиях могут использоваться сравнения: =, <> (не равно),>, <,> =, <=. Ниже приведен пример, выводящий список студентов из группы 382 (здесь учтена особенность синтаксиса для MS SQL Server в части заключения названий столбцов в квадратные скобки):
SELECT *
FROM Students
WHERE [Group)=382
При использовании GROUP BY в разделе SELECT могут быть указаны только те столбцы, по которым проводится группировка. Прочие столбцы могут указываться, если они выступают в качестве аргументов агрегатных функций, сопоставляющих группе значений одно.
Ниже приведены основные агрегатные функции:
• среднее значение -AVG ([DISTINCT | ALL] <выражение>);
•максимум - MAX ([DISTINCT|ALL) <выражение>);.
•МИНИМУМ - MIN([DISTINCT|ALL];
• сумма -SUM([DISTINCT|ALL);
•количество- COUNT ([DISTINCT| ALL] <выражение>) или COUNT (*)
|
|
|