Найти в Дзене
ГАУС IT

Что быстрее COALESCE или NVL? Разбираем 2-е функции

Всем привет! В этой статье мы познакомимся с 2-мя функциями COALESCE и NVL. COALESCE Для начала давайте посмотрим на синтаксис функции COALESCE: COALESCE( expr1, expr2, … expr_n ) expr1 , expr2 .. expr_n - выражения для проверки на значение NOT NULL. Функция SQL COALESCE возвращает первое определённое, то есть не-NULL значение из списка её аргументов. Обычно одним или несколькими аргументами функции COALESCE является столбец таблицы, к которой обращён запрос. Нередко аргументом функции является и подзапрос. Это делается тогда, когда невозможно с уверенностью утверждать, что подзапрос вернёт какое-либо определённое значение, а не значение NULL. Тогда это NULL-значение будет заменено на следующее сразу же за ним определённое значение. Пример: SELECT COALESCE( value1, value2, value3) FROM TABLE_1; Другими словами это: if(value1 is not null) result = value1 else if (value2 is not null) result = value2 else if (value3 is not null) result = value3 else result = null Теперь д
Оглавление

Всем привет! В этой статье мы познакомимся с 2-мя функциями COALESCE и NVL.

COALESCE

Для начала давайте посмотрим на синтаксис функции COALESCE:

COALESCE( expr1, expr2, … expr_n )

expr1 , expr2 .. expr_n - выражения для проверки на значение NOT NULL.

Функция SQL COALESCE возвращает первое определённое, то есть не-NULL значение из списка её аргументов. Обычно одним или несколькими аргументами функции COALESCE является столбец таблицы, к которой обращён запрос. Нередко аргументом функции является и подзапрос. Это делается тогда, когда невозможно с уверенностью утверждать, что подзапрос вернёт какое-либо определённое значение, а не значение NULL. Тогда это NULL-значение будет заменено на следующее сразу же за ним определённое значение.

Пример:

SELECT COALESCE( value1, value2, value3)
FROM TABLE_1;

Другими словами это:

if(value1 is not null)
result = value1
else if (value2 is not null)
result = value2
else if (value3 is not null)
result = value3
else
result = null

Теперь давайте взглянем на NVL.

NVL

Для начала как всегда посмотрим на синтаксис:

NVL(<column>,<value>)

NVL (NULL Значение) будет меняться на значение <value> каждое NULL значение, найденное в столбце <column>. Если полученное значение <column> не равняется NULL, NVL ничего не делает.

Рассмотрим пример:

SELECT NVL(city, 'Moscow')
FROM TABLE_1;

SQL запрос приведенный выше вернет ‘Moscow’, если в поле city содержится NULL значение. В противном случае, он будет возвращать значение city.

Так же значением value может быть и другая колонка.

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

Отличия NVL от COALESCE

NVL и COALESCE используются для достижения той же функциональности - предоставления значения по умолчанию в случае, если столбец возвращает NULL.

Различия заключаются в следующем:

  1. NVL принимает только 2 аргумента, в то время как COALESCE может принимать несколько аргументы
  2. NVL вычисляет оба аргумента, а COALESCE останавливается при появление значения, отличного от NULL.
  3. NVL выполняет неявное преобразование типа данных на основе первого аргумента. COALESCE ожидает, что все аргументы будут иметь один и тот же тип данных.
  4. COALESCE является стандартным ANSI, а NVL используется только в ORACLE

Наверно самым главным вопросом остается производительность, что же быстрее NVL или COALESCE? Ответ прост. Быстрее всего справляется COALESCE, т.к. он не рассчитывает все аргументы, а проверяет только следующий, и только когда текущий равен NULL. Хотя лучше результаты он показывает даже при статичных параметрах.

Итог меняйте у себя в проектах NVL на COALESCE.

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

#it #sql #обучение #курс #программирование