Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / Конспект (Архитектуры обработки данных + SQL).doc
Скачиваний:
91
Добавлен:
10.12.2013
Размер:
336.9 Кб
Скачать
      1. Оператор exists

EXISTS ( существует )  оператор, генерирующий значения «истина» или «ложь». Его мoжно применять отдельно в предикате или комбинировать с другими выражениями с помощью операторов AND, OR, NOT .Этот оператор оценивает подзапрос как истинный, если подзапрос генерирует выходные данные, а в противном случае как ложный, иными словами оператор EXISTS возвращает значение «истина», если подзапрос возвращает хотя бы одну строку. В отличие от прочих операторов и предикатов, он не может принимать значения unknown (неизвестный). Например, нужно извлечь данные из таблицы Клиент в том случае, если один (или более) клиент из нее работает с банком МММ:

SELECT * FROM КЛИЕНТ

WHERE EXISTS

(SELECT * FROM КЛИЕНТ WHERE IDN_банка = 311)

Выходные данные:

IDN

IDN_ГОРОДА

ИМЯ

РЕКВИЗИТЫ

IDN_БАНКА

204

101

Петров

--------------

311

205

104

Кузнецов

--------------

314

206

102

Иванов

--------------

317

208

104

Золин

--------------

311

210

105

Киров

--------------

323

212

103

Павлов

--------------

317

215

105

Петренко

--------------

318

Внутренний запрос выбрал все данные обо всех клиентах, работающих с МММ.

Т.к. такие клиенты существуют , оператор EXISTS отметил, что подзапрос генерирует выходные данные, и принимает значение «истина». В данном случае тот же результат можно было получить проще, однако, бывают случаи, когда без EXISTS не обойтись.

Вывести название группы, если в ней есть товар, цена которого > 20.

SELECT ГРУППЫ.НАЗВАНИЕ

FROM ГРУППЫ

WHERE EXISTS

(SELECT ЦЕНА FROM ПЕРЕМЕЩЕНИЕ

WHERE ЦЕНА> 20

AND ГРУППЫ.IDN = ПЕРЕМЕЩЕНИЕ.IDN_ ГРУППЫ)

Oператор EXISTS отметил ,что подзапрос генерирует выходные данные, и принимает значение «истина» для групп газ. вода и сигареты.

Выходные данные:

НАЗВАНИЕ

Газ. вода

Сигареты

Приведем еще один вариант для примера из предыдущего раздела:

Получить все банки, которые не используются клиентами:

SELECT * FROM Банки

WHERE NOT EXISTS

(SELECT * FROM КлиентWHERE Клиент.Idn_банка = Банки.Idn)

    1. Объединение множества запросов в один

UNIONобъединяет выходные данные двух и более SQL - запросов в единое множество строк и столбцов. Для того чтобы получить сведения обо всех банках и городах , имя которого начинается с М.

SELECT РЕКВИЗИТЫ FROM БАНКИ

WHERE РЕКВИЗИТЫ LIKE ‘М%’.

UNION

SELECT НАЗВАНИЕ FROM ГОРОДА

WHERE НАЗВАНИЕ LIKE ‘М%’.

Выходные данные:

МММ

Менатеп

Минск

Минск

Столбцы, выбранные с помощью двух команд, представлены в выходных данных так, как если бы они выбирались с помощью одного запроса. Заголовки столбцов отсутствуют т.к. они выбирались из разных таблиц.

Соседние файлы в папке Программирование