Типы данных sql и операции
В языке SQL, как и в других языках программирования, имеется набор средств, позволяющих указать тип данных для каждого атрибута. Следует отметить, что определение типов данных является той частью, в которой конкретные реализации языка не согласуются с его официальным стандартом. Это объясняется следующими факторами. Во-первых, требуется обеспечить совместимость SQL с другими языками программирования. Во-вторых, и это более важно, реализация SQL для конкретной СУБД должна обеспечивать работу с теми типами данных, которые поддерживаются в этой СУБД. Поэтому при описании мы будем подразделять типы, стандартные для SQL, и типы, специфические для Oracle.
Символьные типы данных. К ним относятся типы:
CHAR(длина) – символьные строки фиксированной длины (при хранении недостающие символы дополняются пробелами). Длина не может превышать 255 символов;
Числовые типы данных. К стандартным числовым типам SQL относятся:
Integer – используется для представления целых чисел длиной в 4 байта. Для этого типа может задаваться синоним int;
SMALLINT - используется для представления целых чисел длиной в 2 байта;
NUMERIC, DECIMAL – числа с фиксированной запятой;
FLOAT(точность), REAL, DOUBLE PRECISION – используются для хранения чисел с плавающей точкой.
В некоторых командах SQL необходимо конкретно указывать значения посредством констант. Константы с фиксированной запятой представляются в виде обычных десятичных чисел: 21, -375.18, 62,357. Константы с плавающей запятой имеют такой же формат, как и в большинстве языков программирования: 1.5Е7, 2.5Е-6, -0.789Е54. Строковые константы должны быть заключены в кавычки: ”Минск”, ”Boston”.
Как и в других языках программирования, в языке SQL можно строить выражения с использованием имен атрибутов, констант, операций и функций, соединенных операторами: арифметическими(+- сложение, - - вычитание, * - умножение, / - деление), реляционные(= - равно, > - больше,< - меньше, >= - больше или равно, <= - меньше или равно, <> - не равно), логические(AND, OR, NOT).
. Перечислим специальные операции, которые выполняются в языке SQL.
операнд IN(списокзначений)
возвращает истину, если значение операнда совпадает хотя бы с одним значением из списка, заданного вторым операндом. Аналогично, операция
операнд NOT IN(списокзначений)
возвращает истину, если значение операнда не совпадает ни с одним значением из списка. В качестве второго операнда операции IN может быть записан запрос (эта особенность будет объяснена немного позже).
операция
операнд BETWEEN начзначение AND конзначение
возвращает истину, если значение операнда находится в интервале, определенном вторым и третьим операндами этой операции.
операция
операнд LIKE шаблон
возвращает истину, если первый операнд-строка удовлетворяет шаблону, В шаблоне могут использоваться символы-заместители ‘%’ (замещает любую подстроку) и ‘_’ (замещает один символ) 1. Так выражение
name LIKE ’К%’
истинно, если значение поля name начинается с символа ‘К’.
Особо следует сказать об агрегирующих функциях SQL. В процессе их выполнения анализируются несколько (возможно, что и все) строк таблицы, и результатом является обобщенное (агрегированное) значение. Сведем в таблицу описание агрегирующих функций:
SUM(выражение) |
Считает сумму значений указанного выражения для всех строк. Если число строк равно нулю, возвращает NULL, как и все остальные агрегирующие функции. |
MIN(выражение) |
Находит минимальное из значений указанного выражения для всех строк. |
MAX(выражение) |
Находит максимальное из значений указанного выражения для всех строк. |
AVG(выражение) |
Находит среднее арифметическое из значений указанного выражения для всех строк. |
COUNT(*) |
Возвращает число строк |
COUNT(ALL выражение) |
Возвращает число строк, для которых определено значение выражения |
COUNT(DISTINCT выражение) |
Возвращает число различных значений выражения |
В языке SQL используется ключевое слово NULL для хранения отсутствующих, пропущенных или неизвестных значений атрибута любого типа. Строго говоря, NULL не является значением в обычном понимании, и это следует учитывать при использовании значений атрибутов, которые могут находиться в состоянии NULL:
все операции, за исключением операции конкатенации строк, возвращают значение NULL, если значение хотя бы одного из операндов отсутствует;
для проверки на пустое значение необходимо использовать специальные конструкции IS NULL или IS NOT NULL вместо операций сравнения;
функции преобразования типа, имеющие NULL в качестве аргумента, также возвращают значение NULL;
логические операции расширяются до трехзначной логики по следующим правилам:
and |
T |
F |
N |
|
or |
T |
F |
N |
|
not |
T |
F |
N |
T |
T |
F |
N |
|
T |
T |
T |
T |
|
|
F |
T |
N |
F |
F |
F |
F |
|
F |
T |
F |
N |
|
|
|
|
|
N |
N |
F |
N |
|
N |
T |
N |
N |
|
|
|
|
|
в агрегирующих функциях для обеспечения точности и однозначности толкования результатов отсутствующие значения атрибутов игнорируются, за исключением функции count(*), которая возвращает общее число строк, в том числе и с пустыми значениями.