|
Программирование >> Преобразование значений null
Решение Для осуществления условной логики непосредственно в выражении 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 не обеспечивает возвращения пятой строки. Невозможно получить пятую строку, не возвратив перед этим строки с первой по четвертую!
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |