Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
01.05.2014
Размер:
526.34 Кб
Скачать

Элементы языка SQL

Оператор SELECT: задание сложных условий поиска

Использование IN

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

<значение> [ NOT ] IN ( <значение1> [, <значение2> … ] )

В результирующий НД будут включены только те записи, для которых значение, стоящее слева от IN , равно одному из значений, указанному в списке значений.

Пример: SELECT *

FROM RASHOD

WHERE KOLVO IN (100, 1000, 3000 )

Замечание. Существует вторая форма использования IN, в которой список возможных значений возвращается вложенным запросом SELECT.

Элементы языка SQL

Оператор SELECT: задание сложных условий поиска

Использование STARTING

Если нужно, чтобы значение какого-либо символьного столбца (или некоторого выражения) НАЧИНАЛОСЬ с определенной подстроки, в условии поиска указывается предложение:

<значение> [ NOT ] STARTING [WITH] <подстрока>

Пример: SELECT *

FROM TOVARY

WHERE TOVAR STARTING WITH ‘C’

Элементы языка SQL

Оператор SELECT: задание сложных условий поиска

Использование CONTAINING

Если нужно, чтобы значение какого-либо символьного столбца (или некоторого выражения) ВКЛЮЧАЛО В СЕБЯ определенную подстроку, в условии поиска указывается предложение:

<значение> [ NOT ] CONTAINIG <подстрока>

Пример: SELECT *

FROM POKUPATELI

WHERE ADRES CONTAINING ‘Стр’

Элементы языка SQL

Оператор SELECT: задание сложных условий поиска

Использование функции UPPER

Функция преобразует все буквы аргумента в заглавные.

UPPER (<значение>)

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

Пример: SELECT *

FROM POKUPATELI

WHERE UPPER(GOROD) = ‘МОСКВА’

Элементы языка SQL

Оператор SELECT: задание сложных условий поиска

Использование LIKE

Предложение LIKE определяет шаблоны сравнения строковых значений. Если необходимо , чтобы сравниваемое значение удовлетворяло шаблону, в условии поиска необходимо указать

<значение> [NOT] LIKE <шаблон> [ESCAPE <подшаблон>]

В шаблоне используются специальные символы - «%» и «_».

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

ESCAPE определяет символ, появление которого в шаблоне отменяет специальные функции следующего за ним символа.

Примеры:

LIKE “%USD”

LIKE “__94”

WHERE STOLBEZ LIKE “_!%” ESCAPE “!”

Элементы языка SQL

Оператор SELECT: задание сложных условий поиска

Использование функции CAST

Для того, чтобы трактовать значение одного типа как значение другого типа применяется функция CAST:

CAST (<значение> AS <тип_данных>)

Множество типов данных, в которые может быть преобразовано значение:

Тип данных

Можно привести к типам

NUMERIC

CHARACTER, DATE

CHARACTER

NUMERIC, DATE

DATE

CHARACTER, NUMERIC

Примеры: SELECT *

FROM RASHOD

WHERE CAST(KOLVO AS CHAR(4)) LIKE “%09”

Элементы языка SQL

Оператор SELECT: использование подзапросов

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

Часто невозможно решить поставленную задачу путем использования единственного запроса. Например, в тех случаях, когда при использовании условия поиска в предложении WHERE параметр <значение, с которым сравнивать> заранее не определен и должен вычисляться в момент выполнения оператора SELECT.

В этом случае оператор SELECT с подзапросом имеет следующий вид:

SELECT …

FROM …

WHERE <сравниваемое_значение> <оператор> (SELECT …) Пример:

SELECT KOLVO, DAT_RASH FROM RASHOD

WHERE KOLVO = (SELECT MAX(KOLVO) FROM RASHOD) Замечание.

Ошибкой для данного вида запроса является использование вложенного оператора SELECT, возвращающего вместо единичного список значений.

Элементы языка SQL

Оператор SELECT: использование подзапросов

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

Пример1 (ошибочный):

SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP FROM RASHOD R

WHERE R.POKUP = (SELECT POK.POKUP FROM POKUPATELI POK

WHERE UPPER(POK.GOROD) = ‘МОСКВА’)

Пример 2 (исправленный):

SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP FROM RASHOD R

WHERE R.POKUP IN (SELECT POK.POKUP FROM POKUPATELI POK

WHERE UPPER(POK.GOROD) = ‘МОСКВА’)

Элементы языка SQL

Оператор SELECT: использование подзапросов

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

Пример 3.

SELECT RRR.* FROM RASHOD RRR WHERE R.POKUP IN

(SELECT R.POKUP

FROM RASHOD R

WHERE KOLVO =

(SELECT MAX(RSH.KOLVO) FROM RASHOD RSH) )

Логический порядок выполнения запроса:

-Определяется самая крупная покупка – отыскивается максимальное значение в столбце KOLVO («самый вложенный» запрос).

-Определяется покупатель, осуществивший эту покупку (средний запрос)

-Основной запрос выбирает записи с заданным покупателем.

Элементы языка SQL

Оператор SELECT: использование подзапросов

Дополнительные возможности

Предложение EXISTS. Требуется отобрать только те данные, для которых подзапрос возвращает одно или более значений.

EXISTS (<подзапрос>)

Пример.

Составить список покупателей, которые хотя бы один раз получали товар со склада:

SELECT P.POKUP

FROM POKUPATELI P

WHERE EXISTS (SELECT R.POKUP

FROM RASHOD R

WHERE R.POKUP = P.POKUP )

Соседние файлы в папке Презентации по технологиям БД