Программирование >>  Реляционные базы данных 

1 ... 63 64 65 [ 66 ] 67 68 69 ... 125


Глава 5

Язык баз данных SQL

Наиболее широко применяемые системы реляционных БД запрашивают и изменяют БД с помошью языка SQL (Structured Querj Language - струкзурированный язык запросов) Основная часть SQL эквива.пеитна реляционной алгебре, но некоторые его важные свойства, например агрегация и изменения БД, выхолят за ее прел ел 1.1.

В SQL множество различных днатектов. Во-первых, есть два главных стандарта: ANSI (American National Standards Institute) SQL и обновлениый стандарт SQL-92, lUiH S<3L2, принятый в 1992 г Существует также формирующийся стандарт SQL3, дополняющий SQL2 новыми средствами, таю1мп как рекурсия, триггеры н объск-ты. Во-вторых, существуют версии SQL, созданные главными поставщиками систем управления БД. Все они включают в себя исходный стандарт ANSI н в знач1гтель-ной степени согласуются с новейшей версией SQL2, но каждый из них отличается от SQL2 своими вариантами и расширениями, включая некоторые средства предлагаемого стандарта SQL3.

В этой и в следующих дпух главах описывается применение SQL в качестве языка запросов. В данной главе основное внимание уделено базовому интерфейсу для SQL, т.е. SQL рассматривается как автономный язык запросов, при помощи которого с терминала в БД посылаются запросы или требования о внесении изменений. Ответы на запросы выводятся на экран терминала. При обсуждении SQL мы в основном придерживаемся стандарта S0L2. выделяя средства, имеющиеся почти во всех коммерческих системах и в более раннем стандарте ANSL В некоторых случаях, когда SQL2 неадекватен рассматриваемому вопросу, мы будем следовать новейшей из доступных версий - стандарту SQlI

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

5Л Простые запросы в SQL

Возможно, наиболее простая форма запроса в SQL - это запрос об удовлетворяющих некоторому условию кортежах одного отношения. Такой простой запрос аналогичен выбору в реляционной алгебре. В нем, как почти во всех запросах SQL, применяются к.чючевые слова SELECT, FROM и WHERE, характеризующие язык SQL.



year

length

inColor 1 studioNamo

producerCH

Pretty Woman

1990

true 1 Disney

Пример 5.1. В этом и в последующих примерах используется схема БД, введенная в разделе 3.9. Соответствующие схемы отношений воспроизведены на рис. 5.1. R разделе 5.7 будет показано, как выразить информацию схемы в SQL, а пока предполагается, что каждое отношение и области, упомянутые в разделе 3.9, имеют соответствие в SQL.

Movie(tit)e, year, length. inColor. studioName, prodocerC*) Starsln(movieTitle, movieYear, starName) {

MOvieStar(name. address, gender, birthdate) ;

MovieExec(name. address cert#. netWorth) )

Studio(name, address, presC#)

Рис. 5.1. Пример аемы БД

Сформулируем запрос к отношению

MOvie(titla, year, length, inColor studioName. producerC#)

обо iicex фильмах, выпушенных студией Disney Studios в 1990 г. В SQL он записывается следующим образом:

SELECT ,

FROM Movie j

WHERE StudioName = Disney AND year = 1990;

Форма этого запроса выбрать из.... где... характерна для большинства запросов SQL.

Пункт FROM указывает на отношение, к которому принадлежит запрос. В данном примере запрос касается отношения Movie.

Пункт WHERE - условие, которое во многом похоже на условие выбора в реляционной алгебре и которому должны удовлетворять кортежи для соответствия запросу. Здесь условие заключается в том, чтобы атрибут кортежа StudioName имел значение Disney , а атрибут кортежа уааг - значение 1990 . Все кортежи, имеющие указанные значения атрибутов, удовлетворяют условию, остальные - не удовлетворяют.

Пункт SELECT показывает, какие атрибуты кортежей, удовлетворяющих условию, становятся частью ответа. Знак * в данном примере указывает на то, что порождается полный кортеж. Результат запроса - это отношение, состоящее из всех кортежей, созданных при псютроении ответа.

Один из способов интерпретации этого запроса заключается в том, чтобы рассмотреть каждый кортеж отношения, упомянутого в пункте FROM, и применить к нему условие, указанное в пункте WHERE Точнее говоря, любой атрибут, упомянутый в пункте WHERE, заменяется значением компонента кортежа для данного атрибута. Затем оценивается условие, и если оно выполняется, то компоненты, возникающие в пункте SELECT, становятся одним из кортежей ответа. Таким образом, результат рассматриваемого запроса -это кортежи для фильмов, выпушенных стДией Disney в 1990 г., например для фильма Preiiy Woman .

Когда процессор запросов встречает в отношении Movie кортеж



1 TiKiiNt образом, ключевое сяооо SELECT ялыка SQL деНствительно соотвстсттет оператору проекиии в речяиионной airc6pe. а сс оператор оыбира coorBercrajCT nvHKty WHERE: i:iпроел SQL

Здесь 999 - вымышленный номер сертификата продюсера этого фильма. В условии пункта WHERE значение Disney подставляется вместо атрибута studioName, а значение 1990 - вместо атрибута year, так как в рассматриваемом кортеже они являются значениями этих атрибутов. В результате пункт WHERE приобретает вид;

WHERE Disns/=-Disney- AND 1990 = 1990

Поскольку оно явно истинно, кортеж для Preiry Иввмя выдерж;1л проверку и сшл частью результата запроса. О

5-1.1 Проекция в SQL

Некоторые компоненты выбранных кортежей при желании можно устранить, т.е. проеиировать порожденное запросом SQL отношение на некоторые из его атрибутов. Вместо * в пункте SELECT разрс1иается перечислить любые атрибуты отношения, упомянутого в пункте FROM. Тогда результат проецируется именно на них.

Пример 5.2. Допустим, нужно изменить запрос из примера 5.1. чтобы получить только название фильма и его продолжительность. Тогда следует написать:

SELECT title, length FROM Movie

WHERE StudioName =Disne/ AND year =1990;

В резулыате получилась таблица с двумя столбцами, озаглавленными title и lengtti. Кортежами этой таблицы являются пары, каждая из которых состоит нз названия н длительности фильма, выпущенного студией Disney в 1990 г. Например:

Jitle i length

Pretty Woman 119 □

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

Пример 5.3. Из.менив пример 5.2, можно получить отношение с атрибутами name и duration вместо title и length.

SELECT title AS name, length AS duration FROM Movie

WHERE StudioName = Disnsy AND year = 1990;

В результате получается такое же множество коргежей, как и в примере 5.2. но столбцы в не1\1 озаглавлены агрибутами name и duration, Например:

name i duration

Pretty Woman ; 119 □

В предложении SELECT вместо атрибутов можно использовать формулу.



1 ... 63 64 65 [ 66 ] 67 68 69 ... 125

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