
- •Формирование запросов к базе данных.
- •Множественные операции
- •Order by
- •For update of
- •Последовательности
- •Фразы оператора select
- •Фраза from
- •Фразы group by и having
- •Фраза having
- •Фраза where
- •Фраза where (Встроенный sql)
- •Фраза current of
- •Фразы connect by и start with
- •Start with
- •Использование order by
- •Фраза order by
- •Внешнее объединение
- •Подзапросы.
- •Функции агрегирования результатов запроса
- •Курсоры
- •Види курсоров
- •Объявление курсора.
- •Открытие курсора
- •Атрибуты курсора.
- •Чтение данных с использованием курсора.
- •Закрытие курсора
- •Неявные курсоры. Предопределенный курсор sql.
- •Примеры работы с курсорами
- •Изменение и удаление данных в позиции курсора.
- •Переменные-курсоры.
- •Работа с транзакциями в pl/sql.
- •Курсоры и транзакции.
Фразы оператора select
В общем случае оператор SELECTможет иметь следующие элементы.
* фраза FROM
* фраза WHERE
* фразы GROUP BY и HAVING
* фраза ORDER BY
* фраза CONNECT BY
Фраза 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
Фразы 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 существует системозависимое ограничение.
Фраза 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