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