Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Сортировка результатов комбинированных запросов

Читайте также:
  1. Figure 6. Ежедневная оценка числа сотрудников в зависимости от времени обработки запросов и количества инцидентов
  2. I.5.5. Просмотр и анализ результатов решения задачи.
  3. IV. Обработка результатов
  4. IV. Обработка результатов измерений
  5. IV. Обработка результатов измерений
  6. IV. Обработка результатов измерений
  7. IV. Обработка результатов измерений

Результаты выполнения оператора SELECT сортируются с помощью предложения ORDER BY. При комбинировании запросов с помощью UNION только одно предложение ORDER BY может быть использовано, и оно должно быть проставлено в последнем операторе SELECT. Действительно, на практике нет особого смысла часть результатов сортировать в одном порядке, а другую часть - в другом. Поэтому несколько предложений ORDER BY применять не разрешается.

 

 

Объединение “по вертикали” или операция UNION

На самом деле в английском языке слов JOIN больше соответствует русскому слову соединение, а слово объединение, в свою очередь, ближе к английскому UNION. Я надеюсь, что не смутил читателя тем, что на предыдущих этапах везде использовал слово “объединение”. Разница между операциями JOIN и UNION в SQL принципиальная. Лучше сказать, что обе эти операции ортогональны друг другу. Если JOIN всячески объединяла данные в ширину или “по горизонтали”: объединяла поля из разных таблиц (колонки из разных запросов) в один запрос, то UNION напротив: рост в ширину не приемлет и объединяет именно результаты различных запросов одинакового формата. Другими словами - объединяет данные “по вертикали”.

 

 

Пример простейшего объединения (псевдоним NAME здесь необязателен):

SELECT S_NAME AS NAME FROM D_STAFF UNION SELECT P_NAME AS NAME FROM D_PROFILE


Объединение UNION в SQL запросе.

Естественно, что можно накладывать любые критерии отбора на объединяемые запросы:

SELECT S_NAME AS NAME FROM D_STAFFWHERE S_NAME LIKE '%анд%'UNIONSELECT P_NAME AS NAME FROM D_PROFILEWHERE P_NAME LIKE 'фин%'


Объединение UNION с дополнительными условиями.

Ну и, наконец, обещанный на предыдущем шаге эквивалент FULL JOIN. Запрос построен на основании того факты, что пустые значения в результатах запросов LEFT JOIN и RIGH JOIN можно идентифицировать сравнением вида IS NULL. Противоположное выражение будет выглядеть как IS NOT NULL. Из примера, думаю, все станет ясно.

SELECT D_STAFF.XD_IID, D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF LEFT JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IIDWHERE (D_STAFF_PROFILE.STAFF_ID IS NULL) ORDER BY D_STAFF.S_EXPERIENCE DESC UNION ALL SELECT D_STAFF.XD_IID, D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF RIGHT JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IIDWHERE (D_STAFF.XD_IID IS NULL) ORDER BY D_STAFF.S_EXPERIENCE DESC UNION ALL SELECT D_STAFF.XD_IID, D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF INNER JOIN D_STAFF_PROFILE ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IIDORDER BY D_STAFF.S_EXPERIENCE DESC


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

По умолчанию результат UNION содержит только уникальные строки. Ключевое слово ALL заставляет в отчет включать все, в том числе и повторяющиеся строки. Кстати, первые две части запроса соответствуют как раз результату операции MINUS:

LEFT JOIN MINUS INNER JOIN и RIGHT JOIN MINUS INNER JOIN.

В языке SQL ключевое слово UNION применяется для объединения результатов двух SQL-запросов в единую таблицу, состоящую из схожих строк. Оба запроса должны возвращать одинаковое число столбцов и совместимые типы данных в соответствующих столбцах. Данный оператор был описан уже в самом первом стандарте SQL — SQL/89.

Синтаксис

Оператор указывается между запросами. В упрощенном виде это выглядит следующим образом:

<запрос1> UNION [ ALL ]<запрос2> UNION [ ALL ]<запрос3>.....;

По умолчанию любые дублирующие записи автоматически скрываются, если не использовано выражение UNION ALL.

Необходимо отметить, что UNION сам по себе не гарантирует порядок строк. Строки из второго запроса могут оказаться в начале, в конце или вообще перемешаться со строками из первого запроса. В случаях, когда требуется определенный порядок, необходимо использовать выражение ORDER BY.


Дата добавления: 2015-10-28; просмотров: 81 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Включение или выключение повторяющихся строк| Подготовка к запуску

mybiblioteka.su - 2015-2024 год. (0.006 сек.)