Приведем несколько примеров того, как составляются различные типы 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) рассчитывается для каждой группы отдельно.
Название | Страна | Население (млн) | Столица | Очертания |
Гавана | Куба | 2,1 | Д | Point |
Вашингтон | США | 3,2 | Д | Point |
Бразилиа | Бразилия | 1,5 | Д | Point |
Оттава | Канада | 0,8 | Д | Point |
Мехико | Мексика | 14,1 | Д | Point |
Буэнос-Айрес | Аргентина | 10,75 | Д | Point |
Название | Страна |
Гавана | Куба |
Вашингтон | США |
Монтеррей | Мексика |
Торонто | Канада |
Бразилиа | Бразилия |
Росарио | Аргентина |
Оттава | Канада |
Мехико | Мексика |
Буэнос-Айрес | Аргентина |
Название | Продолжительность жизни |
Мексика | 69,36 |
Бразилия | 65,60 |
Ci.Name | Co.Pop |
Бразилиа | 183,3 |
Вашингтон | 270,0 |
Ci.Name | Ci.Pop |
Вашингтон | 3,2 |
Среднее население |
2,2 |
Континент | ВВП континента |
СА | 2343,05 |
ЮА | 676,1 |
Исток | Мин-длина |
США | 1200 |
Co.Name |
Мексика |
Бразилия |
США |