Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МДК02.02 Лекция 2_1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
61.71 Кб
Скачать

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 Клиенты

(