Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Использование строк и выражений с UNION

Иногда, вы можете вставлять константы и выражения в предложении SELECT, используемые с UNION. Это не следует строго указаниям ANSI, но это полезная и необычно используемая возможность. Константы и выражения, которые вы используете, должны встречать совместимые стандарты, которые мы выделяли ранее. Эта свойство полезно, например, чтобы устанавливать комментарии, указывающие какой запрос вывел данную строку. Предположим, что вы должны сделать отчет о том, какие продавцы производят наибольшие и наименьшие порядки по датам. Мы можем объединить два запроса, вставив туда текст, чтобы различать вывод для каждого из них.

SELECT a.snum, sname, onum, 'Highest on', odate FROM (Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MAX (amt) FROM Orders c WHERE c.odate = b.odate )

UNION

SELECT a.snum, (sname, (onum ' Lowest on', odate FROM ( Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MIN (amt) FROM Orders c WHERE c.odate = b.odate );

Вывод из этой команды показывается в Рисунке 14.4.

Мы должны были добавить дополнительный пробел в строку 'Lowest on', чтобы сделать ее совпадающей по длине со строкой 'Highest on'. Обратите внимание что Peel выбран при наличии и самого высокого и самого низкого ( фактически он единственный ) порядка на 5 Октября. Так как вставляемые строки двух этих запросов различны, строки не будут устранены как дубликаты.

SQL Execution Log

AND b.amt =

( SELECT min (amt) FROM Orders c

WHERE c.odate = b.odate);

1001 Peel 3008 Highest on 10/05/1990
1001 Peel 3008 Lowest on 10/05/1990
1001 Peel 3011 Highest on 10/06/1990
1002 Serres 3005 Highest on 10/03/1990
1002 Serres 3007 Lowest on 10/04/1990
1002 Serres 3010 Lowest on 10/06/1990
1003 Axelrod 3009 Highest on 10/04/1990
1007 Rifkin 3001 Lowest on 10/03/1990

Рисунок 14.4: Выбор наивысших и наинизших порядков, определяемых с помощью строк