- •Мдк 02.02. Технология разработки и защиты баз данных Лекция № 2.1. Основы sql. Типы данных sql.
- •1.Введение в sql
- •2. Типы данных
- •2.1. Строки
- •2.2. Числа
- •2.3. Логические данные
- •2.4. Дата и время
- •2.5. Интервалы
- •Interval 'длина' year | month | day | hour | minute | second
- •2.6. Специальные типы данных
- •Id_клиента integer primary key,
- •Id_клиента integer primary key,
- •Insert into Клиенты (Имя, Телефон)
- •Values ('Петров Петр Петрович', {'444-4444', '123-4567', '777-8899'});
- •3. Неопределенные значения
- •4. Преобразование типов
2. Типы данных
Во всех языках программирования, а также в SQL важное место занимают поддерживаемые типы данных. Данные, которые хранятся в памяти компьютера и подвергаются обработке, можно отнести к различным типам.
Типы данных столбцов таблиц базы данных могут отличаться от типов данных, поддерживаемых SQL. Это обстоятельство необходимо учитывать при составлении SQL-запросов. Так, например, если в таблице Сотрудники столбец Зарплата определен по каким-либо причинам как символьный, то следующий запрос приведет к ошибке из-за несоответствия типов сравниваемых данных:
SELECT Фамилия FROM Сотрудники WHERE Зарплата > 25000;
В условии запроса (оператор where) сравниваются символьное и числовое значения. На практике данная проблема легко преодолима с помощью функции CAST() приведения значения к требуемому типу. Кроме того, между некоторыми типами столбцов таблицы и данных, участвующих в SQL-выражениях, существуют соответствия, допускающие их совместное использование. Такие типы называют согласованными. Различные СУБД поддерживают несколько отличающиеся наборы типов данных - для столбцов таблиц базы данных. Аналогичная ситуация и с типами данных, поддерживаемых различными версиями и реализациями SQL. Вместе с тем, всегда имеются типы данных, которые поддерживаются всеми реализациями SQL.
В спецификации SQL:2003 признаны пять предопределенных общих типов, внутри которых могут быть подтипы:
строковый (символьный):
CHARACTER (или CHAR);
CHARACTER VARYING (или VARCHAR);
CHARACTER LARGE OBJECT (или CLOB);
числовой:
точные числовые типы:
INTEGER;
SMALLINT;
BIGINT;
NUMERIC;
DECIMAL;
приблизительные числовые типы:
1. REAL;
DOUBLE PRECISION;
FLOAT;
логический (булевский) - BOOLEAN;
даты-времени:
DATE;
TIME WITHOUT TIME ZONE,
TIME WITH TIME ZONE;
TIMESTAMP WITHOUT TIME ZONE;
TIMESTAMP WITH TIME ZONE;
интервальный.
Кроме того, существуют особые типы:
ROW (запись),
ARRAY (массив) и
MULTISET (мультимножество).
2.1. Строки
Строковые данные (последовательности символов) имеют три главных строковых типа. Для столбца таблицы можно указать тип CHARACTER(n) или CHAR(n) (строка фиксированной длины), где n - максимальное количество символов, содержащихся в строке. Если (n) не указано, то предполагается, что строка состоит из одного символа. Если в столбец типа CHARACTER (n) вводится т<п символов, то оставшиеся позиции заполняются пробелами.
Тип данных CHARACTER VARYING(n) или VARCHAR (n) (строка переменной длины) применяется тогда, когда вводимые данные имеют различную длину и нежелательно дополнять их пробелами. При этом сохраняется только то количество символов, которое ввел пользователь. В данном случае указание максимального количества символов обязательно (в отличие от CHARACTER). Данные типов CHARACTER и CHARACTER VARYING могут участвовать в одних и тех же строковых операциях.
Nип данных CHARACTER LARGE OBJECT (CLOB- большой символьный объект) используется для представления очень больших символьных строк (например, статей, книг и т. п.). В некоторых СУБД данный тип называется MEMO, а в других - TEXT. С данными этого типа можно выполнять не все операции, предусмотренные для типов CHARACTER и CHARACTER VARYING. Так, их нельзя использовать в операциях сравнения, за исключением равенства и неравенства. Кроме того, столбцы этого типа не могут быть первичными и внешними ключами, а также быть объявлены как имеющие уникальные значения.
В следующем примере создается таблица с обычным символьным столбцом и столбцом типа CLOB, значения которого могут содержать 100 000 символов:
CREATE TABLE myTable
(
FIELD1 CHARACTER (60),
FIELD2 CLOB (100000)
);
Здесь оператор CREATE TABLE создает таблицу с именем myTable, которая состоит из двух столбцов с именами FIELD1 и FIELD2.
Различные языки используют различные наборы символов. Система может быть настроена на некоторый набор символов, принимаемый по умолчанию. Однако при этом можно использовать и другие символьные наборы. Так, в следующем примере создается таблица, в которой столбец FIELD1 объявляется как строковый с набором символов, принятым по умолчанию, а столбец FIELD2 - как строковый с греческим набором символов:
CREATE TABLE myTable
(
FIELD1 CHARACTER (60),
FIELD2 CHARACTER VARYING (80) CHARACTER SET GREEK
);
Значения строкового типа в SQL-выражениях заключаются в одинарные кавычки. Например, 'Иванов Иван Иванович', '12345 рублей', 'тел. (812)123-4567'. Пустая строка не содержит ни одного символа и имеет вид: ' '. Строка, содержащая один или более пробелов, не является пустой. Иногда бывает так, что строковый столбец в таблице содержит только числа (точнее, строки, содержащие цифры, знаки числа и разделительные точки). Чтобы использовать такие данные в операциях с числами, необходимо привести данные одного типа к другому типу с помощью функции CAST(). Значения типа CHARACTER и CHARACTER VARYING (VARCHAR) совместимы в том смысле, что они могут участвовать как операнды в строковых операциях и операциях сравнения.
