Mysql запросы — как единственно верный способ вывода данных

Подзапросы и функция EXISTS

Функция EXISTS принимает вложенный запрос в качестве аргумента и возвращает значение false, если вложенный запрос не возвращает строк и значение true в противном случае. Рассмотрим работу этой функции на нескольких примерах, начиная со следующего примера:

В этом примере происходит выборка фамилий всех сотрудников, работающих над проектом p1. Вложенный запрос функции EXISTS почти всегда зависит от переменной с внешнего запроса. Поэтому функция EXISTS обычно определяет связанный подзапрос.

Давайте проследим, как Database Engine может обрабатывать запрос в этом примере. Сначала внешний запрос рассматривает первую строку таблицы Employee (сотрудник Фролов). Далее функция EXISTS определяет, есть ли в таблице Works_on строки, чьи номера сотрудников совпадают с номером сотрудника в текущей строке во внешнем запросе и чей ProjectNumber равен p1. Поскольку сотрудник Фролов не работает над проектом p1, вложенный запрос возвращает пустой набор, вследствие чего функция EXISTS возвращает значение false. Таким образом, сотрудник Фролов не включается в конечный результирующий набор. Этому процессу подвергаются все строки таблицы Employee, после чего выводится конечный результирующий набор.

В примере ниже показано использование функции NOT EXISTS:

В этом примере происходит выборка фамилий сотрудников, чей отдел не расположен в Санкт-Петербурге.

Список выбора инструкции SELECT во внешнем запросе с функцией EXISTS не обязательно должен быть в форме SELECT *, как в предыдущем примере. Можно использовать альтернативную форму SELECT colum_list, где column_list представляет список из одного или нескольких столбцов таблицы. Обе формы равнозначны, потому что функция EXISTS только проверяет на наличие (или отсутствие) строк в результирующем наборе. По этой причине в данном случае правильнее использовать форму SELECT *.

Oracle ключи, индексы, уникальные ограничения

Primary Keys Первичные ключи
Foreign Keys Внешние ключи
Foreign Keys with cascade delete Внешние ключи с каскадным удалением
Foreign Keys with set null on delete Внешние ключи с «set null on delete»
Drop a foreign key Удаление внешнего ключа
Disable a foreign key Выключение внешнего ключа
Enable a foreign key Включение внешнего ключа
Indexes Индексы
unique constraints Уникальные ограничения
check constraints Проверка ограничений
IF-THEN-ELSE CASE GOTO
  • LOOP оператор
  • FOR LOOP
  • CURSOR FOR LOOP
  • WHILE LOOP
  • EXIT оператор
Comparison operators Операторы сравнения Oracle PL/SQL такие как =, !=, , >, >=,
AND логический оператор и
OR логический оператор или
AND и OR логический операторы и и или
NOT логический оператор не
LIKE сопоставляет данные с шаблоном
REGEXP_LIKE выполняет регулярные выражения
IN определяет, соответствует ли значение или список значений выражению в указанном наборе.
IS NULL проверка значения NULL
IS NOT NULL проверка на значения NOT NULL
BETWEEN используется для получения значений в пределах диапазона
Record Запись
%ROWTYPE Модификатор записи
%TYPE Модификатор столбца
Associative Arrays Ассоциативные массивы
Varrays Массивы переменной длины
Nested Tables Вложенные таблицы

Методы коллекций Oracle PL/SQL

Метод коллекции Тип Описание
DELETE Процедура Удаляет элементы из коллекции.
TRIM Процедура Удаляет элементы из конца varray или Nested Tables.
EXTEND Процедура Добавляет элементы в конец varray или Nested Tables.
EXISTS Функция Возвращает TRUE тогда и только тогда, когда существует определенный элемент varray или Nested Tables.
FIRST и LAST Функции FIRST возвращает первый, LAST последний индекс в коллекции.
COUNT Функция Возвращает количество элементов в коллекции.
LIMIT Функция Возвращает максимальное количество элементов, которые может иметь коллекция.
PRIOR и NEXT Функции PRIOR возвращает индекс, который предшествует указанному индексу, NEXT возвращает индекс, который следует за указанным индексом.

Oracle PL/SQL операции над коллекциями

MULTISET UNION Возвращает объединение двух коллекций
MULTISET UNION DISTINCT Возвращает объединение двух коллекций с дистинктом (убирает дубли)
MULTISET INTERSECT Возвращает пересечение двух коллекций
MULTISET INTERSECT DISTINCT Возвращает пересечение двух коллекций с дистинктом (убирает дубли)
SET Возвращает коллекцию с дистинктом (т.е. коллекцию без дублей)
MULTISET EXCEPT Возвращает разницу (усечение) двух коллекций
MULTISET EXCEPT DISTINCT Возвращает разницу (усечение) двух коллекций с дистинктом (убирает дубли)
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector