Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / Лекции / Лекция 06 select.doc
Скачиваний:
31
Добавлен:
20.03.2016
Размер:
172.03 Кб
Скачать
    1. Фразы оператора select

В общем случае оператор SELECTможет иметь следующие элементы.

* фраза FROM

* фраза WHERE

* фразы GROUP BY и HAVING

* фраза ORDER BY

* фраза CONNECT BY

      1. Фраза from

Фраза FROMможет использоваться для операто­ров SELECT и DELETE.

В операторах DELETE:

DELETE [ FROM ] [user.]table [@databaselink] [alias] [WHERE ...]

...

В операторах SELECT:

SELECT select_list

FROM [user.]table [alias] [@databaselink] [,...] WHERE ...

...

user владелец таблицы или обзора.

table имя таблицы или обзора.

alias временное имя, назначаемое таблице или столбцу в качестве али­аса, позволяющее ссылаться в коррелированном запросе ссылать­ся на ту же таблицу. Кроме того, алиас позволяет применять внутри запроса сокращение имени таблицы.

databaselink действительная межбазовая связь ссылающаяся на удаленную базу данных.

FROM - обязательная фраза оператора SELECT и нео­бязательная для оператора DELETE. Она идентифициру­ет таблицу, из которой должны удаляться строки или таблицу(ы), из которых выбираются строки.

Оператор REVOKE также имеет фразу FROM, но в нем она выполняет другие функции.

Если таблица принадлежит другому пользователю, имени таблицы должно предшествовать имя соответс­твующего пользователя. Имя пользователя отделяет­ся от имени таблицы точкой (.).

Примеры Чтобы удалить из таблицы EMP строки, содержащие 50 в столбце DEPTNO, наберите:

DELETE FROM EMP

WHERE DEPTNO = 50

Чтобы выбрать все строки из таблицы EMP, содержа­щие в столбце DEPTNO значение 50 можно выполнить запрос:

SELECT * FROM EMP WHERE DEPTNO + 40

Чтобы выбрать строки, содержащие значение 40 в столбце DEPTNO из двух таблиц - EMP и EMP2 нужно выполнить команду:

SELECT * FROM EMP, EMP2 WHERE EMP.EMPNO = EMP2.EMPNO

AND DEPTNO = 40

Если таблица EMP2 принадлежит другому пользовате­лю – BEN команда будет иметь вид:

SELECT * FROM EMP, BEN.EMP2 WHERE EMP.EMPNO = EMP2.EMPNO

AND DEPTNO = 40

      1. Фразы group by и having

Работа с группой строк, возвращаемых запросом и ограничение (с помощью фразы HAVING), какие груп­пы затрагиваются.

SELECTexpr [,expr]...

FROM table [,table]...

GROUP BY expr [,expr] ...

HAVING condition ...

Фраза GROUP BY используется для того, чтобы опе­ратор SELECT выдавал одну объединенную строку для каждой группы выбранных строк. Каждая группа формируется на основе одинаковых значений для столб­цов или выражений.

Каждое выражение expr в SELECT должно быть одним из следующих:

* быть константой или функцией без параметров (например SYSDATE)

* содержать группирующую функцию вроде SUM, COUNT или MAX

* в точности совпадать с выражением expr в фразе GROUP BY

Выражения GROUP BY могут ссылаться на любой стол­бец из фразы FROM независимо от того, упоминаются они или нет в списке SELECT.

Фразы GROUP BY и HAVING записываются после фраз WHERE и CONNECT BY...START WITH. Если присутству­ют обе фразы (GROUP BY и HAVING), они могут зада­ваться в любом порядке.

Для общего количества байт, содержащихся во всех выражениях фразы GROUP BY существует систе­мозависимое ограничение.

      1. Фраза having

Эта фраза используется для указания, какие группы из GROUP BY будут включаться в окончательный ре­зультат. ORACLE обрабатывает фразы WHERE, GROUP BY и HAVING следующим образом:

1. Удаляет все строки, не удовлетворяющие усло­вию WHERE.

2. Вычисляет и формирует группы как указано во фразе GROUP BY.

3. Удаляет все группы, не удовлетворяющие ус­ловию HAVING.

Чтобы выдать минимальную и максимальную заработную плату для каждого отдела (таблиц EMP), нужно выполнить команду:

SELECT DEPTNO, MIN(SAL), MAX(SAL) FROM EMP

GROUPBYDEPTNO

Результат выполнения команды представлен ниже.

DEPTNO MIN(SAL) MAX(SAL)

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

10 1300 5000

20 800 3000

30 950 2850

Чтобы сделать такой же запрос применительно к клеркам, используется запрос:

SELECT DEPTNO, MIN(SAL), MAX(SAL) FROM EMP

WHERE JOB = 'CLERK' GROUP BY DEPTNO

Результат представляется в форме:

DEPTNOMIN(SAL)MAX(SAL)

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

10 1300 1300

20 800 1100

30 950 950

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