Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Итоги

няется удаление или для которой выполняется обновление, с использованием внешней ссылки. Но эти подзапросы не могут ссылаться на модифицируемую таблицу, имя ко­

торой указано в предложении FROM.

В следующих главах будет рассмотрен вопрос создания новых таблиц.

175

г

Работаем на SQL

1.Предположим, существует таблица с именем Multicust, определения столбцов которой полностью совпадают с определениями таблицы Salespeople. Запишите

команду, которая вставляет в эту таблицу всех продавцов, имеющих более одно­

го покупателя.

2.Запишите команду, которая удаляет всех покупателей, не имеющих в настоящее

время заказов.

3.Запишите команду, увеличивающую на 20% комиссионные всех продавцов, об­ щее количество заказов которых превышает $3,000.

(Ответы см. в приложении А.)

176

17

Создание таблиц

Глава 17. Создание таблиц

Задача этой книги- рассмотреть как можно больше проблем, связанных с обра­

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

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

ность в выполнении этих операций может и не возникнуть, но следует на концепту­

альном уровне иметь представление об этих операциях, что повышает компетентность пользователя в области применения SQL и в плане понимания приро­ ды используемых таблиц. Это относится к разделу SQL, называемому языком опреде­ ления данных (Data Definition Language - DDL), в котором происходит создание объектов SQL.

В этой главе обсуждается и другой тип объектов данных SQL - индексы, приме­ няемые для более эффективной организации поиска и для того, чтобы убедиться, что значения отличаются друг от друга. Подобные операции выполняются невидимо (без участия пользователя), но при попытке ввести значения в таблицу они могут отвер­ гаться (не восприниматься), так как не являются уникальными. Это означает, что хотя две строки могут иметь в поле одинаковое значение, попе все равно будет обладать

своим уникальным индексом, в противном случае происходит нарушение ограниче­

ний целостности.

Команда CREATE TABLE

Таблицы определяются с помощью команды CREATE TABLE, создающей пустую таблицу - таблицу, не имеющую строк. Значения вводятся с помощью команды DML (языка манипулирования данными) INSERT (см. главу 15). Команда CREATE ТАВLЕ определяет имя таблицы и множество поименованных столбцов в указанном порядке. Для каждого столбца устанавливаются тип и размер. Каждая таблица должна иметь, по крайней мере, один столбец. Синтаксис команды CREATE TABLE:

CREATE TABLE <имя таблицы>

(<имя столбца> <тип данных> [(<размер>)], <имя столбца> <тип данных> [(<размер>)], ... );

Типы данных существенно различаются в разных програмVIных продуктах. Однако

в цепях совместимости со стандартом, они, как минимум, поддерживают стандартные

АNSI-типы. Они приводятся в приложении В.

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

Значение аргу.,,.ента размера зависит от типа данных. Если он не указывается, то система установит значение автоматически. Вероятно, это наиболее удачное решение

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

ют один и тот же размер, что позволяет впоследствии не заботиться о совместимости

178

Индексы

по объединению. Использование аргумента размера с некоторыми числовыми типами является непростой задачей. Для хранения больших чисел вы должны убедиться, что

поле имеет достаточную длину.

Тип данных, для которого обязательно следует указывать размер, - это CHAR. В

данном случае аргумент размера - целое число, задающее максимальное число сим­

волов, которые могут содержаться в поле. Реальное количество символов в поле мо­ жет изменяться от нуля (если в поле содержится NULL-значение) до заданного максимального значения. По умолчанию это 1, т.е. в поле может содержаться единст­ венный символ.

Таблицы принадлежат пользователю, который их создал, а имена этих таблиц долж­ ны различаться, как и имена столбцов, в пределах одной таблицы. Даже если различные таблицы принадлежат одному пользователю, они могут иметь одноименные столбцы. Примером такой ситуации является столбец с именем city, представленный в таблицах Salespeople и Customers. Пользователи, от,1ичные от владельца таблицы, ссылаются на

нее, указав имя владельца, непосредственно после которого следует точка, непосредст­

венно за ней - имя таблицы. Например, на таблицу Employees, созданную Smith, лю­ бой другой пользователь ссьmается таким образом: Smith.Employees. Предположим, в данном случае Smith является идентификатором пользователя. В SQL предполагается, что имя пользователя может использоваться в качестве идентификатора.

Следующая команда позволяет создать таблицу Salespeople:

CREATE TABLE Salespeople

(snum

integer,

sname

char( 10),

city

char( 10),

comm

decimal);

Порядок столбцов в определении таблицы существенен, он определяет порядок, в котором задаются значения элементов строк. Определения столбцов не должны зада­

ваться в отдельных строках, но они должны разделяться запятыми.

Индексы

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

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

В главе 18 будет рассмотрен более простой способ унификации значений, отсутство­ вавший в ранних версиях SQL, в которых для этих целей использовались только ин­

дексы.

179

Источник: https://studfile.net/preview/16418473/