Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

UPDATE Сотрудники




SET Фамилия = Петров

WHERE Фамилия 'Иванов';

По-русски данное выражение выглядит так:

ОБНОВИТЬ сотрудники УСТАНОВИВ Фамилия РАВНЫМ 'Петров' ГДЕ Фамилия = 'Иванов'',

Вам не нужно подробно описывать действия, которые должна выполнить СУБД, чтобы выбрать из таблицы указанные в запросе данные. Вы просто описываете, что желаете получить. В результате выполнения запроса СУБД возвращает таблицу, содержащую запрошенные вами данные. Если в базе данных не оказалось данных, соответствующих запросу, то будет возвращена пустая таблица.

Однако последние версии SQL поддерживают операторы управления вычислениями, свойственные процедурным языкам управления (операторы условного перехода и цикла). Поэтому SQL сейчас это не чисто декларативный язык.

Кроме выборки, добавления, изменения и удаления данных из

таблиц, SQL позволяет выполнять все необходимые действия по созданию, модификации и обеспечению безопасности баз данных. Все эти возможности распределены между тремя компонентами SQL:

Ø DML (Data Manipulation Language — язык манипулирования данными) предназначен для поддержки базы данных: выбора (SELECT), добавления (INSERT), изменения (UPDATE) и удаления (DELETE) данных из таблиц. Эти операторы (команды) могут со- держать выражения, в том числе и вычисляемые, а также подзапросы — запросы, содержащиеся внутри другого запроса. В общем случае выражение запроса может быть настолько сложным, что сразу и не скажешь, что он делает. Однако сложный запрос можно мысленно разбить на части, которые легче анализировать. Аналогично, сложные запросы создаются из относительно простых для понимания выражений (подзапросов).

Ø DDL (Data Definition Language — язык определения данных) предназначен для создания, модификации и удаления таблиц и всей базы данных. Примерами операторов, входящих в DDL, ЯВЛЯЮТСЯ CREATE TABLE (создать таблицу), CREATE VIEW (создать представление), CREATE SHEMA (создать схему), ALTER TABLE (изменить таблицу), DROP (удалить) и др.

DCL (Data Control 'Language — язык управления данными) предназначен для обеспечения защиты базы данных от раз- личного рода повреждений. СУБД предусматривает некоторую защиту данных автоматически. Однако в ряде случаев следует предусмотреть дополнительные меры.

 

. Типы данных

Во всех языках программирования, а также в SQL важное место занимают поддерживаемые типы данных. Данные, которые хранятся в памяти компьютера и подвергаются обработке, можно отнести к различным типам. Понятие типа данных возникает естественным образом, когда необходимо применить к ним операции обработки. например, операция умножения применяется к числам, т. е. к данным числового типа. А что получится, если умножить слово "Вася" на число 25? Поскольку трудно дать вразумительный ответ на этот вопрос, то напрашивается вывод: некоторые операции не следует применять к разнотипным данным. Мы также не знаем, что должно получиться в результате умножения слов "Саша" и "Маша", поэтому заключаем, что определенные операции вообще не применимы к данным некоторых типов. С другой стороны, существуют операции, результат которых зависит от типа данных. Например, операция сложения, обозначаемая символом (+), может применяться и к двум числам, и к двум строкам, состоящим из произвольных слов. В первом случае результатом применения этой операции будет некоторое число, а во втором — строка, получающаяся путем приписывания второй строки к концу первой. В случае строк операцию сложения еще называют склейкой или конкатенацией. Операции, применимые к различным типам данных, но обозначаемые одним и тем же символом, называют перегруженными. Так, операция, обозначаемая символом (+), является перегруженной: применительно к числам она выполняет арифметическое сложение, а применительно к строкам символов — склейку.

Типы данных столбцов таблиц базы данных могут отличаться от типов данных, поддерживаемых SQL. Это обстоятельство необходимо учитывать при составлении SQL-запросов. Так, например, если в таблице сотрудники столбец зарплата определен по каким-либо причинам как символьный, то следующий запрос приведет к ошибке из-за несоответствия типов сравниваемых данных:

SELECT Фамилия FROM Сотрудники WHERE Зарплата > 25000;

Данный запрос пытается получить список всех сотрудников, у которых зарплата больше 25 000. Однако в таблице сотрудники столбец зарплата содержит символьные, а не числовые данные. В условии запроса (оператор WHERE) сравниваются символьное и числовое значения. На практике данная проблема легко преодолима с помощью функции CAST() приведения значения к требуемому типу. Кроме того, между некоторыми типами столбцов таблицы и данных, участвующих в SQL- выражениях, существуют соответствия, допускающие их совместное использование. Такие типы называют согласованными.

Различные СУБД поддерживают несколько отличающиеся наборы типов данных для столбцов таблиц базы данных. Аналогичная ситуация и с типами данных, поддерживаемых различными версиями и реализациями SQL. Вместе с тем, всегда имеются типы данных, которые поддерживаются всеми реализациями SQL.

В спецификации SQL:2003 признаны пять предопределенных общих типов, внутри которых могут быть подтипы:

Ø строковый (символьный):

CHARACTER (ИЛИ CHAR)

CHARACTER VARYING (ИЛИ VARCHAR);

CHARACTER LARGE OBJECT (ИЛИ CLOB);

Ø числовой:

точные числовые типы:

1. INTEGER;

2. SMALLINT;

3. BIGINT;

4. NUMERIC;

5. DECIMAL;

приблизительные числовые типы:

1.REAL;

2. DOUBLE PRECISION;

3. FLOAT;

Ø логический (булевский) — BOOLEAN;,

Ø даты-времени:

DATE;

TIME WITHOUT TIME ZONE;

TIME WITH TIME ZONE;

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP WITH TIME ZONE;

Ø интервальный.

Кроме того, существуют особые типы: ROW (запись), ARRAY (массив), MULTISET (мультимножество).

 

Строки

Строковые данные (последовательности символов) имеют три главных строковых типа. Для столбца таблицы можно указать тип 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)

);

Здесь оператор CREATE TABLE создает таблицу с именем myTable, которая состоит из двух столбцов с именами FIELD1 и FIELD2, типы столбцов указаны рядом с их именами.

Различные языки используют различные наборы символов. Даже английский и немецкий наборы отличаются, не говоря уж о русском и китайском. Система может быть настроена на некоторый набор символов, принимаемый по умолчанию. Однако при этом можно использовать и другие национальные символьные наборы. Так, в следующем примере создается таблица, в которой столбец FIELD1 объявляется как строковый с набором символов, принятым по умолчанию, а столбец FIELD2 — как строковый с греческим набором символов:

CREATE TABLE myTable

(

FIELD1 CHARACTER (60),

FIELD2 CHARACTER VARYING (80) CHARACTER SET GREEK

);

Значения строкового типа в SQL-выражениях заключаются в одинарные кавычки. Например, ' иванов иван иванович ',

‘12345 рублей’, ‘тел -. (812) 123-4341’. Пустея строка не содержит ни одного символа и имеет вид: ' ’. Строка, содержащая один или более пробелов, не является пустой.

Иногда бывает так, что строковый столбец в таблице содержит только числа (точнее, строки, содержащие цифры, знаки числа и разделительные точки). Чтобы использовать такие данные в операциях с числами, необходимо привести данные одного типа к другому типу с помощью функции CAST () Значения типа CHARACTER и CHARACTER VARYING (VARCHAR) совместимы в том смысле, что они могут участвовать как операнды 1 в строковых операциях и операциях сравнения.

Числа

Числовой тип данных может быть двух видов — точный и приблизительный. Точные числовые типы позволяют точно выразить значение числа. Некоторые величины имеют очень большой диапазон значений, и в таких случаях достаточно ограничиться некоторым приближенным их представлением с учетом технических возможностей компьютера (размеров регистра).

К точным числовым относятся следующие пять типов:

Ø INTEGER — целое (без дробной части) число. Количество раз- рядов (точность) зависит от реализации SQL. В некоторых реализациях числа этого типа лежат в диапазоне от

— 2 147 483 648 до 2 147 483 647 (четырехбайтное целое число);

Ø SMALLINT — малое целое число. Количество разрядов зависит от реализации SQL, но не больше количества разрядов INTEGER в этой же реализации. В некоторых реализациях числа этого типа лежат в диапазоне от — 32768 до 32767 (двухбайтное целое число);

Ø BIGINT — большое целое число. Количество разрядов зависит от реализации SQL и превышает количество разрядов числа Типа INTEGER;

Ø NUMERIC(х, у) — число, в котором всего х разрядов (точность), из которых у разрядов (масштаб) отводится для дробной части. Если у не указано (NUMERIC (x)), то для дробной части отводится количество разрядов, установленное в системе по умолчанию. Если не указаны ни х, ни у (NUMERIC), то принимаются обе эти величины, установленные по умолчанию. Например, если указан NUMERIC (6, 4), то максимальное значение числа равно 9999. 99;

DECIMAL (х, y) — десятичное число, в котором всего х разрядов, из которых у разрядов отводятся для дробной части. Если х или/и.у не указаны, то принимаются значения по умолчанию. Этот тип очень похож на NUMERIC. Отличие состоит в том, что если в DECIMAL (х, у) указанные х и у меньше, чем допустимые реализацией SQL, то будут использоваться по- следние. Если х и у не указаны, то применяется система умол- чаний. Например, вы задали для столбца тип пвс|мАь (6 2)

Если реализация SQL позволяет, то в этот столбец можно вве- сти числа, превышающие 9999. 99. В отличие от пК~пяь (х, у), тип ьп)мквтс (х, у) жестко задает диапазон возможных зна- чений числовой величины.

К приблизительным числовым типам относятся следующие три типа:

ввлт. — вещественное число одинарной точности с плавающей разделительной точкой (эта точка "плавает", появляясь в различных местах числа). Например, 5.25, 5.257, 5.2573. Точность представления числа зависит от реализации SQL и оборудования. Например, 32-битовый компьютер дает большую точность, чем 16-битовый;

О

О DOUBLE PRECISION — вещественное число двойной точности

с плавающей разделительной точкой. Точность представления числа зависит от реализации SQL и оборудования. Применяет- ся для представления научных данных (например, результатов измерений) в широком диапазоне значений, т. е. как очень ма- лых (близких к 0), так и очень больших;

FLOAT (x) — вещественное число с плавал)щей разделитель- ной точкой и минимальной точностью х, занимающее не более

 

вг Глава 2

8 байтов. Если компьютер может поддержать указанную точ- ность, используя аппаратную одинарную точность, то система будет использовать арифметику одинарной точности. Если указанная точность требует арифметики с двойной точностью, то система будет использовать ее. Данный тип следует приме- нять, если предполагается возможность переноса базы данных на другую аппаратную платформу, отличающуюся размерами регистров. Пример значения типа FLOAT: 5. 318Е-24 (т. е. 5. 318, умноженное на 10 в степени -24). Такую же форму представ- ления имеют и числа типа REAL И DOUBLE PRECISION.

При создании таблиц целочисленные типы применяются для столбцов, содержащих разного рода идентификаторы, например, номера (коды) клиентов, товаров, заказов и т. п. Разумеется, если содержимое столбца должно быть целым числом (например, ко- личество ящиков, бутылок, штук и т. п.), то тип этого столбца естественно определить как INTEaER, ямльыит или BIaINT.

Допустим, в таблице клиенты имеется столбец ID клиента, со- держащий уникальные идентификаторы клиентов. Если количе- ство клиентов не превышает 32 000, то тип столбца можно опре- делить как ямльыит. Если в вашей таблице будут храниться сведения о сотнях тысяч клиентов, то тип столбца ID клиента следует определить как INTEGER.

Если столбец в проектируемой таблице должен содержать числа с дробной частью, то для него можно задать какой-нибудь неце- лочисленный тип. Если вы не уверены, что применить: точные числовые типы или приблизительные, выбирайте точные (NUMERIC,)экспо,). Они требуют меньше ресурсов и дают точные результаты. Если в столбце предполагается хранить данные из очень широкого диапазона (и очень малые, и очень большие чис- ла), то используйте приблизительные типы данных (FLOAT, ввлт.).

Обратите внимание, что строка, содержащая число (например,

'12345.47 '), является данным строкового, а не числового типа.

Чтобы в SQL-выражениях сравнивать строковые и числовые дан- ные, необходимо один из типов привести к другому с помощью функции слит ().

Основы SQL

2.2.3. Логические данные

В этой части математической логики, основоположником кото- рой был английский математик Джон Буль, данные имеют только два значения — ИСТИНА и ЛОЖЬ, обозначаемые как true и false соответственно. Данные логического типа получаются в результате операций сравнения. Например, результатом вычис- ления выражения 3 (5 является ИСТИНА, а выражения 2 + 3 = 10 — ЛОЖЬ.

В SQL тип данных вооьвлм (булевский) имеет три значения— true, false и unknown. Значение unknown (неизвестное) было вве- дено для обозначения результата, получающегося при сравнении со значением мпьь (неопределенное). Если пользователь еще не ввел в ячейку таблицы никакого значения, то эта "пустая" ячейка содержит значение NULL, интерпретируемое как неизвестное или неопределенное значение.

Результатом любой операции сравнения true или false с мпьь или с unknown всегда является unknown.

В SQL-выражениях логические значения заключаются в кавычки, например, 'TRUE' или 'true'.

2.2.4. Дата и время

Тип плтл (дата) предназначен для хранения значений даты, эле- менты которых расположены в следующем порядке: год (4 цифры), дефис (-), месяц (2 цифры), дефис, день (2 цифры). Таким образом, значения даты занимают 10 позиций, например,

2005-10-02.

Данные этого типа могут содержать любую дату с 0001 года по 9999 год.

Для представления времени предусмотрены два типа: 0 ттмш хттнопт тамг ZONE (время без часового пояса) предна- значен для хранения значений времени, элементы которых расположены в следующем порядке: часы, двоеточие, минуты, двоеточие, секунды. Часы и минуты представляются двумя циф-

 

84

Глава 2

рами, а секунды могут бьггь представлены двумя и более цифра-

ми (если требуется дробная часть), например 18: 35: 19. 547.

Длина дробной части секунд зависит от реализации, но внут- реннее представление времени должно иметь не менее 6 цифр. По умолчанию время данного типа представляют без дробной части секунд. Чтобы указать, что время должно быть пред- ставлено с л цифрами после разделительной точки, достаточно использовать такой синтаксис: т1мж ы1тнопт т1мж ZONE (и). Например, чтобы кроме секунд указывались еще и миллисе- кунды, следует определить тип как т1мж WI THOvT TIME ZONE (3). Длина, данных рассматриваемого типа без дробной части равна 8 символам, а с дробной частью — 9 плюс коли- чество цифр после разделительной точки. Для задания време- ни без указания часового пояса с использованием установок по умолчанию можно использовать короткий синтаксис —.

TIME;

т1мж ы1тн т1мж ZONE (время с часовым поясом) — такой же тип данных, как и тпп х1тнопт т1мж ZONE. Отличие заклю- чается лишь в том, что к значению времени добавляется еще и информация о разности между местным и всемирным вре- менем. Всемирное время (Universal Типе Coordinated, UTC)— это время по Гринвичу, т. е. время нулевого меридиана, про-— ходящего через г. Гринвич в Великобритании (Greenwich Меап Типе, GMT). Значение разности между локальным и всемирным временем находится в диапазоне от -12:59 до 13:00. Длина данных рассматриваемого типа равна длине дан- ных типа т?мж WITHOt)T TIME ZoNE плюс 6, поскольку допол- нительная информация о разности времен занимает 6 позиций (дефис, знак (+) или (-), 2цифры для часов, двоеточие, 2 цифры для минут).

Для одновременного представления даты и времени служат сле- дующие два типа:

0 TIMESTAMP WITHOUT TIME ZONE (дата и время без часового поя- са). Элементы данных этого типа имеют такие же характери- стики, как и для данных типа DATE и т1мж ы1тнопт тпп ZONE, за исключением одного: данные типа т1мжятАмр и1тнопт

 

Основы SQL 85

TIME волЕ по умолчанию имеют 6 цифр в дробной части се- кунд, а не О, как в типе ТьмЕ WITHOUT ТьмЕ ZONE. Для указания количества цифр в дробной части используется синтаксис TIMESTAMP WITHOUT TIME ZONE (и). Если дробной части нет, то данные занимают 19 позиций: 10 позиций для даты, один пробел и 8 позиций для времени. Если определена дробная часть, то длина данных равна 20 плюс количество цифр в дроб- ной части секунд;

CI Т1мЕятлмр хати Т?мЕ ZONE (дата и время с часовым поя-

с сом) — такой же тип данных, как и Т1мЕЯТлмр ы|тн ТЬмЕ водЕ. Отличие состоит в том, что к значению времени добав- ляется еще и информация о разности между местным и все- мирным временем (см. ТЬмЕ WI TH ТЬмЕ ZONE). Дополнитель-

— ная информация занимает 6 позиций. Данные типа Т1мЕятлмг хати ТЬмЕ ZONE без дробной части занимают 25 позиций,

=- с дробной частью — 26 плюс количество цифр в дробной час- ти секунд.

Чтобы представить в SQL-выражении дату, время или дату- время, необходимо использовать функцию CAST() приведения к заданному типу. Допустим, в таблице продажи имеется столбец дата типа DATA. Чтобы получить сведения из этой таблицы за пе- риод после 2005-09-30, следует выполнить такой запрос:

ЯЕ? В Т * РЖИ Продажи WHERE дата) CAST('2005-09-30' AS DATE);

Здесь строка, содержащая дату, приводится к типу DATA, и полу- ченный результат участвует в операции сравнения с данными столбца дата.

В языке SQL имеются три функции, которые возвращают теку- щие дату и время:

CI CURRENT DATE — возвращает текущую дату (тип DATE). На-

пример, 2005-06-18;

О CURRENT TIME (число) — возвращает текущее время (тип ТьмЕ). Целочисленный параметр число указывает точность представления секунд. Например, при число = 2 секунды бу- дут представлены с точностью до сотых (две цифры в дробной части): 12:39:45.27;

 

 

86 Глава 2

D CURRENTTIMESTAMP(vncao) — возвращает дату и время (тип ТТМЕяТАМР), например 2005-06-18 12: 39: 45. 27. Целочис-

ленный параметр число указывает точность представления секунд.

2.2.5. Интервалы

Интервал представляет собой разность между двумя значениями типа дата-время. SQL поддерживает два типа интервалов: год- месяц и день-время. Интервал типа год-месяц — это количество лет и месяцев между двумя датами, а интервал день-время — ко- личество дней, часов, минут и секунд между двумя моментами в пределах одного месяца. Нельзя смешивать вычисления, ис- пользующие интервал год-день, с вычислениями, в которых используется интервал день-время.

Интервал времени можно задать двумя способами: в виде на-

чального и конечного моментов или в виде начального момента и длительности, например:

0 (TIME ' 12: 25: 30 ', TIME ' 14: 30: 00 ') — интервал, заданный

начальным и конечным моментами;

0 (TIME ' 12: 45: 00 ', INTERVAL ' 5 ' HOUR) — интервал, задан-

ный начальным моментом и длительностью в часах.

Чтобы задать значение типа интервал, используется такой син- таксис:

zNTERVAL ' длина ' УЕЗД I MONTH I»> I HOUR I MINUTE I SECON)3

Здесь длина — длина интервала, после которой указывается еди- ница измерения (возможные значения указаны через вертикаль- ную черту):

D vEAR — год;

0 монти — месяц; D DAY — день; 0 HOUR — час;

0 ипчптЕ — минута; D яЕсонп — секунда.

 

 

Основы SQL

Например, для задания интервала длиной 15 дней следует ис- пользовать выражение INTERVAL '5' пль.

Еще один пример использования интервалов приведен'в разд. 3.2.1 (предикат OVERLAPS).

2.2.6. Специальные типы данных

К специальным типам данных относятся следующие типы О вох — запись;

O лкия — массив; О жл.тхякт — мультимножество. Использование этих типов данных нарушает принцип, согласно которому таблицы реляционной базы данных должны находиться в первой нормальной форме. Напомню, что любой столбец таб- лицы в первой нормальной форме не может содержать структу- рированные данные, например, набор полей: значения столбцов должны быть едиными и неделимыми. Тем не менее, жизнь неод- нократно предлагает искушения отступить от теории в пользу эф- фективности. Если вы не отступаете от первой нормальной фор- мы, то возникающие недоразумения в поддержке реляционных баз данных вы можете объяснить нарушениями законов реляци- онной теории. В противном случае для получения объяснений требуются более тщательные расследования происшедшего. Да, вне теории трудно жить в крайних случаях, хотя и более удобно в обычных обстоятельствах. Рассмотрим специальные типы дан- ных подробнее.

Тип вох (запись) позволяет объявить набор полей (запись) в ка- честве значения столбца таблицы. Таким образом, строки таблиц могут содержать записи.

Во многих базах данных имеются таблицы, содержащие сведения об адресах. Адрес, как известно, состоит из нескольких элемен- тов, таких как почтовый индекс, страна, город, улица и т. д. Если в таблице завести один символьный столбец адрес, в котором поместить все элементы адреса просто как символьную строку,

 

Глава 2

то дальнейшая работа с отдельными элементами адреса будет довольно хлопотным делом (вам придется использовать функции разбора строк). Поэтому на практике для адреса обычно заводят несколько столбцов, по одному на каждый элемент (например, столбцы город, Улица и т. д.). Если же использовать тип Row, то можно хранить все элементы адреса как значения одного столб- ца. В следующем примере сначала на основе типа ком создается тип айаг, а затем он назначается столбцу адрес при создании таблицы Клиенты'.

CREATE ROW TYPE addr

PostCode VARCHAR (9),

City

VARC)(AR (з0),

Street VARCHAR (30), новые ~АкСИАк (10)

CREATE TABLE Клиенты

тп клиента тетЕ(як РктМАк~ КЕУ, ~АкСИАк (2 5), addr,

Телефон VARCHAR (1о)

Тип данных кои появился впервые в SQL 1999, а раньше без него прекрасно обходились.

Тип ARRAY (массив) также впервые появился в SQL:1999 и нару- шает принцип первой нормальной формы, но несколько иначе, чем тип Row. Тип лкклт дает возможность одному из обычных типов иметь множество значений внутри значения одного таб- личного столбца. Например, клиент может иметь несколько но- меров телефонов и вы можете пожелать хранить их все как одно многозначное значение единственного столбца телефон, а не как обычные значения нескольких столбцов телефон1, телефон2

Основы SQL B9

и т. п. Вот пример, в котором каждая ячейка столбца телефон может содержать до трех номеров телефона:

CREATE TABLE Клиенты

Пэ клиента INTEGER PRIMARY KEY, VARCHAR (2 5), Адрес

Телефон addr, VARCHAR (15) ARRAY [3]

Следующее SQL-выражение добавляет в таблицу клиенты новую запись и вводит в нее значения столбцов:

INSERT INTO Клиенты (Имя, Телефон)

VALUES ('Петров Петр Петрович', {'444-4444', '123-4567', '777-8899'));

Тип данных жтьт?янт (мультимножество) появился впервые в SQL:2003. Если массив — это упорядоченное множество эле- ментов, однозначно связанных с их местом в массиве посредст- вом индекса, то мультимножество — неупорядоченная совокуп- ность элементов. Этот тип данных используется очень редко.

2.2.7. Пользовательские типы данных

Пользовательские типы данных (User Defined Types, UDT) опреде- ляются пользователем по своему усмотрению для каких-то своих целей. Данная возможность впервые появилась в SQL:1999. Одно из важнейших направлений применения заключается в устране- нии некоторых несоответствий между основными типами данных SQJ. и типами данных в базовом языке, на котором пишутся при- ложения. К созданию своих типов данных обычно прибегают программисты, а не рядовые пользователи баз данных, даже вла- деющие языком SQL. Тем не менее, им также не помешает озна- комиться в общих чертах с этой возможностью SQL.

 




Поделиться с друзьями:


Дата добавления: 2017-01-14; Просмотров: 321; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.115 сек.