Конспект лекций по дисциплине «Сетевые базы данных», страница 12

SELECT sname, sal.snum, a.cname, b.cname

   FROM cust a, cust b, sal

   WHERE a.snum = b.snum

         AND sal.snum = a.snum

   ORDER BY sname, a.cname

Подзапросы

Подзапрос – это оператор SELECT, вложенный внутрь другого оператора SELECT.

Есть два основных вида подзапросов:

·  однострочные подзапросы. Возвращают ноль строк или одну строку

·  многострочные подзапросы. Возвращают от одной до нескольких строк

Кроме того, есть три подтипа подзапросов, которые могут возвращать одну или несколько строк:

·  многостолбцовые подзапросы. Возвращают более одного столбца

·  коррелированные подзапросы. Ссылаются на один или несколько столбцов во внешнем операторе SQL.

·  Вложенные подзапросы. Подзапросы, помещенные внутрь другого подзапроса. Глубина вложений может составлять до 255.

Пример однострочного подзапроса во фразе WHERE

SELECT sname, city, comm  FROM sal

WHERE snum =

(SELECT snum FROM sal WHERE sname= 'Peel');

В этом примере из строки таблицы sal для продавца Peel выбираются имя продавца (sname), город, в котором он работает (city) и его комиссионные (comm). В подзапросе в качестве условия выбора мы указываем имя продавца, и по этому имени извлекается номер продавца snum. Найденный в подзапросе номер snum используется теперь в условии выбора основного запроса.

Пример подзапроса во фразе FROM (встроенное представление)

SELECT snum, sname, comm 

FROM

 (SELECT snum, sname, comm 

FROM sal WHERE city = 'London');

Здесь подзапрос помещен во фразу FROM вместо имени таблицы, поэтому он называется встроенным представлением (о представлениях см. п. 3.3.3). Подзапрос формирует данные только о продавцах, работающих в Лондоне.

Пример использования оператора IN с многострочным подзапросом

SELECT snum, sname, comm  FROM sal

WHERE snum IN

(SELECT snum FROM sal WHERE city = 'London');

Здесь основной запрос выводит данные только о продавцах, работающих в Лондоне, как и в предыдущем примере. Но теперь в условии WHERE основного запроса выбираются номера snum только такие, которые возвращаются подзапросом. А подзапрос возвращает номера snum только продавцов, работающих в Лондоне.

3.1.2. Вставка, обновление и удаление строк в таблицах

Рассмотрим вопрос о том, как вводить, изменять и удалять данные таблиц с помощью команд INSERT, UPDATE  и DELETE языка SQL.

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

INSERT INTO  таблица

                         (поле [,])

                        { VALUES ( выражение [,] ) | запрос }

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

INSERT INTO sal

               VALUES (1008, ‘Tom’, NULL, NULL)

В следующем примере показан второй вариант команды INSERT: команда вставляет строки в таблицу SAL_COPY, копируя их из таблицы SAL

INSERT INTO sal_copy

               SELECT * FROM sal

Синтаксис команды UPDATE можно представить следующим образом.

UPDATE  таблица

SET { поле =  { выражение | запрос } [,] | ( поле [,]) = запрос }

[ WHERE условие ]

В приведенном ниже примере командой UPDATE увеличивается на 50 рейтинг покупателей, чьи заказы оформлял продавец с номером 1001.

            UPDATE cust  SET rating=rating + 50