|
Программирование >> Хронологические базы данных
в языке 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 ; Результат:
Соединение (JOIN): SELECT S.S#, SNAME, STATUS, CITY, P#, QTY FROM S, SP WHERE S.S# = SP.S# ; Результат:
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 такое понятие, как база данных , в действительности просто отсутствует! По определению каталогом описывается то, что называется набором данных и зависит от реализации Однако нет никакие разумных аргументов, запрещающих подразумевать под этим понятием базу данных.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |