кодесурса
«SQLite

Oracle объединяет

script1adsense2code
script1adsense3code

Что такое Antijoins в Oracle?

Анти-соединение между двумя таблицами возвращает строки из первой таблицы, где во второй таблице не найдено совпадений. Анти-объединения пишутся с использованием конструкций NOT EXISTS или NOT IN. Анти-объединение по сути является противоположностью полусоединению. Найти несогласованные данные между двумя таблицами лучше, чем использовать Anti-Join или не существует.

Когда использовать Anti-Join ?

  • Анти-объединения доступны только при выполнении подзапроса NOT IN
  • Если подзапрос «NOT IN» даст хотя бы одно значение NULL, тогда целое NOT IN будет ложным, и результаты не будут возвращены, но «NOT EXIST» будет считать NULL значением и возвращает значение.
  • Подзапрос не должен быть коррелирован. то есть. Подзапрос не может содержать выражения в предложениях SELECT или WHERE, которые ссылаются на столбцы во внешнем запросе.
  • Используйте анти-объединения, когда во внешнем запросе выбирается много строк.

Пример таблицы: сотрудники


Пример таблицы: отделы


Пример: Oracle присоединяется без использования объединения

В следующем примере возвращается список пустых отделов.

SELECT   D1.department_id, D1.department_name
      FROM     departments D1
      MINUS
      SELECT   D2.department_id, D2.department_name
      FROM     departments D2, employees E2
      WHERE    D2.department_id = E2.department_id
      ORDER BY 1;

Пример вывода:

 DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
          120 казначейства
          130 Корпоративный налог
          140 Контроль и Кредит
          150 Услуги для акционеров
          160 преимуществ
          170 Производство
          180 Строительство
          190 Договаривающихся
          200 операций
          210 IT Поддержка
          220 NOC
          230 IT Helpdesk
          240 государственных продаж
          250 розничных продаж
          260 Рекрутинг
          270 Заработная плата
16 строк выбрано.

Пример: Oracle присоединяется с помощью соединения

Вот код приведенного выше примера с использованием антисоединений. Здесь мы получим тот же результат.

SELECT   D.department_id, D.department_name
FROM     departments D
WHERE    NOT EXISTS
         (
         SELECT 1
         FROM   employees E
         WHERE  E.department_id = D.department_id
         )
ORDER BY D.department_id;

Пример вывода:

 DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
          120 казначейства
          130 Корпоративный налог
          140 Контроль и Кредит
          150 Услуги для акционеров
          160 преимуществ
          170 Производство
          180 Строительство
          190 Договаривающихся
          200 операций
          210 IT Поддержка
          220 NOC
          230 IT Helpdesk
          240 государственных продаж
          250 розничных продаж
          260 Рекрутинг
          270 Заработная плата
16 строк выбрано.

Пример - 2:

В следующем примере выбирается список сотрудников со столбцами «Идентификатор сотрудника», «Имя», «Фамилия» и «Идентификатор задания», которые не входят в определенный набор отделов:


SELECT employee_id,first_name,last_name,job_id
FROM employees 
   WHERE department_id NOT IN 
   (SELECT department_id FROM departments 
       WHERE location_id = 1700);
	   

Пример вывода:

 EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID
----------- -------------------- ------------------- ------ ----------
        202 Пэт Фай MK_REP
        201 Майкл Хартштейн MK_MAN
        107 Диана Лоренц IT_PROG
        106 Валли Патабалла IT_PROG
        105 Дэвид Остин IT_PROG
        104 Брюс Эрнст IT_PROG
        103 Александр Хунольд IT_PROG
        204 Герман Баер PR_REP
        179 Чарльз Джонсон SA_REP
        177 Джек Ливингстон SA_REP
        176 Джонатон Тейлор SA_REP
        175 Алисса Хаттон SA_REP
        174 Эллен Абель SA_REP
        173 Сундита Кумар СА_РЕП
        172 Элизабет Бейтс SA_REP
        171 Уильям Смит SA_REP
        170 Тайлер Фокс SA_REP
        169 Харрисон Блум SA_REP
        168 Лиза Озер СА_РЕП
        167 Амит Банда SA_REP
        166 Сундар Анд СА_РЕП
        165 Дэвид Ли SA_REP
		........

Предыдущий: SEMIJOINS
Далее: Oracle Home

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code