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