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

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


Как задать столбцам значимые имена Задача

Требуется изменить имена возвращенных в результате запроса столбцов, чтобы сделать их более понятными и удобными для чтения. Рассмотрим запрос, возвращающий зарплаты и комиссионные всех служащих:

1 select sal,comm

2 from emp

Что такое sal ? Сокращенная запись sale (продажа)? Может, это чье-то имя? Что означает comm ? Сокращение от communication (общение)? Столбцы в результирующем наборе должны иметь более понятные названия.

Решение

Чтобы изменить имена в результатах запроса, используйте ключевое слово AS следующим образом: исходное имя AS новое имя. Для некоторых баз данных применение AS необязательно, но во всех оно допускается:

1 select sal as salary, comm as commission

2 from emp

SALARY COMMISSION

1600

1250

2975

1250

1300

2850

2450

3000

5000

1500

1100

3000

1300

Обсуждение

Задавая новые имена возвращаемым запросом столбцам с помощью ключевого слова AS, мы присваиваем псевдонимы (aliasing) этим сто-бцам. Новые имена являются псевдонимами (aliases). Хорошо подобранные псевдонимы способствуют пониманию запроса и его результатов пользователями.



Обращение к столбцу в предикате WHERE по псевдониму

Задача

Допустим, что именам столбцов результирующего множества присваиваются псевдонимы, чтобы сделать их более понятными и содержательными. Требуется исключить некоторые из строк с помощью предиката WHERE. Однако при использовании псевдонимов в предикате WHERE возникает ошибка:

select sal as salary, comm as commission

from emp where salary < 5000

Решение

Чтобы обратиться к столбцу по псевдониму, необходимо использовать вложенный запрос:

1 select *

2 from (

3 select sal as salary, comm as commission

4 from emp

5 ) x

6 where salary < 5000

Обсуждение

В этом простом примере можно не прибегать к вложенному запросу, а в предикате WHERE напрямую обратиться к столбцам по их именам, COMM или SAL. Результат будет такой же. Данный пример показывает принципы использования в предикате WHERE следующих элементов языка:

Агрегатных функций

Скалярных подзапросов

Оконных функций

Псевдонимов

Использование вложеного запроса, присваивающего псевдонимы, дает возможность обращаться к столбцам по псевдонимам во внешнем запросе. Почему это необходимо? Предикат WHERE обрабатывается раньше оператора SELECT; таким образом, на момент обработки WHERE в запросе, приведенном в разделе Задача , столбцов SALARY и COMMISSION еще не существует. Эти псевдонимы присваиваются уже после обработки WHERE. А вот оператор FROM выполняется до предиката WHERE. Размещение исходного запроса в операторе FROM обеспечивает формирование его результатов до обработки самого внешнего WHERE, следовательно, этот предикат WHERE будет видеть




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

В данном решении вложенному запросу присвоен псевдоним X. Не все базы данных требуют явного присваивания псевдонима вложенному запросу, но все допускают его.

Конкатенация значений столбцов Задача

Требуется извлечь значения нескольких столбцов в один столбец. Например, в результате запроса к таблице EMP необходимо получить следующий результат:

CLARK WORKS AS A MANAGER KING WORKS AS A PRESIDENT MILLER WORKS AS A CLERK

Однако данные, формирующие это результирующее множество, располагаются в таблице EMP в двух разных столбцах, ENAME и JOB (работа):

select ename, job from emp where deptno = 10

ENAME JOB

CLARK MANAGER KING PRESIDENT MILLER CLERK

Решение

Найдите и используйте предоставляемую вашей СУБД встроенную функцию для конкатенации значений нескольких столбцов.

DB2, Oracle, PostgreSQL

В этих базах данных оператором конкатенации является двойная вертикальная черта:

1 select ename WORKS AS A job as msg

2 from emp

3 where deptno=10

MySQL

Эта база данных поддерживает функцию CONCAT:

1 select concat(ename, WORKS AS A ,job) as msg

2 from

3 where deptno=10



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

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