Оператор SELECT

Оператор SELECT

В посте рассматривается базовое описание оператора SELECT, относящийся к группе операторов DML (Data Manipulation Language).

Согласно документации Oracle, к DML относятся следующие операторы: CALL, DELETE, EXPLAIN PLAN, INSERT, LOCK TABLE, MERGE, SELECT, UPDATE. SELECT используется для извлечения данных из одной или более таблиц, объектных таблиц, представлений, объектных представлений или материализованных представлений. Далее рассматривается извлечения данных из одной таблицы. Все SQL-запросы будут выполнены в Oracle Database 18c Express Edition, в частности к таблице employees пользователя hr. При необходимости можно прочитать: о способе разблокировки и доступа к пользователю hr в Oracle Database 18c Express Edition.

Для извлечения данных из таблицы следует указать ее название и список интересующих столбцов или символ звездочка (ниже будет описание символа звездочки).

Пример 1. С помощью оператора SELECT выполняется извлечение данных из столбцов first_name, last_name, phone_number, salary таблицы employees. После оператора SELECT надо указать имена столбцов, из которых нужно получить данные. После FROM указывается имя таблицы. При запуске SQL-запроса в SQL*Plus необходимо ставить символ точки с запятой (;) в конце запроса. Далее все примеры будут выполнены в Oracle SQL Developer. В Oracle SQL Developer допускается не использовать точку с запятой (;).

SELECT first_name, last_name, phone_number, salary
FROM employees

Если необходимо получить данные из всех существующих столбцов таблицы, то вместо того, чтобы перечислять имена всех этих столбцов, можно использовать символ звездочки (*). Символ звездочки представляет собой альтернативное решение для перечисления всех столбцов в разделе SELECT SQL-запроса.

Пример 2. В SQL-запросе используется символ звездочки, чтобы получить значения всех столбцов таблицы employees:

SELECT *
FROM employees

Если в разделе SELECT SQL-запроса перечислить наименования столбцов в нижнем регистре, то на выходе можно увидеть название столбцов в верхнем регистре. Это связано с тем, что название таблиц и ее колонок автоматически создаются в верхнем регистре при выполнении команд CREATE TABLE или ALTER TABLE. Например, при извлечении данных из столбца salary таблицы employees видно, что название столбца автоматически конвертировался в SALARY. Не всегда возникает необходимость использовать заголовки, сгенерированные после выполнения SELECT. При необходимости можно самому задавать устраивающие заголовки столбцов используя псевдонимы (aliases). В следующем примере для значения столбца email присваивается псевдоним Эл. почта.

SELECT last_name, email "Эл. почта"
FROM employees

Кроме того, можно использовать псевдонимы в сочетании с ключевым словом AS:

SELECT last_name, email AS "Эл. почта"
FROM employees

Есть возможность объединить результаты двух или более столбцов и потом вывести их в одном столбце под общим заголовком для удобного чтения. Для этого используется символ конкатенации (||) или функция CONCAT. Например, в столбцах first_name и last_name таблицы employees содержится имя и фамилия сотрудника. В предыдущих примерах значения из этих столбцов выбирались и отображались по отдельности.  Ниже при помощи символа конкатенации выполняется объединение значений этих двух столбцов для удобства чтения.

SELECT first_name || last_name AS "Имя и фамилия"
FROM employees

Результат sql-запроса показывает, что значения двух столбцов отображаются в одном столбце. Для обеспечения пробела между значениями этих двух столбцов запрос доработан с помощью двух символов апостроф и пробела между ними.

SELECT first_name || ' ' || last_name AS “Имя и фамилия”
FROM employees

Для ограничения числа строк по какому-то признаку во время выполнения оператора SELECT, можно использовать фразу WHERE. Это фраза является часто используемой, так как в таблицах обычно хранятся огромное количество строк, а на практике часто необходимо только очень небольшое подмножество этих строк. Фраза WHERE используется после FROM.

В следующем примере фраза WHERE используется для выборки из таблицы employees строки, в которой в столбце last_name содержится имя ‘Steven’:

SELECT * 
FROM employees
WHERE employee_name = 'Steven'

Запрос вернул 2 строки.

В  предыдущем примере во фразе WHERE было использовано условие сравнения – равенство (=). Помимо условия сравнения равенство есть и другие условия сравнения (условие), которые можно использовать во фразе WHERE. В приведенной ниже таблице перечисляются возможные условия сравнения:

Условие сравнения Описание
= Равно
<>  или != Не равно
Меньше чем
Больше чем
<= Меньше или равно
>= Больше или равно
ANY Любой из
ALL Все

В следующем примере во фразе WHERE используется условие неравенства (<>) для отбора строк таблицы employees, в которых salary не равен 17000.

SELECT * 
FROM employees
WHERE salary <> 17000

В следующем примере из таблицы employees будут извлечены значения столбцов first_name, last_name  и salary из строк , в которых salary больше 5000:

SELECT first_name, last_name, salary 
FROM employees
WHERE salary > 5000

Условие ANY можно использовать во фразе WHERE для сравнения значения с каким-либо из значений в списке. Перед условием ANY необходимо указать одно из условий сравнения: =, <>, <= или =>.

В приведенном ниже примере с помощью SELECT извлекаются те данные из таблицы employees, которые в столбце salary имеют значение больше одного из этих значе­ний: 10000, 12000 или 170000:

SELECT * 
FROM employees
WHERE salary > ANY (10000,120000,17000)

SQL-запрос вернул 15 (пятнадцать) строк из 107. Данный результат показывает, что у 15 сотрудников зарплата больше 10000 или 12000 или 17000.

Условие ALL используется во фразе WHERE для сравнения значения со все­ми значениями в списке. Перед условием ALL необходимо использовать одно из условий сравнения: =,<> , <, >, <= или >=. В приведенном ниже примере условие ALL используется для получения из таблицы employees строк, в которых столбец salary больше всех значений: 10000, 12000 или 150000:

SELECT * 
FROM employees
WHERE employee_id > ALL (10000,120000,15000)

В данном примере sql-запрос вернул 3 (три) строки. Результат говорит о том, что только у трех сотрудников зарплата больше 10000 и 12000 и 17000.

Кроме рассмотренных условий сравнения для фразы WHERE есть нижеперечисленные условия (см. таблицу ниже), которые позволяют ограничить число строк по нужному признаку во время выполнения оператора SELECT:

  • LIKE – Находит совпадающие шаблоны в строках
  • IN – Проверяет по спискам значений
  • BETWEEN – Проверяет по диапазону значений
  • IS NULL – Проверяет на пустые значения

Кроме того, можно использовать условие NOT для отрицания значений условий LIKE, IN, BETWEEN и IS NULL:

  • NOT LIKE
  • NOT IN
  • NOT BETWEEN
  • IN NOT NULL

Ниже предоставлено описание условий LIKE, IN, NOT, BETWEEN, NOT NULL.

Условие LIKE во фразе WHERE можно использовать для поиска и проверки значений по определенному шаблону. При использовании шаблона можно использовать комбинацию обычных символов и следующих двух групповых символов:

  • Символ подчеркивания (_) Соответствует одному символу в опре­деленной позиции
  • Символ процента (%) Соответствует любому количеству симво­лов, начинающихся в специфицированной позиции

В следующем примере используется условие LIKE с шаблоном вида ‘_t%’, для извлечения данных из столбца first_name таблицы employees. Символ подчеркивания (_) перед буквой t означает любой символ в первой позиции значения столбца, а символ процента (%) – любые символы, сле­дующие после t:

SELECT * 
FROM employees
WHERE first_name  LIKE '_t%' 

Результат sql-запроса показывает, что у трех сотрудников в имени (колонка first_name) второй буквой является t.

В следующем примере условие NOT LIKE используется для получения строк, которые отличаются от выбранных предыдущим запросом – противоположное, то есть все строки в столбце first_name содержащие значения, где во второй позиции нет буквы t:

SELECT * 
FROM employees
WHERE first_name  NOT LIKE '_t%'

Как и ожидалось, были отобраны все 104 строки кроме тех 3 строк, которые были ото­браны предыдущим запросом.

Во фразе WHERE можно использовать условие IN для извлечения только тех строк из таблицы, которые содержат значения указанного столбца фразы WHERE из предлагаемого списка. В следующем примере используется условие IN для от­бора тех строк таблицы employees, в которых значение столбца employee_id равно 200, 201 или 205:

SELECT * 
FROM employees
WHERE employee_id IN (200,201,205)

Запрос вернул 3 строки, в которых у сотрудников значение для колонки employee_id содержит 200 или 201 или 205.

Если IN заменить условием NOT IN, то будут отобраны все 104 строки, кроме указанных 3 строк, которые получены в примере выше.

Условие BETWEEN во фразе WHERE используется в тех случаях, когда необходимо отобрать строки, значения столбцов которых попадают в определенный интервал. В следующем примере условие BETWEEN исполь­зуется для отбора из таблицы employees строк, где значение столбца salary попадает в диапазон от 10000 до 12000 (включительно):

SELECT * 
FROM employees
WHERE salary BETWEEN (10000 AND 12000)

Результат показывает, что у 11 (одиннадцать) сотрудников значение для колонки зарплата (salary) находится в интервале от 10000 до 12000 (включительно).

Во фразе WHERE также могут быть использованы логические условия, кото­рые позволяют ограничивать число отбираемых строк на основании ло­гических условий. Допустимые логические условия перечислены в приведенной ниже таблице:

  • x AND y – Возвращает значение true (истина), если х и y имеют значение true
  • x or y – Возвращает значение true (истина), если либо х, либо у имеют значение true
  • NOT x – Возвращает true, если х имеет значение false; воз¬вращает false, если х имеет значение true

Следующий пример показывает применение условия AND для извлечения строк из таблицы employees, для которых удовлетворяются оба по­ставленных условия:

  • Значение для столбца salary больше 10000.
  • Значение для столбца employee_id больше 100.
SELECT * 
FROM employees
WHERE salary > 10000
AND employee_id > 100

На основе результата запроса можно сказать, что поставленным двум условия удовлетворяют значения только из 14 (четырнадцать) строк.

В следующем примере условие OR используется для от­бора строк из таблицы employees, для которых выполняется одно из следую­щих условий:

• Значение для столбца salary больше 10000
• Значение для столбца employee_id больше 100

SELECT * 
FROM employees
WHERE salary > 10000
OR employee_id > 100

После выполнения данного запроса получили множество строк (больше чем при использовании условия AND) из общего массива  строк – 107, так как условие OR возвращает всех сотрудников, у кого зарплата больше 10000 (независимо от значения employee_id) или у кого значение employee_id больше 100 (независимо от значения в колонке salary).

При необходимости во фразе WHERE можно совместно использовать несколько логических условий для создания сложного логического выражения.

На этом завершается базовое описание оператора SELECT, относящийся к группе операторов DML (Data Manipulation Language)

Leave a Reply

Your email address will not be published. Required fields are marked *