Программирование >>  Хронологические базы данных 

1 ... 28 29 30 [ 31 ] 32 33 34 ... 348


в языке SQL поддерживается множество значений, принимаемых по умолчанию, сокращений и альтернативных написаний. Например, существует сокращение CHAR для определителя CHARACTER. Квадратные скобки [ и ] в принятой нотащ1и используются для указания необязательных элементов (например, CHARACTER или BIT), при отсутствии которых будут использованы значения по умолчанию. (Это правило обычно подразумевается при описании в форме Бэкуса-Наура, сокращенно - BNF). И наконец, отметим, что в языке SQL требуется указывать конкретную длину или точность для определенных типов (например, CHAR) в отличие от нашего гипотетического синтаксиса, использовавшегося в главе 3. Очевидно, что язык SQL рассматривает эти длины и спецификаторы точности как часть определения типа (подразумевая, например, что значения CHAR (3) и CHAR (4) задают разные типы). Однако мы считаем, что лучше расценивать их (длины и точности) как ограничения целостности (что мы и делаем, в частности, в главе 8, упр. 8.4).

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

Выборка (RESTRICT): SELECT S#, Р#, QTY FROM SP

WHERE QTY < 150 ;

Результат:

Проекция (PROJECT): Результат:

CITY

SELECT S#, CITY

London

FROM S ;

Paris

Paris

London

Athens

Соединение (JOIN):

SELECT S.S#, SNAME, STATUS, CITY, P#, QTY

FROM S, SP

WHERE S.S# = SP.S# ;

Результат:

SNAME

STATUS

CITY

Smith

London

Smith

London

Smith

London

Clark

London

Puc. 4.2. Примеры выполнения операций выборки, проекции и соединения на языке SGL



Замечание. Пример операции соединения на этом рисунке подтверждает, что в языке SQL иногда необходимо использовать уточненные имена (например, S.St, SP.St), позволяющие устранить неоднозначность при указании столбцов. Согласно общему правилу уточненные имена допустимы всегда, а неуточненные имена допустимы, только если при этом не возникает неоднозначности.

Отметим, что в языке SQL поддерживается сокращенная форма предложения SELECT, как показано в следующем примере.

SELECT * - или SELECT S.* (т.е. символ * может быть уточнен) FROM S ;

В результате выполнения этого запроса будет получена копия всей таблицы S. Символ

- это сокращение для списка разделенных запятыми имен всех столбцов таблицы, указанной в предложении FROM. Имена столбцов перечисляются слева направо в том порядке, в котором они определены в этой таблице. Кстати, обратите внимание на комментарий, который начинается двумя дефисами и заканчивается символом новой строки.

Замечание. Выражение SELECT * FROM Т, где Т- это имя таблицы, может быть сокращено до простого выражения TABLE Т.

Значительно подробнее оператор SELECT обсуждается в главе 7 (раздел 7.7).

Перейдем к операциям обновления. Примеры операций INSERT, UPDATE и DELETE языка SQL приводились в главе 1. Однако во всех примерах этой главы использовались операции обработки отдельных строк. Тем не менее операции INSERT, UPDATE и DELETE, как и операция SELECT, обрабатывают данные на уровне множеств (некоторые упражнения и ответы к ним в главе 1 действительно демонстрировали эту возможность). Вот несколько примеров обновления на уровне множеств для базы данных поставщиков и деталей.

INSERT

INTO TEMP ( Р#, WEIGTH ) SELECT P#, WEIGTH FROM P

WHERE COLOR = Red ;

В этом примере подразумевается, что предварительно создана другая таблица TEMP с двумя столбцами: Pi и WEIGTH. Оператор INSERT вставляет в нее номера деталей и соответствующие веса всех деталей с цветом Red (красный).

UPDATE S

SET STATUS = STATUS * 2 WHERE CITY = Paris ;

Приведенный выще оператор UPDATE удваивает статус всех поставщиков в Париже.

DELETE

FROM SP

WHERE Pt = P2 ;

Этот оператор DELETE удаляет из таблицы SP все строки с информацией о детали с номером Р2.



Замечание. В язык SQL не включен прямой аналог операции реляционного присвоения. Но можно имитировать эту операцию, сначала удалив все строки из целевой таблицы, а затем выполнив для нее операции INSERT ... SELECT ... (как это сделано выше, в первом примере).

4.3. Каталог

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

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

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

2. На самом деле нужно говорить одна из информационных схем , а не просто информационная схема , поскольку, как мы убедились, в каждом каталоге имеется такая схема. Поэтому в общем случае все данные, которые доступны некоторому пользователю, не будут описаны с помощью единственной информационной схемы. Однако, чтобы упростить изложение материала, мы будем продолжать считать, что в действительности существует только одна схема.

В интересах точности необходимо отметить, что в стандарте языка SQL такое понятие, как база данных , в действительности просто отсутствует! По определению каталогом описывается то, что называется набором данных и зависит от реализации Однако нет никакие разумных аргументов, запрещающих подразумевать под этим понятием базу данных.



1 ... 28 29 30 [ 31 ] 32 33 34 ... 348

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика