Учебники

Ограничение и сортировка данных

Основными возможностями оператора SELECT являются выбор, проекция и соединение. Отображение определенных столбцов из таблицы называется операцией проекта. Теперь мы сосредоточимся на отображении определенных строк вывода. Это называется операцией выбора. Определенные строки можно выбрать, добавив предложение WHERE в запрос SELECT. На самом деле, предложение WHERE появляется сразу после предложения FROM в иерархии запросов SELECT. Последовательность должна поддерживаться во всех сценариях. В случае нарушения Oracle выдает исключение.

Синтаксис:

SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]

В синтаксисе

  • ГДЕ предложение является ключевым словом

  • [условие] содержит имена столбцов, выражения, константы, литералы и оператор сравнения.

ГДЕ предложение является ключевым словом

[условие] содержит имена столбцов, выражения, константы, литералы и оператор сравнения.

Предположим, что ваш менеджер работает над квартальным бюджетом для вашей организации. В рамках этой деятельности необходимо составить список основных деталей каждого сотрудника, но только для сотрудников, которым выплачивается не менее 25 000 долларов в год. SQL-запрос ниже выполняет эту задачу. Обратите внимание на использование предложения WHERE, выделенного жирным шрифтом.

SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;  

EMPLOYEE_ID  LAST_NAME        FIRST_NAME       SALARY
----------   ---------------  ---------------  -----------
88303        Jones            Quincey          $30,550.00
88404        Barlow           William          $27,500.00
88505        Smith            Susan            $32,500.00

3 rows selected 

Точки, которые следует отметить —

  • Предложение SELECT может содержать только одно предложение WHERE. Однако к условию WHERE можно добавить несколько условий фильтрации с помощью оператора AND или OR.

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

  • Псевдоним столбца нельзя использовать в предложении WHERE.

  • Символьные литералы должны быть заключены в одинарные кавычки и чувствительны к регистру.

  • Литералы даты должны быть заключены в одинарные кавычки и чувствительны к формату. Формат по умолчанию — DD-MON-RR .

Предложение SELECT может содержать только одно предложение WHERE. Однако к условию WHERE можно добавить несколько условий фильтрации с помощью оператора AND или OR.

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

Псевдоним столбца нельзя использовать в предложении WHERE.

Символьные литералы должны быть заключены в одинарные кавычки и чувствительны к регистру.

Литералы даты должны быть заключены в одинарные кавычки и чувствительны к формату. Формат по умолчанию — DD-MON-RR .

Операторы сравнения

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

Oracle имеет девять операторов сравнения, которые будут использоваться в условиях равенства или неравенства.

Operator  Meaning
=         equal to 
<         less than
>         greater than
>=        greater than or equal to
<=        less than or equal to
!=        not equal to
<>        not equal to 

Другими операторами Oracle являются BETWEEN .. AND, IN, LIKE и IS NULL.

МЕЖДУ Оператором

Оператор BETWEEN может использоваться для сравнения значения столбца в определенном диапазоне. Указанный диапазон должен иметь нижний и верхний пределы, где оба включаются во время сравнения. Его использование похоже на оператор сложного неравенства (<= и> =). Может использоваться с числовыми значениями, символами и значениями типа даты.

Например, условие WHERE SALARY МЕЖДУ 1500 И 2500 в запросе SELECT перечислит тех сотрудников, чья зарплата составляет от 1500 до 2500.

Оператор IN

Оператор IN используется для проверки значения столбца в заданном наборе значений. Если столбец может быть приравнен к любому из значений из данного набора, условие проверяется. Условие, определенное с помощью оператора IN, также называется условием членства.

Например, условие WHERE SALARY IN (1500, 3000, 2500) в запросе SELECT будет ограничивать строки, где заработная плата равна 1500, 3000 или 2500.

Как оператор

Оператор LIKE используется для сопоставления с образцом и поиска по шаблону в запросе SELECT. Если часть значения столбца неизвестна, подстановочный знак может использоваться для замены неизвестной части. Для построения строки поиска используются операторы подстановочных знаков, поэтому поиск известен как поиск по подстановочным знакам. Этими двумя операторами являются Percentile (‘%’) и Underscore (‘_’). Символ подчеркивания (‘_’) заменяет один символ, а процентиль (‘%’) заменяет более одного символа. Их также можно использовать в комбинации.

Например, приведенный ниже запрос SELECT перечисляет имена тех сотрудников, чья фамилия начинается с ‘SA’.

SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';

ЕСТЬ (НЕ) НУЛЬ

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

Например, условие WHERE COMMISSION_PCT IS NULL в запросе SELECT выведет список сотрудников, у которых нет процента комиссии.

Логические Операторы

Несколько условий фильтра могут быть добавлены к предикату предложения WHERE. Несколько условий могут быть объединены с помощью логических операторов AND, OR и NOT.

  • AND: объединяет два или более условий и возвращает результаты только тогда, когда все условия выполняются.

  • ИЛИ: объединяет два или более условий и возвращает результаты, когда любое из условий выполнено.

  • NOT: отрицает выражение, следующее за ним.

AND: объединяет два или более условий и возвращает результаты только тогда, когда все условия выполняются.

ИЛИ: объединяет два или более условий и возвращает результаты, когда любое из условий выполнено.

NOT: отрицает выражение, следующее за ним.

Оператор AND связывает два или более условий в предложении WHERE и возвращает TRUE, только если все условия выполняются. Предположим, что менеджеру нужен список работниц. Кроме того, в список должны входить только сотрудники с фамилиями, которые начинаются с буквы «E» или идут позже в алфавите. Кроме того, таблица результатов должна быть отсортирована по фамилии сотрудника. Есть два простых условия, которые должны быть выполнены. Предложение WHERE может быть записано как: WHERE Gender = ‘F’ И last_name> ‘E’.

SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;

Оператор OR связывает более одного условия в предложении WHERE и возвращает TRUE, если любое из условий возвращает true. Предположим, что требования вашего организационного менеджера немного изменились. Требуется другой список сотрудников, но в этом списке сотрудники должны: (1) быть женщиной или (2) иметь фамилию, начинающуюся с буквы «Т» или буквы, которая идет позже в алфавите. Таблица результатов должна быть отсортирована по фамилии сотрудника. В этой ситуации любое из двух условий может быть выполнено для удовлетворения запроса. Работницы должны быть указаны вместе с работниками, имя которых удовлетворяет второму условию.

Оператор NOT используется для отрицания выражения или выражения.

Порядок ORDER BY

Когда вы отображаете только несколько строк данных, может оказаться ненужным сортировать вывод; однако, когда вы отображаете множество строк, менеджерам может помочь в принятии решения, отсортировав информацию. Вывод из оператора SELECT может быть отсортирован с помощью необязательного предложения ORDER BY. При использовании предложения ORDER BY имя столбца, для которого вы заказываете, также должно быть именем столбца, указанным в предложении SELECT.

Приведенный ниже SQL-запрос использует предложение ORDER BY для сортировки таблицы результатов по столбцу last_name в порядке возрастания. Порядок возрастания является порядком сортировки по умолчанию.

SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;

last_name        first_name
---------------  ---------------
Jones            Quincey
Klepper          Robert
Quattromani      Toni
Schultheis       Robert

Сортировка может быть основана на числовых значениях и значениях даты. Сортировка также может быть выполнена на основе нескольких столбцов.

По умолчанию предложение ORDER BY сортирует выходные строки в таблице результатов в порядке возрастания. Мы можем использовать ключевое слово DESC (сокращение от по убыванию), чтобы включить сортировку по убыванию. Альтернативным значением по умолчанию является ASC, которое сортируется в порядке возрастания, но ключевое слово ASC используется редко, поскольку оно используется по умолчанию. Когда используется необязательное ключевое слово ASC или DESC, оно должно следовать за именем столбца, по которому вы сортируете, в предложении WHERE.

Позиционная сортировка — числовая позиция столбца в списке выбранных столбцов может быть задана в предложении ORDER BY вместо имени столбца. Он в основном используется в запросах UNION (обсуждается позже). Запрос упорядочивает результат по окладу, поскольку он появляется на втором месте в списке столбцов.

SELECT  first_name, salary
FROM employees
ORDER BY 2;

Переменные замещения

Когда SQL-запрос должен выполняться более одного раза для другого набора входных данных, могут использоваться переменные подстановки. Переменные подстановки могут использоваться для запроса ввода данных пользователем перед выполнением запроса. Они широко используются при создании отчетов на основе запросов, которые получают диапазон данных от пользователей в качестве входных данных для условной фильтрации и отображения данных. Переменные подстановки начинаются с символа одиночного амперсанда (&) для временного хранения значений. Например,

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;

Когда вышеуказанный запрос SELECT выполняется, oracle идентифицирует ‘&’ как переменную подстановки. Он предлагает пользователю ввести значение для «last_name» и «EMPNO», как показано ниже.

Enter value for last_name:
Enter value for empno:

Как только пользователь предоставляет входные данные для обеих переменных, значения подставляются, запрос проверяется и выполняется.

Точки, которые следует отметить —

  • Если переменная предназначена для замены символа или значения даты, литерал необходимо заключить в одинарные кавычки. Полезный метод заключается в том, чтобы заключить переменную амперсанда в одинарные кавычки при работе со значениями символов и дат.

  • И SQL Developer, и SQL * Plus поддерживают переменные подстановки и команды DEFINE / UNDEFINE. Хотя SQL Developer или SQL * Plus не поддерживают проверки достоверности (кроме типа данных) при вводе пользователем.

  • Переменные подстановки можно использовать не только в предложении WHERE оператора SQL, но и в качестве замены имен столбцов, выражений или текста.

Если переменная предназначена для замены символа или значения даты, литерал необходимо заключить в одинарные кавычки. Полезный метод заключается в том, чтобы заключить переменную амперсанда в одинарные кавычки при работе со значениями символов и дат.

И SQL Developer, и SQL * Plus поддерживают переменные подстановки и команды DEFINE / UNDEFINE. Хотя SQL Developer или SQL * Plus не поддерживают проверки достоверности (кроме типа данных) при вводе пользователем.

Переменные подстановки можно использовать не только в предложении WHERE оператора SQL, но и в качестве замены имен столбцов, выражений или текста.

Использование переменной подстановки двойного амперсанда

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

SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'

Обратите внимание, что одно и то же значение & DT подставляется дважды в приведенном выше запросе. Таким образом, его значение, заданное пользователем, будет подставлено в двух местах.

Команды DEFINE и VERIFY

Задание определения переменных в сеансе задается функцией DEFINE в SQL * Plus. Переменные могут быть определены в сеансе, чтобы избежать остановки во время выполнения запроса. Oracle читает ту же переменную всякий раз, когда встречается в запросе SQL. По умолчанию он включен. С помощью предложения DEFINE можно объявить переменную в командной строке перед выполнением запроса как DEFINE variable = value; ,

Команда Verify проверяет вышеуказанную подстановку, показывая как OLD и NEW оператор. По умолчанию он выключен и может быть установлен на ON с помощью команды SET.