Запомните, что каждая реализация SQL может иметь свои собственные типы данных для значений дат и времени. Приведенные выше типы данных и элементы являются стандартами, которых должны придерживаться все производители реализаций SQL, но мы обращаем ваше внимание на то, что большинство реализаций предлагают свои типы данных для хранения значений даты и времени, отличающиеся как по форме, так и по способу внутреннего представления хранимых данных.
Для типов данных даты и времени длина обычно пользователем не задается. Немного позже мы обсудим представление дат подробнее, и вы узнаете о том, в каком виде хранят значения дат некоторые реализации, как работать со значениями дат и времени с помощью функций преобразования и на примерах вам будет показано, как используются значения дат и времени на практике.
Обычно для буквальных значений тип данных не объявляется - просто указывается нужная строка. Вот несколько примеров:
'Hello'
45000
"45000"
3.14
' 1 ноября 1997'
Здесь буквенно-числовые строки заключены в одиночные кавычки, а, например, значение 45000 - нет. Обратите также внимание на то, что второе значение 45000 заключено в обычные кавычки. Вообще говоря, строки символов требуют заключения их в кавычки, а числовые значения - нет. Позже вы узнаете, как используются буквальные значения в запросах к базе данных.
Как вы уже знаете из урока 1, значение NULL означает пропущенное значение или поле в строке данных, которому не было присвоено значения. Значение NULL используется в SQL почти повсюду - при создании таблиц, условий поиска в запросах и даже в буквальных строках.
Для значения NULL можно использовать следующие две формы ссылки на него.
• NULL (ключевое слово NULL)
• ' ' (два знака одиночной кавычки и ничего между ними)
Следующая строка не представляет значения NULL, а представляет строку, содержащую символы N-U-L-L:
'NULL'
Значения типа BOOLEAN (логические значения) могут принимать значения TRUE (истина), FALSE (ложь) или NULL. Значения типа BOOLEAN используются для сравнения данных. Например, если в запросе заданы несколько критериев, каждое из заданных условий оценивается и им присваиваются значения TRUE, FALSE или NULL. Соответствующие данные включаются в ответ на запрос только тогда, когда для всех условий возвращается логическое значение TRUE. Если же среди возвращенных значений будут либо FALSE, либо NULL, данные в ответ на запрос могут не"включаться.
Рассмотрим следующий пример.
WHERE NAME = 'SMITH'
Такая строка вполне может быть одним из условий в запросе. Тогда условие оценивается для каждой строки данных той таблицы, которой адресован запрос, и если оказывается, что значением NAME является SMITH, условие получает значение TRUE, и запрос возвращает ассоциированные с соответствующей записью данные.
CREATE TYPE PERSON AS OBJECT
(NAME VARCHAR2(30),
SSN VARCHAR2(9));
Ссылаться на определенный таким образом пользовательский тип данных можно так:
CREATE TABLE EMP_PAY (EMPLOYEE PERSON, SALARY NUMBER(10,2), HIRE_DATE DATE);
Обратите внимание на то, что для первого столбца с именем EMPLOYEE задан тип данных PERSON, являющийся пользовательским типом данных, созданным в первом примере.
ALTER DOMAIN MONEY_D
ADD CONSTRAINT MONEY__CON1
CHECK (VALUE > 5};
Сослаться на домен можно так:
CREATE TABLE EMP__PAY
(EMP_ID NUMBER(9),
EMP_NAME VARCHAR2(30),
PAY_RATE MONEY_D);
Некоторые из приведенных в тексте этого урока типов данных в разных реализациях SQL могут иметь различные имена. Несмотря на различия в именах, лежащий в основе создания типов данных подход всегда одинаков. Большинство из указанных типов данных, если не все они, поддерживаются большинством реляционных баз данных.
SQL предлагает несколько типов данных. Если у вас есть опыт программирования на других языках, многие из этих типов данных покажутся вам знакомыми. Типы данных позволяют хранить в базе данных различные по своей природе данные от любых символов до десятичных чисел, значений дат и времени. Подход к разделению данных на типы во всех языках одинаков - и при работе с переменными в языках третьего поколения типа С, и при работе с реляционными базами данных с помощью SQL. Хотя в каждой реализации SQL для стандартных типов данных используются разные имена, работают они практически одинаково.