- •Конспект лекций
- •Часть 3 «Язык запросов sql»
- •5.080406 – «Эксплуатация систем обработки информации и принятия решения»
- •Введение
- •Лекция 1 «Введение в структурированный язык запросов sql»
- •2 Введение в технологию клиент-сервер
- •3 Типы команд sql
- •4 Преимущества языка sql
- •2 Строки
- •3 Числа
- •4 Логические данные
- •5 Дата и время
- •6 Интервалы
- •2 Изменение таблицы
- •3 Удаление таблицы
- •4 Индексы
- •1 Ограничения для таблиц
- •2 Внешние ключи
- •1 Ограничения для таблиц
- •2 Внешние ключи
- •2 Оператор from
- •3 Оператор where
- •3.1 Сравнение
- •3.2 Диапазон
- •3.3 Принадлежность множеству
- •3.4 Соответствие шаблону
- •3.5 Значение null
- •2 Использование итоговых функций
- •3 Предложение group by
- •4 Предложение having
- •2 Использование подзапросов, возвращающих единичное значение
- •3 Использование операций in и not in
- •4 Использование ключевых слов any и all
- •5 Использование операций exists и not exists
- •1 Определение представления
- •2 Обновление данных в представлениях
- •1 Определение представления
- •2 Обновление данных в представлениях
2 Строки
Строковые данные (последовательности символов) имеют три главных строковых типа. Для столбца таблицы можно указать тип character (n) или char (n) (строка фиксированной длины), где n — максимальное количество символов, содержащихся в строке. Если (n) не указано, то предполагается, что строка состоит из одного символа. Если в столбец типа character (n) вводится m < n символов, то оставшиеся позиции заполняются пробелами.
Тип данных CHARACTER VARYING (n) или VARCHAR (n) (строка переменной длины) применяется тогда, когда вводимые данные имеют различную длину и нежелательно дополнять их пробелами. При этом сохраняется только то количество символов, которое ввел пользователь. В данном случае указание максимального количества символов обязательно (в отличие от character).
Данные типов character и character varying могут участвовать в одних и тех же строковых операциях.
Тип данных CHARACTER LARGE OBJECT (CLOB – большой символьный объект) используется для представления очень больших символьных строк (например, статей, книг и т. п.). В некоторых СУБД данный тип называется memo, а в других – text. С данными этого типа можно выполнять не все операции, предусмотренные для типов CHARACTER и CHARACTER VARYING. Так, их нельзя использовать в операциях сравнения, за исключением равенства и неравенства. Кроме того, столбцы этого типа не могут быть первичными и внешними ключами, а также быть объявлены как имеющие уникальные значения. Иначе говоря, при создании таблиц с помощью оператора create и объявлении столбцов типа clob нельзя использовать ключевые слова primary key, FOREIGN KEY и UNIQUE.
В следующем примере создается таблица с обычным символьным столбцом и столбцом типа clob, значения которого могут содержать 100 000 символов:
CREATE TABLE myTable
( FIELD1 CHARACTER (60),
FIELD2 CLOB (100000));
3 Числа
Числовой тип данных может быть двух видов точный и приблизительный. Точные числовые типы позволяют точно выразить значение числа. Некоторые величины имеют очень большой диапазон значений, и в таких случаях достаточно ограничиться некоторым приближенным их представлением с учетом технических возможностей компьютера (размеров регистра).
К точным числовым относятся следующие пять типов:
– integer – целое (без дробной части) число. Количество разрядов (точность) зависит от реализации SQL. В некоторых реализациях числа этого типа лежат в диапазоне от -2 147 483 648 до 2 147 483 647 (четырехбайтное целое число);
– smallint – малое целое число. Количество разрядов зависит от реализации SQL, но не больше количества разрядов integer в этой же реализации. В некоторых реализациях числа этого типа лежат в диапазоне от -32 768 до 32 767 (двухбайтное целое число);
– bigint – большое целое число. Количество разрядов зависит от реализации SQL и превышает количество разрядов числа типа integer;
– numeric (x, у) – число, в котором всего х разрядов (точность), из которых у разрядов (масштаб) отводится для дробной части. Если у не указано (numeric (х)), то для дробной части отводится количество разрядов, установленное в системе по умолчанию. Если не указаны ни х, ни у (numeric), тo принимаются обе эти величины, установленные по умолчанию. Например, если указан тип numerc (6, 2), то максимальное значение числа равно 9999.99;
– decimal (x, у) – десятичное число, в котором всего х разрядов, из которых у разрядов отводятся для дробной части. Если х или/и у не указаны, то принимаются значения по умолчанию. Этот тип очень похож на numeric. Отличие состоит в том, что если в decimal (х, у) указанные х и у меньше, чем допустимые реализацией SQL, то будут использоваться последние. Если х и у не указаны, то применяется система умолчаний. Например, вы задали для столбца тип decimal (6, 2). Если реализация SQL позволяет, то в этот столбец можно ввести числа, превышающие 9999.99. В отличие от decimal (х, у), тип numeric (x, у) жестко задает диапазон возможных значений числовой величины.
К приблизительным числовым типам относятся следующие три типа:
– real – вещественное число одинарной точности с плавающей разделительной точкой (эта точка «плавает», появляясь в различных местах числа). Например, 5.25, 5.257, 5.2573. Точность представления числа зависит от реализации SQL и оборудования. Например, 32-битовый компьютер дает большую точность, чем 16-битовый;
– double precision – вещественное число двойной точности с плавающей разделительной точкой. Точность представления числа зависит от реализации SQL и оборудования. Применяется для представления научных данных (например, результатов измерений) в широком диапазоне значений, т. е. как очень малых (близких к 0), так и очень больших;
– float (x) – вещественное число с плавающей разделительной точкой и минимальной точностью х, занимающее не более 8 байтов. Если компьютер может поддержать указанную точность, используя аппаратную одинарную точность, то система будет использовать арифметику одинарной точности. Если указанная точность требует арифметики с двойной точностью, то система будет использовать ее. Данный тип следует применять, если предполагается возможность переноса базы данных на другую аппаратную платформу, отличающуюся размерами регистров. Пример значения типа float: 5.318E-24 (т.е. 5.318, умноженное на 10 в степени -24). Такую же форму представления имеют и числа типа real и double precision.
При создании таблиц целочисленные типы применяются для столбцов, содержащих разного рода идентификаторы, например, номера (коды) клиентов, товаров, заказов и т. п. Разумеется, если содержимое столбца должно быть целым числом (например, количество ящиков, бутылок, штук и т. п.), то тип этого столбца естественно определить как integer, smallint или bigint.
Допустим, в таблице клиенты имеется столбец ID_клиента, содержащий уникальные идентификаторы клиентов. Если количество клиентов не превышает 32 000, то тип столбца можно определить как smallint. Если в вашей таблице будут храниться сведения о сотнях тысяч клиентов, то тип столбца id_клиента следует определить как integer.
Если столбец в проектируемой таблице должен содержать числа с дробной частью, то для него можно задать какой-нибудь нецелочисленный тип. Если вы не уверены, что применить: точные числовые типы или приблизительные, выбирайте точные (numeric, decimal). Они требуют меньше ресурсов и дают точные результаты. Если в столбце предполагается хранить данные из очень широкого диапазона (и очень малые, и очень большие числа), то используйте приблизительные типы данных (float, real).
