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 |
Проверка ограничений |
|
- 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 |
Возвращает разницу (усечение) двух коллекций с дистинктом (убирает дубли) |