Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD / Labs / Russian / Lab4R-SELECTBasicFeatures.doc
Скачиваний:
39
Добавлен:
20.02.2016
Размер:
346.62 Кб
Скачать

Теоретико-множественные операторы

Теоретико-множественные операторы (или просто операторы над множествами) объединяют результаты двух запросов в единый результат. Запросы, составляющие операнды операторов, называются составными запросами. В таблице ниже приводятся эти операторы.

Оператор

Назначение

Пример

UNION

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

SELECT Building FROM DEPARTMENT

UNION

SELECT Building FROM FACULTY;

UNION ALL

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

SELECT Building FROM DEPARTMENT

UNION ALL

SELECT Building FROM ROOM;

INTERSECT

Возвращает строки, принадлежащие обоим.

SELECT Building FROM FACULTY

INTERSECT

SELECT Building FROM ROOM;

MINUS

Возвращает все различные строки первого операнда, не принадлежащие второму операнду.

SELECT Building FROM ROOM

MINUS

SELECT Building FROM FACULTY;

Все операторы имеют одинаковое старшинство

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

Соответствующие списки фраз SELECT запросов должны иметь одинаковое количество элементов и типы данных. Если составляющие запросы выбирают данные строкового типа, то возвращаемое значение устанавливается следующим образом:

  • Если оба запроса имеют во фразе select значения типа CHAR, то в результате значение будет иметь тип CHAR.

  • Если один из запросов во фразе select имеет значения типа VARCHAR2, то в результате значение будет иметь тип VARCHAR2.

Приложение b. Выражения

Выражение – это комбинация одного или более значений, операторов и SQL-функций, которое принимает некоторое значение. Выражение в общем случае имеет тип значения, совпадающее с его компонентами.

Выражение “2*2” дает в результате 4 и имеет тип NUMBER (тот же, что и его компоненты).

Следующее выражение является более сложным и использует как функции, так и операторы. Это выражение добавляет 7 дней к текущей дате, удаляет из даты компоненту времени и преобразует результат в тип CHAR:

TO_CHAR(TRUNC(SYSDATE+7))

Выражения можно использовать:

  • В списке фразы SELECT предложения SELECT

  • В условии фразы WHERE и фразы HAVING

  • ВофразахCONNECT BYиORDER BY

  • Во фразе VALUES предложения INSERT

  • Во фразе SET предложения UPDATE

Например, вы можете использовать выражение вместо строки 'smith' во фразе SET предложения UPDATE, которое приведено ниже:

SET ename = 'smith';

Так следующаф фраза SET содержит выражение LOWER(ename) вместо 'smith':

SET ename = LOWER(ename);

Выражения имеют несколько форм, которые приведены ниже:

expr::=

Oracle не допускает использования всех возможных форм выражений во всех допустимых частях всех SQL-предложений. Если в синтаксисе описания того или предложения присутствует фраза expr, то вы можете использовать только выражения подходящего вида.

Простые выражения

Просые выражения специфицируют столбец, константу или NULL.

simple_expression::=

Примеры простых выражений:

emp.ename

'this is a text string'

10

Составные выражения

Составные выражения специфицируют комбинацию других выражений.

compound_expression::=

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

Примеры составных выражений:

('CLARK' || 'SMITH')

LENGTH('MOOSE') * 57

SQRT(144) + 72

my_fun(TO_CHAR(sysdate,'DD-MMM-YY')

Выражения переменных

Этот тип выражений не обсуждается здесь.

Выражения встроенных функций

Выражение встроенной функции специфицирует обращение к SQL-функции, действующей над строками.

built_in_function_expression::=

Примеры выражений встроенных функций:

LENGTH('BLAKE')

ROUND(1234.567*43)

SYSDATE

Для получения информации о встроенных функциях см. Приложение лабораторной работы 5.

Выражения функций, определенных пользователями

Выражения функций, определенных пользователями специфицирует обращение к функции, определенной пользователем. Синтаксис таких функций не обсуждается здесь.

Выражения конструктора типа

Выражения конструктора типа специфицирует обращение к конструктору типа. The Аргумент to конструктора типа является выражением или подзапросом. Синтаксис этого выражения не обсуждается здесь.

CAST Expressions

Выражение CAST преобразует один встроенный тип или значение типа коллекции в другой встроенный тип или значение типа коллекции. Синтаксис не обсуждается здесь.

SELECT * FROM t1 WHERE CAST (ROWID AS VARCHAR2) = '01234';

CURSOR Expressions

Выражение CURSOR возвращает вложенный курсор. Синтаксис не обсуждается здесь.

Выражение доступа к объекту

Этот тип выражения не обсуждается здесь.

Выражения DECODE

Этот тип выражения не обсуждается здесь.

Список выражений

Список віражений – єто список последовательности віражений, разделенніх запятой. Весь список заключается в круглые скобки.

expression_list::=

Ограничение на размер списка - 1000 выражений. Примеры списков выражений:

(10, 20, 40)

('SCOTT', 'BLAKE', 'TAYLOR')

(LENGTH('MOOSE') * 57, -SQRT(144) + 72, 69)

Приложение C. Комментарии в SQL

Комментарии в SQL не влияют на выполнение предложений. Комментарий может стоять между любыми ключевыми словами, параметрами или знаками пунктуации в предложении. Существуют следующие способы использования комментариев:

  • Начало комментария фиксируется косой чертой со звездочкой (/*). Затем следует текст комментария. Текст может занимать несколько строк. Завершается комментарий звездочкой и косой чертой (*/).

  • Комментарий начинается с двух знаков минус (--). Далее следует текст комментария, который может располагаться только на одной строке. Конец комментария – символ конца строки.

Предложение SQL может содержать комментарии обоих типов.

Пример:

Приводимые далее предложения содержат различные варианты использования комментариев:

SELECT ename, sal + NVL(comm, 0), job, loc

/* Select all employees whose compensation is

greater than that of Jones.*/

FROM emp, dept

/*The DEPT table is used to get the department name.*/

WHERE emp.deptno = dept.deptno

AND sal + NVL(comm,0) > /* Subquery: */

(SELECT sal + NLV(comm,0)

/* total compensation is sal + comm */

FROM emp

WHERE ename = 'JONES');

SELECT ename, -- select the name

sal + NVL(comm, 0), -- total compensation

job, -- job

loc -- and city containing the office

FROM emp, -- of all employees

dept

WHERE emp.deptno = dept.deptno

AND sal + NVL(comm, 0) > -- whose compensation

-- is greater than

(SELECT sal + NVL(comm,0) -- the compensation

FROM emp

WHERE ename = 'JONES'); -- of Jones.

32

Соседние файлы в папке Russian