Программирование >>  Преобразование значений null 

1 ... 7 8 9 [ 10 ] 11 12 13 ... 219


ENAME

STATUS

SMITH

UNDERPAID

ALLEN

1600

UNDERPAID

WARD

1250

UNDERPAID

JONES

2975

MARTIN

1250

UNDERPAID

BLAKE

2850

CLARK

2450

SCOTT

3000

KING

5000

OVERPAID

TURNER

1500

UNDERPAID

ADAMS

1100

UNDERPAID

JAMES

UNDERPAID

FORD

3000

MILLER

1300

UNDERPAID

Решение

Для осуществления условной логики непосредственно в выражении SELECT используйте выражение CASE:

1 select ename,sal,

2 case when sal <= 2000 then UNDERPAID

3 when sal >= 4000 then OVERPAID

SQL Server

Для конкатенации используется оператор + :

1 select ename + WORKS AS A + job as msg

2 from emp

3 where deptno=10

Обсуждение

Используйте функцию CONCAT для конкатенации значений нескольких столбцов. Оператор является сокращенной записью функции CONCAT в DB2, Oracle и PostgreSQL, тогда как + выполняет конкатенацию в SQL Server.

Использование условной логики в выражении SELECT Задача

Требуется осуществить операцию IF-ELSE в выражении SELECT. Например, необходимо сформировать результирующее множество, в котором для служащих, получающих $2000 или менее, возвращается значение UNDERPAID (низкооплачиваемый), для служащих, получающих $4000 или более, возвращается значение OVERPAID (высокооплачиваемый), и для служащих, заработная плата которых находится между $2000 и $4000, возвращается значение OK . Результирующее множество должно выглядеть следующим образом:



4 else OK

5 end as status

6 from emp

Обсуждение

Выражение CASE позволяет применять условную логику к возвращаемым в результате запроса значениям. В целях формирования более удобного для чтения результирующего множества можно указать псевдоним для выражения CASE. В данном решении результаты выражения CASE выводятся в столбце под псевдонимом STATUS. Конструкция ELSE является необязательной. Если ELSE опущено, выражение CASE возвратит NULL для любой не удовлетворяющей условию строки.

Ограничение числа возвращаемых строк Задача

Требуется ограничить число возвращаемых запросом строк. Порядок не имеет значения; подойдут любые n строк.

Решение

Для управления числом возвращаемых строк используйте встроенные функции, предоставляемые вашей базой данных.

В DB2 используйте оператор FETCH FIRST:

1 select *

2 from emp fetch first 5 rows only MySQL and PostgreSQL

В MySQL и PostgreSQL то же самое можно выполнить, используя LIMIT:

1 select *

2 from emp limit 5

Oracle

В Oracle ограничение на число возвращаемых строк накладывается с помощью функции ROWNUM в предикате WHERE:

1 select *

2 from emp

3 where rownum <= 5

SQL Server

Для ограничения числа возвращаемых строк используйте ключевое

слово TOP:



1 select top 5 *

2 from emp

Обсуждение

Многие производители предоставляют операторы FETCH FIRST и LIMIT, обеспечивающие возможность задавать число строк, которое должно быть возвращено в результате запроса. Oracle отличается тем, что в нем приходится использовать функцию ROWNUM, возвращающую порядковый номер каждой строки результирующего множества (возрастающую, начиная с 1, величину).

Рассмотрим, что происходит при использовании ROWNUM <= 5 для возвращения первых пяти строк:

1. Oracle выполняет запрос.

2. Oracle извлекает первую строку и называет ее строкой номер 1.

3. Номер строки больше 5? Если нет, Oracle возвращает строку, потому что она отвечает критерию: ее порядковый номер меньше или равен 5. Если да, Oracle не возвращает строку.

4. Oracle извлекает следующую строку и присваивает ей следующий порядковый номер по возврастанию (2, затем 3, затем 4 и т. д.).

5. Переходим к шагу 3.

Как видно из данного процесса, присвоение значений, возвращаемых функцией ROWNUM Oracle, происходит после извлечения очередной строки. Это очень важно и является ключевым моментом. Многие разработчики на Oracle пытаются реализовать извлечение только, скажем, пятой возвращенной запросом строки, задавая ROWNUM = 5. Такое использование условия равенства в сочетании с ROWNUM является неверным. При попытке возвратить пятую строку с помощью ROWNUM = 5 происходит следующее:

1. Oracle выполняет запрос.

2. Oracle извлекает первую строку и называет ее строкой номер 1.

3. Номер строки равен 5? Если нет, Oracle отбрасывает строку, потому что она не отвечает заданному критерию. Если да, Oracle возвращает строку. Но ответ всегда будет отрицательным!

4. Oracle извлекает следующую строку и называет ее строкой номер 1, поскольку первая возвращенная запросом строка должна быть пронумерована как первая строка.

5. Переходим к шагу 3.

После тщательного разбора этого процесса становится понятно, почему использование ROWNUM = 5 не обеспечивает возвращения пятой строки. Невозможно получить пятую строку, не возвратив перед этим строки с первой по четвертую!



1 ... 7 8 9 [ 10 ] 11 12 13 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика