
- •Мдк 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.5. Интервалы
Интервал представляет собой разность между двумя значениями типа дата-время. SQL поддерживает два типа интервалов: год-месяц и день-время. Интервал типа год-месяц - это количество лет и месяцев между двумя датами, а интервал день-время - количество дней, часов, минут и секунд между двумя моментами в пределах одного месяца. Нельзя смешивать вычисления, использующие интервал год-день, с вычислениями, в которых используется интервал день-время.
Интервал времени можно задать двумя способами: в виде начального и конечного моментов или в виде начального момента и длительности, например:
(TIME '12:25:30', TIME '14:30:00') - интервал, заданный начальным и конечным моментами;
(TIME '12:45:00', INTERVAL '5' HOUR) - интервал, заданный начальным моментом и длительностью в часах.
Чтобы задать значение типа интервал, используется такой синтаксис:
Interval 'длина' year | month | day | hour | minute | second
Здесь длина - длина интервала, после которой указывается единица измерения (возможные значения указаны через вертикальную черту):
Например, для задания интервала длиной 15 дней следует использовать выражение INTERVAL ' 5 ' DAY.
2.6. Специальные типы данных
К специальным типам данных относятся следующие типы:
ROW - запись;
ARRAY - массив;
MULTISET - мультимножество.
Использование этих типов данных нарушает принцип, согласно которому таблицы реляционной базы данных должны находиться в первой нормальной форме. Любой столбец таблицы в первой нормальной форме не может содержать структурированные данные, например, набор полей: значения столбцов должны быть едиными и неделимыми. Тем не менее, жизнь неоднократно предлагает искушения отступить от теории в пользу эффективности.
Тип ROW (запись) позволяет объявить набор полей (запись) в качестве значения столбца таблицы. Таким образом, строки таблиц могут содержать записи.
Во многих базах данных имеются таблицы, содержащие сведения об адресах. Адрес, как известно, состоит из нескольких элементов, таких как почтовый индекс, страна, город, улица и т. д. Если в таблице завести один символьный столбец Адрес, в котором поместить все элементы адреса просто как символьную строку, то дальнейшая работа с отдельными элементами адреса будет довольно хлопотным делом (вам придется использовать функции разбора строк). Поэтому на практике для адреса обычно заводят несколько столбцов, по одному на каждый элемент (например, столбцы город, Улица и т. д.). Если же использовать тип ROW, то можно хранить все элементы адреса как значения одного столбца. В следующем примере сначала на основе типа ROW создается тип addr, а затем он назначается столбцу Адрес при создании таблицы Клиенты:
CREATE ROW TYPE addr
(
Postcode VARCHAR (9),
City VARCHAR (30) ,
Street VARCHAR (30),
House VARCHAR (10)
);
CREATE TABLE Клиенты
(
Id_клиента integer primary key,
Имя VARCHAR (25),
Адрес addr,
Телефон VARCHAR (15) );
Тип данных ROW появился впервые в SQL: 1999.
Тип ARRAY (массив) также впервые появился в SQL: 1999 и нарушает принцип первой нормальной формы, но несколько иначе, чем тип ROW. Тип ARRAY дает возможность одному из обычных типов иметь множество значений внутри значения одного табличного столбца. Например, клиент может иметь несколько номеров телефонов и вы можете пожелать хранить их все как одно многозначное значение единственного столбца телефон, а не как обычные значения нескольких столбцов телефон1, Телефон2 и т. п. Вот пример, в котором каждая ячейка столбца телефон может содержать до трех номеров телефона:
CREATE TABLE Клиенты
(