Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по Базам данных » MSSQL - Все статьи »

Обсудить на форуме Обсудить на форуме

Выбор данных из нескольких таблиц

До сих пор все наши запросы обращались к одной таблице. Однако SQL позволяет в одном запросе обращаться к нескольким таблицам. Именно это свойство и сделало язык SQL столь популярным.

Полное имя столбца в таблице фактически состоит из имени таблицы, за которым идет точка и имя столбца. (По правде говоря, вначале еще указывается и имя пользователя, но это скорее относится к правам доступа и мы вернемся к этому позднее). Примеры имен:

Salespeople.snum
Salespeople.city
Orders.odate
До этого в запросах мы опускали имена таблиц, потому что мы запрашивали только одну таблицу. Если мы хотим связать столбцы разных таблиц, то их надо указать с именами Salespeople.city или Customers.city, чтобы сервер мог их различать.

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

SELECT Customers.cname, Salespeople.sname, Salespeople.city
FROM Salespeople, Customers
WHERE Salespeople.city = Customers.city
Результат запроса:
cname                sname   city
-------------------- ------- ----------
ТОО Рога и копыта    Иванов  Москва
ОАО "Валют-транзит"  Егоров  Караганда
т.к. поле city имеется в таблицах Торговые агенты и Заказчики, имена таблиц должны использоваться как префиксы.
Как работает этот запрос? SQL Server проверяет каждую комбинацию строк двух таблиц и проверяет их на условие указанное в предложении WHERE. Если эта комбинация удовлетворяет ему, то она выводится.
Для объединения таблиц можно использовать любые условия, а не только равенство. Например:
SELECT Salespeople.sname, Customers.cname
FROM Salespeople, Customers
WHERE Salespeople.sname < Customers.cname AND
	Customers.rating < 200
Результат:
sname    cname
-------- ------------------
Егоров   ТОО Рога и копыта
Иванов   ТОО Рога и копыта
Петров   ТОО Рога и копыта
Сидоров  ТОО Рога и копыта
Егоров   ОАО "ООО"
Иванов   ОАО "ООО"
В принципе это не слишком полезный запрос. Он воспроизводит все комбинации имени продавца и имени заказчика так, что первый предшествует последнему в алфавитном порядке, а заказчик имеет рейтинг меньше 200.
Предположим, что мы хотим найти все заказы заказчиков, не находящихся в одном городе с агентом. Для этого требуется связать три таблицы:
SELECT Orders.onum, Customers.cname, Orders.cnum, Orders.snum
FROM Salespeople, Customers, Orders
WHERE Customers.city <> Salespeople.city AND
	Orders.cnum = Customers.cnum AND
	Orders.snum = Salespeople.snum
Результат:
onum  cname                              cnum  snum
----- ---------------------------------- ----- -----
3001  ОАО "Валют-транзит"                2008  1007
3002  ОАО "ООО"                          2007  1004
3005  Фирма ХХХ                          2003  1002
3006  AО Бендер и К                      2002  1007
3007  Концерн "Дети лейтенанта Шмидта"   2004  1002
3008  Clemens                            2006  1001
3009  AО Бендер и К                      2002  1003
3010  Концерн "Дети лейтенанта Шмидта"   2004  1002
3011  Clemens                            2006  1001

Теперь вы можете строить запросы к нескольким таблицам одновременно. Вы можете устанавливать любые критерии отбора записей и условия связывания таблиц - собственно то ради чего и создавался SQL. Далее мы обсудим использование комбинаций запросов, где один запрос будет производить вывод, который будет управлять работой другого запроса.


Может пригодится:


Автор:
Прочитано: 5687
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру