Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_po_BD.doc
Скачиваний:
20
Добавлен:
25.09.2019
Размер:
587.78 Кб
Скачать

22. Язык структурированных запросов sql. Объединение таблиц.

SELECT * FROM Customers, Salespeople // декартово произведение таблиц

WHERE Customers.city = Salespeople.city

Каждому покупателю будет соответствовать несколько продавцов, находящихся с ним в одном городе. Для сравнения можно использовать любой оператор сравнения.

Объединения таблиц через ссылочную целостность.

SELECT Customers.cname, Salespeople.sname

FROM Customers, Salespeople

WHERE Salespeople.snum = Customers.snum

Результат – таблица, в которой объединены имена заказчиков и соответствующих им продавцов. Столбцы, которые используются для определения вывода, в сам вывод не попадают.

Объединения, которые используют условия, основанные на равенствах – объединения по равенству. Наиболее общий вид объединений.

SELECT onum, cname, Orders.cnum, Orders.snum

FROM Salespeople, Customers, Orders

WHERE Customers.city <> Salespeople.city

AND Orders.cnum = Customers.cnum

AND Orders.snum = Salespeople.snum

Результат вывода – заказчик и продавец в разных городах. Объединения трех таблиц.

  1. Объединения с использованием WHERE

  2. Объединения с использованием оператора JOIN

INNER JOIN

LEFT OUTER JOIN

RIGHT OUTER JOIN

FULL OUTER JOIN

SELECT * FROM Orders

INNER JOIN Customers

ON Orders.cnum = Customers.cnum

  1. Объединение таблицы с собой – объединение двух копий одной и той же таблицы

SELECT first.cname, second.cname, first.rating

FROM Customers first, Customers second

WHERE first.rating = second.rating // пары покупателей с одним рейтингом

AND first.cnum < second.cnum

В этом примере используются псевдонимы.

ПРОПУЩЕНО

23. Язык структурированных запросов sql. Соотнесенные подзапросы.

SELECT * FROM Orders

WHERE snum =

( SELECT snum FROM Salespeople

WHERE sname ‘Иванов’ )

ПРОПУЩЕНО

Можно использовать ключевое слово.

SELECT * FROM Orders

WHERE amt > ( SELECT AVG(amt) FROM Orders ) // все продажи, имеющие значения больше среднего

Можно использовать подзапросы, которые выводят один столбец и несколько строк, если использовать специальный оператор IN.

SELECT * FROM Orders

WHERE snum IN

( SELECT snum FROM Salespeople

WHERE city = ‘Брянск’ )

Подобно можно использовать подзапросы в предложении…

ПРОПУЩЕНО

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

ПРОПУЩЕНО

В соотнесенном подзапросе происходит обращение

ПРОПУЩЕНО

SELECT * FROM Customers out

WHERE 20.10.07 IN

( SELECT odate FROM Orders into

WHERE out.cnum = into.cnum )

Внутренний запрос должен выполняться отдельно для каждого

ПРОПУЩЕНО

Строка внешнего запроса, для которого выполняется внутренний запрос, называется текущей строкой кандидата.

С помощью соотнесенных подзапросов можно выполнять сложные операции.

SELECT snum, sname

FROM Salespeople

WHERE 1 < ( SELECT count(*)

FROM Customers

WHERE Customers.snum = Salespeople.snum )

Список продавцов, у которых больше одного покупателя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]