Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы_1430_1432_33_34.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
4.2 Mб
Скачать

Использование множества таблиц в одном запросе.

Наиболее важная черта запросов SQL – это способность определять связи между множеством таблиц и отображать содержащуюся в них информацию в терминах этих связей в рамках единственной команды. Операция такого рода называется соединением и является одной их самых мощных операций для реляционных баз данных. С помощью соединений непосредственно связывается информация, содержащаяся в таблицах, независимо от их числа, а также между отдельными частями любой таблицы.

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

При соединении таблиц полное имя столбца состоит из имени таблицы, непосредственно за которым стоит точка, а за ней – имя столбца. Например,

Prodav.person_n

Pokypat.ynik_n

Orders.kol

После того, как указаны имена соединяемых таблиц, имена используемых полей и условие, необходимо указать по каким полям связи установлено соединение.

Например, чтобы определить фамилию, имя, отчество продавцов, получивших заказы больше 300, то запрос следует написать:

SELECT Prodav.fam, Prodav.name,Prodav.otch, Orders.kol

FROM Prodav, Orders

WHERE Orders.kol > 300 AND Prodav.person_n=Orders. person_n;

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

SELECT Orders.n, Pokypat.name, Orders.ynik_n, Orders.person_n

FROM Pokypat, Prodav, Orders

WHERE Pokypat.city <> Prodav.city

AND Orders.ynik_n=Pokypat.ynik_n

AND Orders.person_n= Prodav.person_n;

Исходя из данного примера, видно, что если сама команда сложна, то логика написания команды достаточно проста.

Вложение запросов.

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

SELECT * FROM <имя таблицы№1>

WHERE <имя столбца>=

(SELECT <имя того же столбца> FROM <имя таблицы№2>

WHERE <условие>);

Пример, предположим, известно только фамилия продавца, но неизвестен его уникальный номер. Необходимо из таблицы Заказы извлечь данные о всех заказах данного продавца.

!!!!!! мы конечно могли бы сначала написать запрос на вывод уникального номера продавца из таблицы Продавцы, а потом написать запрос на заказы из таблицы Заказы, но вложенный запрос как раз позволяет написать команду, которая объединит оба эти запроса.

SELECT * FROM Orders

WHERE person_n=

(SELECT person_n FROM Prodav WHERE fam=’Петров’);

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