ИСПОЛЬЗОВАНИЕ СТРОК И ВЫРАЖЕНИЙ С 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 Октября. Так как вставляемые строки двух этих запросов различны, строки не
будут устранены
как дубликаты.
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: Выбор наивысших и наинизших порядков,
определяемых с помощью строк