|
Программирование >> Реляционные базы данных
Глава 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.
Пример 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 вместо атрибутов можно использовать формулу.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |