Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Выбор данных из нескольких таблицДо сих пор все наши запросы обращались к одной таблице. Однако 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. Далее мы обсудим использование комбинаций запросов, где один запрос будет производить вывод, который будет управлять работой другого запроса. |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|