Как выбрать данные из связанных таблиц

Закрыть ... [X]

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


Источник: http://www.firststeps.ru/sql/r.php?8


Поделись с друзьями



Рекомендуем посмотреть ещё:



Похожие новости


Детское вязание шапочка для новорожденных
Канзаши из атласных ленточек
Валяние из флиса мастер классы
Визитница оригами схема
Страна мастеров поделки для своими руками
Декупаж на цветочных горшках своими руками


Как выбрать данные из связанных таблиц
Как выбрать данные из связанных таблиц


Выборка из связанных таблиц Mysql - Stack Overflow на русском
SQL - Урок 6. Объединение таблиц (внутреннее объединение)



ШОКИРУЮЩИЕ НОВОСТИ