Иллюстрированный самоучитель по SQL для начинающих

Основы SQL

Интервалы

Интервальные типы данных тесно связаны с типами данных даты-времени. Интервал – это разница между двумя значениями даты-времени. Во многих приложениях, имеющих дело со значениями даты, времени или с теми и другими, иногда требуется определить интервал между двумя датами или значениями времени. SQL поддерживает два различных типа интервалов: год-месяц и день-время. Интервал год-месяц – это количество лет и месяцев между двумя датами. А интервал день-время – это количество дней, часов, минут и секунд между двумя моментами в пределах одного месяца. Нельзя смешивать вычисления, где используется интервал год-месяц, с вычислениями, где используется интервал день-время, потому что в месяцах разное количество дней (28, 29, 30 или 31).

Типы ROW

Тип данных ROW (запись) впервые появился в SQL: 1999. Он не является легким для понимания, и вы на своем пути от начального до среднего уровня программирования на SQL, возможно, так никогда с этим типом данных не встретитесь. В конце концов, в 1986-1999 годах люди прекрасно без него обходились.

Кроме всего прочего, примечательно то, что тип данных ROW нарушает правила нормализации, которые доктор И.Ф. Кодд (E.F. Codd) объявил на начальной стадии теории реляционных баз данных. Об этих правилах более подробно рассказывается в главе 5. Одной из характеристик, определяющих первую нормальную форму, является то, что поле в табличной строке не может быть многозначным. В поле может находиться одно и только одно значение. Однако тип данных ROW дает возможность объявить целую строку данных находящейся в единственном поле единственной строки таблицы – другими словами, объявить строку, вложенную в строку.

Проанализируйте следующую команду SQL, которая для персональной адресной информации (улица, город, штат, почтовый код) использует тип ROW:

CREATE ROW TYPE addr_typ (
Street CHARACTER VARYING (25)
City CHARACTER VARYING(20)
State CHARACTER (2)
PostalCode CHARACTER VARYING (9)
);

После того как тип ROW определен, его можно использовать в определении таблицы (с идентификатором клиента, его фамилией, именем, адресом, телефоном):

CREATE TABLE CUSTOMER (
CustID INTEGER PRIMARY KEY,
LastName CHARACTER VARYING (25),
FirstName CHARACTER VARYING (20),
Address addr_typ
Phone CHARACTER VARYING (15)
);

Здесь преимущество состоит в том, что если в базе данных много таблиц с информацией об адресе, например отдельно для клиентов, поставщиков, персонала и акционеров, то детали адресной спецификации необходимо определить только один раз – в определении типа ROW.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.