Главная » SQL, Базы данных » ОБЗОР ЯЗЫКА SQL

0

В языке SQL имеются операции как определения данных, так и манипулирования ими. Сначала мы познакомимся с операциями определения данных. На рис. 4.1 показано, как с помощью средств языка SQL определяется база данных поставщиков и деталей (ср. с рис. 3.09 в главе 3). Как можно видеть, определение включает по одному оператору CREATE TYPE для каждого из шести определяемых  пользователем типов (User-Defined Type — UDT) и по одному оператору CREATE  TABLE ДЛЯ каждой из трех базовых таблиц (как было указано в главе 3,  ключевое  слово TABLE В операторе CREATE TABLE обозначает именно базовую таблицу). Каждый оператор CREATE TABLE задает имя создаваемой базовой таблицы, имена и типы данных столбцов этой таблицы, а также первичный ключ таблицы и любые внешние ключи, присутствующие в ней (кроме того, может быть указана другая дополнительная информация, которая не показана на рис. 4.1). Приведем еще пару замечаний по синтаксису.

CREATE TYPE     S# … ; CREATE TYPE     NAME … ; CREATE TYPE     P# … ; CREATE TYPE     COLOR … ; CREATE TYPE                                        WEIGHT … ; CREATE TYPE                                        QTY … ;

CREATE TABLE S ( S# S#,

SNAME NAME, STATUS INTEGER, CITY CHAR(15), PRIMARY KEY ( S# ) ) ;

CREATE TABLE P ( P# P#,

PNAME NAME, COLOR COLOR, WEIGHT

WEIGHT, CITY CHAR(15)

, PRIMARY KEY { P# )

) ;

CREATE TABLE SP ( S# S#,

P# P#, :':

QTY QTY,

PRIMARY KEY ( S#, P# ), FOREIGN KEY ( S# ) REFERENCES S, FOREIGN KEY ( P# ) REFERENCES P ) ;

Рис. 4.1. Определение базы данных поставщиков и деталей средствами языка SQL

■   Обратите внимание, что символ "#", который иногда используется в  книге,  например, в названиях типов и в именах столбцов, на самом деле  не определен в стандарте SQL.

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

■     При использовании встроенного типа CHAR в определении таблицы на языке SQL

необходимо указывать соответствующую длину (на рис. 4.1 это значение равно 15).

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

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

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

SQL

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

SELECT, как показано в следующем примере.

SELECT *;                                           /* или SELECT S.* (т.е. символ "*" может быть уточнен с помощью */

FROM  S                                            /* точечного обозначения) */

В результате выполнения этого запроса будет получена копия всей таблицы S. Символ "*"_  это  сокращенное  обозначение  списка  имен  столбцов,  разделенного   запятыми (формальное определение этого понятия приведено в разделе 4.6). Во-первых, подразумевается, что в этом списке содержатся  заданные слева направо имена всех столбцов первой таблицы, указанной в конструкции FROM, в том порядке, в котором эти столбцы определены в указанной таблице. Во вторых, за именами столбцов первой таблицы в нем следуют заданные слева направо имена всех столбцов второй таблицы, указанной в конструкции FROM, в том порядке, в котором эти столбцы определены в указанной таблице (и т.д., применительно ко всем остальным таблицам, приведенным в конструкции FROM).

Примечание. Согласно стандарту SQL, выражение SELECT * FROM т, где г— это имя таблицы, может быть сокращено до простого выражения TABLE г.

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

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

INSERT

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

FROM  P

WHERE COLOR = COLOR(‘Red’) ;

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

DELETE FROM SP WHERE  P#

=

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

UPDATE S

SET  STATUS = 2 * STATUS , CITY = ‘Rome’

WHERE CITY = ‘Paris’ ;

Приведенный выше оператор UPDATE увеличивает в два раза код статуса всех поставщиков в Париже и вносит в базу данных информацию о том, что эти поставщики переехали в Рим.

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

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии