Для работы с данными в базе данных Oracle используются SQL-операторы, которые могут включать в себя DDL, DML и другие типы операторов. Для начала давайте вспомним, как выглядят базовые операторы SQL.
Оператор SELECT
Оператор SELECT
является наиболее часто используемым оператором SQL (и также называется проекцией — projection). Он позволяет извлекать все или некоторые данные из таблицы на основе определенных критериев.
Проще всего оператор SELECT
выглядит, когда применяется для извлечения всех данных таблицы:
SQL> SELECT * FROM employees;
Для извлечения только определенных столбцов необходимо указывать имена этих столбцов после ключевого слова SELECT
, например:
SQL> SELECT first_name, last_name, hiredate FROM employees;
При желании извлечь только первых десять строк таблицы можно использовать оператор SELECT
следующим образом:
SQL> SELECT * FROM employees WHERE rownum <11;
Если требуется узнать только о том, какое количество строк содержится в таблице, оператор SELECT
применяется так:
SQL> SELECT COUNT(*) FROM employees;
Если в таблице присутствуют дубликаты, можно использовать в операторе SELECT
конструкциюDISTINCT
для исключения дублированных значений, как показано ниже:
SQL> SELECT DISTINCT username FROM V$SESSION;
С помощью необязательной конструкции WHERE
в оператореSELECT
можно задавать различные условия и тем самым обеспечивать возврат только определенных строк. В таблице А.1 перечислены некоторые наиболее типичные условия, которые можно указывать в конструкцииWHERE
.
Символ | Условие |
= | Равно |
> | Больше |
< | Меньше |
<= | Меньше или равно |
>= | Больше или равно |
<> | Не равно |
Ниже приведено несколько примеров применения конструкции WHERE
:
SQL> SELECT employee_id WHERE salary = 50000; SQL> SELECT employee_id WHERE salary < 50000; SQL> SELECT employee_id WHERE salary > 50000; SQL> SELECT employee_id WHERE salary <= 50000; SQL> SELECT employee_id WHERE salary >= 50000; SQL> SELECT employee_id WHERE salary ! 50000;
Условие LIKE
Условие LIKE
позволяет ограничивать количество возвращаемых оператором SELECT
строк за счет применения операции сопоставления с образцом. Ниже приведен пример использования этого условия:
SQL> SELECT employee_id, last_name FROM employees 2* WHERE last_name LIKE 'Fa%'; EMPLOYEE_ID LAST_NAME ----------- ---------- 109 Faviet 202 Fay SQL>
Образец, с которым должно выполняться сопоставление, должен быть заключен в одинарные кавычки (''
). В приведенном выше примере знак процента (%
) обозначает, что за буквами Fa
может идти любая строка символов. То есть знак процента выступает в роли группового символа, способного замещать один или более символов, и, по сути, делает то же самое, что во многих операционных системах делает символ звездочки (*
). Важно обратить внимание на то, что один символ подчеркивания (_
) тоже может выступать групповым символом, но в отличие от знака процента способен замещать только один символ.
Оператор INSERT
Оператор INSERT
позволяет добавлять в таблицу новые данные, в том числе и дублированные в случае отсутствия требований уникальности со стороны первичного ключа или индекса. В общем, синтаксис оператораINSERT
выглядит следующим образом:
INSERT INTO <таблица> [(<столбец i, ... , столбец j>)] VALUES (<значение i, ... , значение j>);
Ниже приведен пример применения оператора INSERT
:
SQL> INSERT INTO employees(
2 employee_id,last_name,email,hire_date,job_id)
3 VALUES
4* (56789,'alapati',Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.', sysdate,98765);
1 row created.
SQL>
В этом примере имена столбцов были указаны потому, что заполнить данным требовалось только некоторые из столбцов вставлявшейся строки. Остальные столбцы были оставлены пустыми, что вполне приемлемо при условии, что ни один из них не был определен как не допускающий нулевых значений (NOT NULL
).
При желании вставить значения во все столбцы таблицы можно использовать более простой оператор INSERT
, подобный тому, что показан ниже:
SQL> INSERT INTO department VALUES (34567, 'payroll', 'headquarters', 'dallas'); 1 row created. SQL>
Если требуется вставить все столбцы из одной таблицы в другую, можно использовать такой оператор INSERT
:
SQL> INSERT INTO b SELECT * FROM a WHERE city='DALLAS';
В случае если окажется, что таблицы b
не существует, можно использовать операторCREATE TABLE имя_таблицы AS SELECT * FROM (CTAS)
, как показано ниже:
SQL> CREATE table b as SELECT * FROM a;
Оператор DELETE
Оператор DELETE
служит для удаления строк из таблицы. Его синтаксис, в общем случае, выглядит так:
DELETE FROM <таблица> [WHERE <условие>];
Например, для удаления пользователя Fay
из таблицыemployees
потребуется использовать такой операторDELETE
:
SQL> DELETE FROM employees 2* WHERE last_name='Fay'; 1 row deleted.
Если ограничивающее условие WHERE
не указано, операторDELETE
удалит все строки из таблицы:
SQL> DELETE FROM X;
Удалять все строки из таблицы можно также и с помощью команды TRUNCATE
, но отменять последствия этой команды нельзя, а отменять действие оператораDELETE
можно, воспользовавшись операторомROLLBACK
:
SQL> ROLLBACK;
Оператор UPDATE
Оператор UPDATE
применяется для изменения значения (или значений) одного или нескольких столбцов в строке (или строках) внутри таблицы. Выражение, используемое для установки или изменения значения столбца, может представлять собой константную, арифметическую или строковую операцию или же результат выполнения оператораSELECT
.
В общем, синтаксис оператора UPDATE
выглядит следующим образом (элементы в квадратных скобках являются необязательными):
UPDATE <таблица> SET <столбец i> = <выражение i>, ... , <столбец j> = <выражение j> [WHERE <условие>];
При желании изменить или модифицировать значения столбца во всех строках таблицы можно использовать оператор UPDATE
без конструкцииWHERE
:
SQL> UPDATE persons SET salary=salary*0.10;
Для модификации только определенных строк нужно обязательно задавать в операторе UPDATE
конструкциюWHERE
:
SQL> UPDATE persons SET salary = salary * 0.10 WHERE review_grade > 5;
Фильтрация данных
За счет использования в операторе SELECT
, INSERT
, DELETE
или UPDATE
конструкцииWHERE
можно еще также и фильтровать данные, т.е. ограничивать количество строк, в отношении которых должен выполняться данный оператор. Ниже приведен простой пример:
SQL> INSERT INTO a SELECT * FROM b WHERE city='DALLAS';
Сортировка результатов запроса
Довольно часто бывает необходимо сортировать результаты запроса в каком-нибудь порядке. Конструкция ORDER BY
позволяет сортировать данные на основе значения одного или нескольких столбцов. Вместе с ней можно указывать желаемый порядок сортировки (по возрастанию или убыванию), использовать для сортировки псевдонимы столбцов, а также выполнять сортировку по нескольким столбцам. Ниже приведен простой пример:
SQL> SELECT employee_id, salary FROM employees ORDER BY salary;
Изменение порядка сортировки
По умолчанию конструкция ORDER BY
предусматривает выполнение сортировки в порядке возрастания. При желании, чтобы сортировка выполнялась по убыванию, нужно указать ключевое слово DESC
:
SQL> SELECT employee_id, salary FROM employees ORDER BY salary desc;
Выполнение сортировки по нескольким столбцам
При желании результаты можно сортировать на основе значений более чем одного столбца. Например, ниже приведен запрос, предусматривающий выполнение сортировки на основании значений двух столбцов — salary
иdept
:
SQL> SELECT employee_id, salary FROM employees ORDER BY salary, dept;