- •Мдк 02.02. Технология разработки и защиты баз данных Лекция № 2.1. Основы sql. Типы данных sql.
- •1.Введение в sql
- •2. Типы данных
- •2.1. Строки
- •2.2. Числа
- •2.3. Логические данные
- •2.4. Дата и время
- •2.6. Специальные типы данных
- •Id_клиента integer primary key,
- •2.5. Интервалы
- •Interval 'длина' year | month | day | hour | minute | second
- •Id_клиента integer primary key,
- •Insert into Клиенты (Имя, Телефон)
- •Values ('Петров Петр Петрович', {'444-4444', '123-4567', '777-8899'});
- •3. Неопределенные значения
- •4. Преобразование типов
Id_клиента integer primary key,
Имя VARCHAR (25),
Адрес addr,
Телефон VARCHAR (15) ARRAY [3] );
Следующее SQL-выражение добавляет в таблицу клиенты новую запись и вводит в нее значения столбцов:
Insert into Клиенты (Имя, Телефон)
Values ('Петров Петр Петрович', {'444-4444', '123-4567', '777-8899'});
Тип данных MULTISET (мультимножество) появился впервые в SQL:2003. Если массив - это упорядоченное множество элементов, однозначно связанных с их местом в массиве посредством индекса, то мультимножество - неупорядоченная совокупность элементов. Этот тип данных используется очень редко.
Кроме этого существуют так называемые Пользовательские типы данных, создаваемые разработчиком по своему усмотрению, которые делят на две группы: отдельные типы – простейшие типы, создаваемые на основе ранее определенных типов, структурированные типы – создаваемые задания своих собственных атрибутов и методов (аналогия ООП).
3. Неопределенные значения
Если в ячейку (поле) таблицы вы вводите какие-то значения (буквы, цифры, пробелы или еще что-нибудь), то эти ячейки приобретают так называемые определенные значения. С определенными значениями, принадлежащими тому или иному типу, можно выполнять какие-то операции. Однако вы можете создать запись (строку) таблицы, ничего не вводя в ее поля (столбцы). Такая запись ничего не содержит. Запись в таблице, которая создана, но в которую не введены конкретные значения, называется пустой. В каждой ячейке пустой записи содержится так называемое неопределенное значение, обозначаемое через NULL. Значение NULL понимается как неопределенное или неизвестное.
Итак, каждый раз, когда вы добавляете в таблицу новую запись, не вводя в нее каких-либо конкретных значений, СУБД устанавливает в ее полях значение NULL.
Значение NULL вы можете интерпретировать так, как вам хочется, например, "еще не введено", "пока не известно". Однако независимо от смысловой интерпретации СУБД будет интерпретировать значение NULL вполне определенно.
Важно понимать, что число 0 или пустая строка ' ' являются вполне определенными значениями и отличаются от NULL, хотя визуально пустая строка и неопределенное значение могут отображаться одинаково - в виде пустой ячейки таблицы. Многие функции SQL возвращают в зависимости от обстоятельств какое-то определенное значение либо NULL. Это необходимо учитывать при составлении SQL-выражений, поскольку комбинация NULL и других вполне конкретных значений может дать тот или иной результат в зависимости от конкретной операции.
При проектировании баз данных можно указать, что некоторые столбцы не могут иметь значение NULL, т. е. их значения обязательно должны быть определены (при определении столбца в операторе CREATE TABLE указывается NOT NULL). Однако во многих случаях значения NULL являются очень полезными.
В следующем примере из таблицы клиенты выбираются все записи, в которых не определено имя клиента:
SELECT * FROM Клиенты WHERE Имя IS NULL;
4. Преобразование типов
Чтобы выполнить какую-либо операцию над данными различных типов, необходимо сделать преобразование типов. Точнее, необходимо выполнить приведение данных одного типа к другому типу, чтобы участвующие в операции данные были либо однотипными, либо их типы были соответствующими. Соответствующими типами являются:
строковые CHARACTER и CHARACTER VARYING;
все числовые типы;
дата, время, дата-время и соответствующие интервалы.
Соответствующие типы не обязательно приводить друг к другу.
Приведение значения одного типа к другому осуществляется с помощью функции CAST ():
CAST(выражение AS тип);
Например:
CAST('1234.52' AS NUMERIC (9,2));
CAST('2005-10-03' AS DATE);
CAST(CURRENT_TIMESTAMP (2) AS CHAR (20));
