Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных / БД2012 / Часть 4.doc
Скачиваний:
50
Добавлен:
28.03.2015
Размер:
856 Кб
Скачать
☆

Связанные подзапросы

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

Пример. Отыскать всех покупателей, сделавших заказы 3 октября 2006 г.

S

алиас

дата начала работы

ELECT *

F ROM Customers outer

WHERE 10/03/06 IN

(SELECT odate

FROM Orders inner

Сюда подставляется строка- кандидат из таблицы внешнего запроса

WHERE outer. cnum = inner. cnum);

Оператор exists

Существует специальный оператор, всегда использующий подзапрос в качестве аргумента- это оператор EXISTS.

Он используется, когда от подзапроса нужно лишь узнать дает он NULL или нет. Соответственно EXISTS возвращает «ложь» или «истину».

Например, нужно извлечь данные из таблицы Customers в том случае, если хотя бы один покупатель из нее из London’а:

SELECT cnum, cname, city

FROM Customers

WHERE EXISTS (SELECT *

FROM Customers

WHERE city = ‘London’);

В результате можно получить:

Объединение множества запросов в один Предложение union

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

Пример: Получить сведения обо всех продавцах (Sales people) и покупателях (Customers) Лондона как данные одного запроса:

SELECT snum, sname

FROM Sales people

WHERE city = ‘London’

UNION

SELECT cnum, cname

FROM Customers

WHERE city = ‘London’;

Заметим, что ; ставится только в самом конце. Заголовки столбцов в результате отсутствуют, поскольку это объединения столбцов snum с cnum и sname с cname.

Очевидно, что реализовать UNION можно только при соблюдении определенных условий:

  • Столбцы, входящие в состав выходных данных исходных запросов должны быть совместимы по объединению- union compatible. Это значит, что в каждом из запросов может быть указано одинаковое число столбцов в порядке: первый, второй, третий и т.д., причем n-й столбец одного запроса должен быть сравним с n-м столбцом другого запроса.

  • Если для n-го столбца одного запроса в UNION NULL-значения запрещены, то они запрещены и для других запросов в UNION.

  • Об избыточности (замечание). UNION автоматически исключает из выходных данных дублирующие строки.

  • Если в UNION применяется сортировка- ORDER BY, то приходится указывать не имя столбца, а его номер.

Например: ORDER BY 3- по возрастанию.

Ввод, удаление и изменение значений полей

Эти команды образуют подраздел SQL, называемый DML (Data Manipulation Language):

INSERT (вставить), UPDATE (обновить), DELETE (удалить).

Еще их называют update command- команды обновления.

Ввод значений:

INSERT INTO <имя таблицы>

VALUES (<значение 1 поля>, <значение 2 поля>, …)

INSERT INTO Sales people

VALUES (1001, ‘Hoffman’, ‘London’, .12);

Е

Комиссионные

сли бы требовалось ввести данные только в указанные столбцы в таблице, то нужно было бы написать:

INSERT INTO Sales people (snum, sname, city, comm)

В остальные- значения по умолчанию (NULL и т.п.)

Соседние файлы в папке БД2012