Скачиваний:
25
Добавлен:
01.04.2014
Размер:
761.34 Кб
Скачать

************** Работа с sql **************

1. Предположим что каждый продавец имеет 12% комиссионных.

Напишите запрос к таблице Порядков который мог бы вывести номер

порядка, номер продавца, и сумму комиссионных продавца для этого

порядка.

2. Напишите запрос к таблице Заказчиков который мог бы найти высшую

оценку в каждом городе. Вывод должен быть в такой форме:

For the city (city), the highest rating is: (rating).

3. Напишите запрос который выводил бы список заказчиков в нисходящем

порядке. Вывод поля оценки( rating ) должден сопровождаться именем

закзчика и его номером.

4. Напишите запрос который бы выводил общие порядки на каждый день и

помещал результаты в нисходящем порядке.

( См. Приложение A для ответов. )

8

Запрашивание многочисленых таблиц также как одной

88 ПОНИМАНИЕ SQL

______________________________________________________________________

ГЛ. 8

ДО ЭТОГО, КАЖДЫЙ ЗАПРОС КОТОРЫЙ МЫ ИССЛЕДОВАЛИ

основывался на одиночной таблице.

В этой главе, вы узнаете как сделать запрос любого числа таблиц с

помощью одной команды. Это - чрезвычайно мощное средство потому

что оно не только объединяет вывод из многочисленых таблиц, но и

определяет связи между ними. Вы обучитесь различным формам кото-

рые могут использовать эти связи, а также устанавливать и использо-

вать их чтобы удовлетворять возможным специальным требованиям.

============= ОБЪЕДИНЕНИЕ ТАБЛИЦ ============

Одна из наиболее важных особенностей запросов SQL - это их способ-

ность определять связи между многочислеными таблицами и выводить

информацию из них в терминах этих связей, всю внутри одной команды.

Этот вид операции называется - объединением, которое является одним

из видов операций в реляционных базах данных. Как установлено в

Главе 1, главное в реляционном подходе это связи которые можно созда-

вать между позициями данных в таблицах.

Используя обьединения, мы непосредственно связываем информацию с

любым номером таблицы, и таким образом способны создавать связи

между сравнимыми фрагментами данных.

При обьединении, таблицы представленые списком в предложении FROM

запроса, отделяются запятыми. Предикат запроса может ссылаться к лю-

бому столбцу любой связанной таблицы и, следовательно, может использо-

ваться для связи между ими. Обычно, предикат сравнивает значения в

столбцах различных таблиц чтобы определить, удовлетворяет ли WHERE

установленному условию.

ИМЕНА ТАБЛИЦ И СТОЛБЦОВ

Полное имя столбца таблицы фактически состоит из имени таблицы,

сопровождаемого точкой и затем именем столбца. Имеются несколько

примеров имен :

Salespeople.snum

Salespeople.city

Orders.odate

ЗАПРАШИВАНИЕ МНОГОЧИСЛЕНЫХ ТАБЛИЦ КАК ОДНОЙ 89

______________________________________________________________________

До этого, вы могли опускать имена таблиц потому что вы запрашивали

только одну таблицу одновременно, а SQL достаточно интелектуален

чтобы присвоить соответствующий префикс, имени таблицы. Даже когда

вы делаете запрос многочисленых таблиц, вы еще можете опускать имена

таблиц, если все ее столбцы имеют различные имена. Но это не всегда

так бывает. Например, мы имеем две типовые таблицы со столбцами

называемыми city.

Если мы должны связать эти столбцы( кратковременно ), мы будем дол-

жны указать их с именами Salespeople.city или Customers.city, чтобы SQL

мог их различать.

СОЗДАНИЕ ОБЬЕДИНЕНИЯ

Предположим что вы хотите поставить в соответствии вашему продавцу

ваших заказчиков в городе в котором они живут, поэтому вы увидите все

комбинации продавцов и заказчиков для этого города. Вы будете должны

брать каждого продавца и искать в таблице Заказчиков всех заказчиков

того же самого города. Вы могли бы сделать это, введя следующую коман-

ду ( вывод показывается в Рисунке 8.1 ):

SELECT Customers.cname, Salespeople.sname,

Salespeople.city

FROM Salespeople, Customers

WHERE Salespeople.city = Customers.city;

=============== SQL Execution Log ============

| SELECT Customers.cname, Salespeople.sname, |

| Salespeople.city |

| FROM Salespeople, Customers |

| WHERE Salespeople.city = Customers.city |

| ============================================= |

| cname cname city |

| ------- -------- ---- |

| Hoffman Peel London |

| Hoffman Peel London |

| Liu Serres San Jose |

| Cisneros Serres San Jose |

| Hoffman Motika London |

| Clemens Motika London |

=============================================

Рисунок 8.1: Объединение двух таблиц

Соседние файлы в папке ПОНИМАНИЕ SQL