Строковые данные (последовательности символов) имеют три главных строковых типа. Для столбца таблицы можно указать тип CHARACTER (n) или CHAR (n) (строка фиксированной длины), где n — максимальное количество символов, содержащихся в строке. Если (n) не указано, то предполагается, что строка состоит из одного символа. Если в столбец типа CHARACTER (n)вводится m < nсимволов, то оставшиеся позиции заполняются пробелами.
Тип данныхCHARACTER VARYING (n) или VARCHAR (n) (строка переменной длины) применяется тогда, когда вводимые данные имеют различную длину и нежелательно дополнять их пробелами. При этом сохраняется только то количество символов, которое ввел пользователь. В данном случае указание максимального количества символов обязательно (в отличие от CHARACTER). Данные типов CHARACTERи CHARACTER VARYING могут участвовать в одних и тех же строковых операциях.
Тип данных CHARACTER LARGE OBJECT (CLOB - большой символьный объект) используется для представления очень больших символьных строк (например, статей, книг и т. п.). В некоторых СУБД данный тип называется MEMO, а в других — TEXT. С данными этого типа можно выполнять не все операции, предусмотренныедля типовCHARACTER и CHARACTER VARYING. Так,их нельзяиспользовать в операциях сравнения, за исключением равенства и неравенства. Кроме того, столбцы этого типа не могут быть первичными и внешними ключами, а также быть объявлены как имеющие уникальные значения. Иначе говоря, при создании таблиц с помощью оператора CREATE и объявлении столбцов типа СLOBнельзя использовать ключевые слова PRIMARY KEY, FOREIGN, KEY и UNIQUE.
В следующем примере создается таблица с обычным символьным столбцом и столбцом типа СLOB, значения которого могут содержать 100 000 символов:
CREATE TABLE myTable
(
FIELD1 CHARACTER (60),
FIELD2 CLOB (100000)
);
Здесь оператор CREATE TABLE создает таблицу с именем myTable, которая состоит из двух столбцов с именами FIELD1 и FIELD2, типы столбцов указаны рядом с их именами.
Различные языки используют различные наборы символов. Даже английский и немецкий наборы отличаются, не говоря уж о русском и китайском. Система может быть настроена на некоторый набор символов, принимаемый по умолчанию. Однако при этом можно использовать и другие национальные символьные наборы. Так, в следующем примере создается таблица, в которой столбец FIELD1 объявляется как строковый с набором символов, принятым по умолчанию, а столбец FIELD2 — как строковый с греческим набором символов:
CREATE TABLE myTable
(
FIELDI CHARACTER (60),
FIELD2 CHARACTER VARYING (80) CHARACTER SET GREEK
);
Значения строкового типа в SQL-выражениях заключаются в одинарные кавычки. Например, 'Иванов Иван Иванович', '12345 рублей', 'тел. (812) 123-4567'. Пустая строка не содержит ни одного символа и имеет вид: ' '. Строка, содержащая один или более пробелов, не является пустой.
Иногда бывает так, что строковый столбец в таблице содержит только числа (точнее, строки, содержащие цифры, знаки числа и разделительные точки). Чтобы использовать такие данные в операциях с числами, необходимо привести данные одного типа к другому типу с помощью функции CAST ().
Значения типа CHARACTER и CHARACTER VARYING (VARCHAR) совместимы в том смысле, что они могут участвовать как операнды в строковых операциях и операциях сравнения.
Числовой тип данных может быть двух видов — точный и приблизительный. Точные числовые типы позволяют точно выразить значение числа. Некоторые величины имеют очень большой диапазон значений, и в таких случаях достаточно ограничиться некоторым приближенным их представлением с учетом технических возможностей компьютера (размеров регистра).
К точным числовым данным относятся следующие пять типов:
· INTEGER — целое (без дробной части) число. Количество разрядов (точность) зависит от реализации SQL. В некоторых реализациях числа этого типа лежат в диапазоне от -2 147 483 648 до 2 147 483 647 (четырехбайтное целое число);
· SMALLINT — малое целое число. Количество разрядов зависит от реализации SQL, но не больше количества разрядов INTEGER в этой же реализации. В некоторых реализациях числа этого типа лежат в диапазоне от -32 768 до 32 767 (двухбайтное целое число);
· BIGINT — большое целое число. Количество разрядов зависит от реализации SQL и превышает количество разрядов числа типа INTEGER;
· NUMERIC (х, у) — число, в котором всего х разрядов (точность), из которых у разрядов (масштаб) отводится для дробной части. Если у не указано (NUMERIC (x)), то для дробной части отводится количество разрядов, установленное в системе по умолчанию. Если не указаны ни х, ни у (NUMERIC), то принимаются обе эти величины, установленные по умолчанию. Например, если указан тип NUMERC (6, 2), то максимальное значение числа равно 9999.99;
· DECIMAL (х, у) — десятичное число, в котором всего х разрядов, из которых у разрядов отводятся для дробной части. Если х или/и у не указаны, то принимаются значения по умолчанию. Этот тип очень похож на NUMERIC. Отличие состоит в том, что если в DECIMAL (x, у) указанные х и у меньше, чем допустимые реализацией SQL, то будут использоваться последние. Если х и у не указаны, то применяется система умолчаний. Например, вы задали для столбца тип DECIMAL (6, 2). Если реализация SQL позволяет, то в этот столбец можно ввести числа, превышающие 9999.99. В отличие от DECIMAL (x, у), тип NUMERIC (x, у) жестко задает диапазон возможных значений числовой величины.
К приблизительным числовым типам относятся следующие три типа:
· REAL — вещественное число одинарной точности с плавающей разделительной точкой (эта точка "плавает", появляясь в различных местах числа). Например, 5.25, 5.257, 5.2573. Точность представления числа зависит от реализации SQL и оборудования. Например, 32-битовый компьютер дает большую точность, чем 16-битовый;
· DOUBLE PRECISION — вещественное число двойной точности с плавающей разделительной точкой. Точность представления числа зависит от реализации SQL и оборудования. Применяется для представления научных данных (например, результатов измерений) в широком диапазоне значений, т. е. как очень малых (близких к 0), так и очень больших;
· FLOAT (x) — вещественное число с плавающей разделительной точкой и минимальной точностью х, занимающее не более 8 байтов. Если компьютер может поддержать указанную точность, используя аппаратную одинарную точность, то система будет использовать арифметику одинарной точности. Если указанная точность требует арифметики с двойной точностью, то система будет использовать ее. Данный тип следует применять, если предполагается возможность переноса базы данных на другую аппаратную платформу, отличающуюся размерами регистров. Пример значения типа FLOAT: 5.318Е-24 (т. е. 5.318, умноженное на 10 в степени -24). Такую же форму представления имеют и числа типа REAL и DOUBLE PRECISION.
При создании таблиц целочисленные типы применяются для столбцов, содержащих разного рода идентификаторы, например, номера (коды) клиентов, товаров, заказов и т. п. Разумеется, если содержимое столбца должно быть целым числом (например, количество ящиков, бутылок, штук и т. п.), то тип этого столбца естественно определить как INTEGER, SMALLINT или BIGINT.
Допустим, в таблице Клиенты имеется столбец ID_клиента, содержащий уникальные идентификаторы клиентов. Если количество клиентов не превышает 32 000, то тип столбца можно определить как SMALLINT. Если в вашей таблице будут храниться сведения о сотнях тысяч клиентов, то тип столбца ID_клиента следует определить как INTEGER.
Если столбец в проектируемой таблице должен содержать числа с дробной частью, то для него можно задать какой-нибудь нецелочисленный тип. Если вы не уверены, что применить: точные числовые типы или приблизительные, выбирайте точные (NUMERIC, DECIMAL). Они требуют меньше ресурсов и дают точные результаты. Если в столбце предполагается хранить данные из очень широкого диапазона (и очень малые, и очень большие числа), то используйте приблизительные типы данных (FLOAT, REAL).
Обратите внимание, что строка, содержащая число (например, '12345.47'), является данным строкового, а не числового типа. Чтобы в SQL-выражениях сравнивать строковые и числовые данные, необходимо их привести к одному типу с помощью функции CAST ().
В этой части математической логики, основоположником которой был английский математик Джон Буль, данные имеют только два значения — ИСТИНА и ЛОЖЬ, обозначаемые как trueи false соответственно. Данные логического типа получаются в результате операций сравнения. Например, результатом вычисления выражения 3 < 5 является ИСТИНА, а выражения 2 + 3 = 10 —ЛОЖЬ.
В SQL тип данных BOOLEAN (булевский) имеет три значения — TRUE, FALSE и UNKNOWN. Значение unknown (неизвестное) было введено для обозначения результата, получающегося при сравнении со значением NULL (неопределенное). Если пользователь еще не ввел в ячейку таблицы никакого значения, то эта "пустая" ячейка содержит значение NULL, интерпретируемое как неизвестное или неопределенное значение.
Результатом любой операции сравнения true или false с NULL или с unknown всегда является unknown.
В SQL-выражениях логические значения заключаются в кавычки, например, ' TRUE ' или ' true'.