Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

До сих пор все наши запросы обращались к одной таблице. Однако 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 
Результат:
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. Далее мы обсудим использование комбинаций запросов, где один запрос будет производить вывод, который будет управлять работой другого запроса.


Предыдущая | Следующая | Оглавление

Original version: http://www.mjk.msk.ru/~dron/

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
29 апреля 2006, 23:14:38
Коротко и ясно. Сэкономил очень много времени и получил нужную информацию.
Спасибо!
2.
Аноним
Мне нравитсяМне не нравится
17 апреля 2006, 22:36:09
Очень хороший урок!!! пока лучше не видел!!!
МОЛОДЦЫ!!! СПАСИБО
3.
Аноним
Мне нравитсяМне не нравится
11 октября 2005, 15:29:33
Спасибо. Четко, кратко и понятно. Помогло
4.
Аноним
Мне нравитсяМне не нравится
5 августа 2005, 16:19:53
В запрсе
SELECT Salespeople.sname
FROM Salespeople, Customers
если таблица Customers пуста, то выборка будет пустой.
5.
Аноним
Мне нравитсяМне не нравится
5 октября 2004, 17:37:58
Spasibo! Straniza ochen' pomogla.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог