bc284d54

Примеры запросов на языке SQL


Приведем несколько примеров того, как составляются различные типы SQL-запросов. Мы хотим передать дух универсальности и мощи оператора SELECT. Все таблицы, используемые в запросах, входят в учебную базу данных WORLD, представленную в разделе 3.1.1. Результаты различных запросов можно найти в таблицах 3.7 и 3.8.

1. Запрос. Составить список всех городов в таблице City и тех стран, где эти города находятся. SELECT Ci.Name, Ci.Country FROM CITY Ci

Примечания. Выражение SQL эквивалентно операции проекции в РА. Предложение WHERE отсутствует в SQL-выражении потому, что в этом запросе не требуется использовать конструкцию, эквивалентную реляционно-алгебраической операции выборки. Отметим также необязательное применение каскадной «точечной» нотации. Таблица CITY переименована в Ci, и для обращения к ее атрибутам используются имена Ci.Name и Ci.Country.

2. Запрос. Составить список названий столиц, перечисленных в таблице CITY. SELECT * FROM CITY WHERE CAPITAL=‘Д’

Примечания. Это SQL-выражение эквивалентно операции выборки, введенной в РА. К сожалению, реляционно-алгебраическая операция выборки задается в языке SQL ключевым словом WHERE, а не предложением SELECT! Знак * в предложении SELECT означает, что должны быть перечислены все атрибуты, входящие в таблицу CITY.

3. Запрос. Составить список атрибутов стран, занесенных в отношение Country, где средняя продолжительность жизни меньше 70 лет. SELECT Co.Name, Co.Life-Exp FROM Country Co WHERE Co.Life-Exp < 70

Примечания. В терминах РА это выражение эквивалентно ? 0 ?. Проецируемые атрибуты, в нашем примере это Co.Name и Co.Life-Exp, определяются предложением SELECT. Условие выборки задается ключевым словом WHERE.

4. Запрос. Составить список столичных городов и показателей численности населения тех стран, ВВП которых превышает один триллион долларов. SELECT Ci.Name, Co.Pop FROM City Ci, Country Co WHERE Ci.Country = Co.Name AND Co.GDP > 1000.0 AND Ci.Capital= ‘Д’

Примечания. Это неявный способ выражения операции соединения.
SQL2 и SQL3 также поддерживают явную операцию JOIN. В таком случае обе таблицы City и Country сопоставляются по своим общим атрибутам Ci.country и Co.name. Более того, два условия выборки из таблиц City и Country задаются независимо друг от друга. Обратите внимание на то, как каскадная «точечная» нотация устраняет потенциальный конфликт, который может возникнуть в результате использования одинаковых имен атрибутов в обоих отношениях.
5. Запрос. Как называется столица и какова численность населения страны, где начинается река Св. Лаврентия? SELECT Ci.Name, Ci.Pop FROM City Ci, Country Co, River R WHERE R.Origin = Co.Name AND Co.Name = Ci.Country AND R.Name = ‘Св. Лаврентия’ AND Ci.Capital= ‘Д’
Примечания. Выполнение этого запроса требует соединения трех таблиц. Таблицы River и Country соединяются по атрибутам Origin и Name. Таблицы Country и City соединяются по атрибутам Name и Country. Соответственно имеются два условия выборки по таблицам River и City.
6. Запрос. Какова средняя численность населения нестоличных городов, перечисленных в таблице City? SELECT AVG(Ci.Pop) FROM City Ci WHERE Ci.Capital= ‘Н’
Примечания. AVG (среднее, англ. average) – это пример операции агрегирования, то есть расчета составного атрибута. Подобные операции отсутствуют в РА. Кроме AVG, есть и такие операции агрегирования, как COUNT, MAX, MIN и SUM. Операции агрегирования расширяют функциональность языка SQL, поскольку они позволяют производить вычисления над полученными данными.
7. Запрос. Найти средний ВВП каждого континента. SELECT Co.Cont, Avg(Co.GDP) AS Continent-GDP FROM Country Co GROUP BY Co.Cont
Примечания. Данный запрос иллюстрирует наиболее характерное отступление от базового формата SQL-запроса. Оно связано с наличием предложения GROUP BY, которое разбивает таблицу на основе указанного в нем атрибута. В приведенном примере Co.cont может принять одно из двух значений: СА и ЮА. Следовательно, таблица Country делится на две группы записей. Значение среднего ВВП (GDP) рассчитывается для каждой группы отдельно.




Затем оно сохраняется так, как предписывает предложение SELECT, то есть в виде атрибута Continent-GDP (ВВП-континента).
8. Запрос. Для каждой страны, на территории которой расположены истоки хотя бы двух рек, определить длину самой короткой реки. SELECT R.Origin, MIN(R.length) AS Min-length FROM River R GROUP BY R.Origin HAVING COUNT(*) > 1
Примечания. Этот запрос подобен предыдущему. Отличие состоит в том, что предложение HAVING позволяет задавать условия выборки для различных групп, сформированных предложением GROUP BY. Таким образом, в рассмотрение принимаются только те группы, которые насчитывают более одного члена.
9. Запрос. Составить список стран, ВВП которых превосходит ВВП Канады. SELECT Co.Name FROM Country Co WHERE Co.GDP > ANY ( SELECT Co1.GDP FROM Country Co1 WHERE Co1.Name = ‘Канада’ )
Примечания. Это пример вложенного запроса. К таковым относятся запросы, содержащие другие, встроенные в них запросы. Вложенный запрос становится обязательным, когда перед расчетом запроса требуется создать промежуточную таблицу, которой не существует. Вложенный запрос обычно встречается в предложении WHERE, однако, кроме того, хотя и редко, может появляться в предложениях FROM и SELECT. ANY – оператор сравнения множеств. Полный обзор вложенных запросов вы сможете найти в любой книге по базам данных.
Таблица 3.7. Таблицы-результаты операций выборки, проекции и выборки-проекции

Название Страна Население (млн) Столица Очертания
Гавана Куба 2,1 Д Point
Вашингтон США 3,2 Д Point
Бразилиа Бразилия 1,5 Д Point
Оттава Канада 0,8 Д Point
Мехико Мексика 14,1 Д Point
Буэнос-Айрес Аргентина 10,75 Д Point

(а) Запрос 2. Выборка
Название Страна
Гавана Куба
Вашингтон США
Монтеррей Мексика
Торонто Канада
Бразилиа Бразилия
Росарио Аргентина
Оттава Канада
Мехико Мексика
Буэнос-Айрес Аргентина

(б) Запрос 1. Проекция
Название Продолжительность жизни
Мексика 69,36
Бразилия 65,60

(в) Запрос 3. Выборка и проекция


Таблица 3.8. Результаты выполнения примеров запросов
Ci.Name Co.Pop
Бразилиа 183,3
Вашингтон 270,0

(а) Запрос 4
Ci.Name Ci.Pop
Вашингтон 3,2

(б) Запрос 5
Среднее население
2,2

(в) Запрос 6
Континент ВВП континента
СА 2343,05
ЮА 676,1

(г) Запрос 7
Исток Мин-длина
США 1200

(д) Запрос 8
Co.Name
Мексика
Бразилия
США

(е) Запрос 9

Содержание раздела