кодесурса
«Oracle

Введение в соединения Oracle

script1adsense2code
script1adsense3code

Отображение данных из нескольких таблиц с помощью объединений

Цель объединения - объединить данные из двух или более таблиц, представлений или материализованных представлений. Объединение фактически выполняется всякий раз, когда в предложении FROM запроса указывается несколько таблиц, а предложение where объединяет указанные строки таблиц. Если объединение включает более двух таблиц, Oracle объединяет первые две таблицы на основе условия объединения, а затем сравнивает результат со следующей таблицей и так далее. Если любые две таблицы участвуют в объединении с общим именем столбца, то необходимо поддерживать все ссылки на эти столбцы по всему запросу с именами таблиц, чтобы избежать неоднозначности.

В этом уроке мы обсудили, как получить данные из более чем одной таблицы, используя JOIN, и краткое описание на примере каждого соединения. В следующих статьях мы подробно объяснили все соединения и их использование.

Примечание. До выпуска Oracle9i синтаксис объединения отличался от стандартов Американского национального института стандартов (ANSI). Синтаксис соединения, совместимый с SQL: 1999, не дает никаких преимуществ в производительности по сравнению с синтаксисом соединения, разработанным Oracle, который существовал в предыдущих выпусках. Проверьте отдельную страницу соединения для получения подробной информации о собственном синтаксисе соединения.

Условия присоединения

Запросы на соединение должны содержать хотя бы одно условие соединения, либо в предложении FROM, либо в предложении WHERE. Условие соединения сравнивает два столбца из двух разных таблиц. База данных Oracle объединяет пары строк из каждой таблицы, участвующие в объединении, которые удовлетворяют условию объединения, оценивается как ИСТИНА.

Предложение WHERE, содержащее условие соединения, может также содержать другие условия, которые ссылаются на столбцы только одной таблицы. Эти условия могут дополнительно ограничить строки, возвращаемые запросом соединения.

Типы JOIN

  • Equijoins
  • Неэкви Джоинс
  • Самостоятельно присоединяется
  • Cross Join / Декартовы произведения
  • Внутренние соединения
  • Внешние соединения
    • Левое внешнее соединение
    • Правое внешнее соединение
    • Полное внешнее соединение
  • Natural Join
  • Antijoins
  • Частичные объединения

Equijoins

Equijoin - это соединение с условием соединения, содержащим оператор равенства. Это представлено знаком (=). Это соединение извлекает информацию, используя условие равенства.

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


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


Пример:

Следующая команда показывает, что две таблицы emp_mast и dep_mast объединяются на основе критериев совпадения, т. Е. «ГДЕ e.dept_no = d.dept_no».

SELECT emp_no,emp_name,job_name,dep_name 
FROM emp_mast e,dep_mast d 
WHERE e.dept_no=d.dept_no;

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME
---------- -------------------- ---------- ----------
      1234 Алекс Клерк ФИНАНСЫ
      2345 Джек Консультант МАРКЕТИНГ
      3456 Paul Manager FINANCE

Non-Equi Join

Соединение nonequi - это оператор внутреннего соединения, который использует неравную операцию (т. Е. <>,>, <,! =, BETWEEN и т. Д.) Для сопоставления строк из разных таблиц.

Пример:

SELECT emp_no,emp_name,job_name,dep_name 
FROM emp_mast e,dep_mast d 
WHERE e.dept_no>d.dept_no;

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME
---------- -------------------- ---------- ----------
      2345 Джек Консультант ФИНАНСЫ
      4567 Jenefer Engineer ФИНАНСЫ
      4567 Jenefer Инженер МАРКЕТИНГ
      4567 Jenefer Engineer HR

Самостоятельно присоединяется

Самостоятельное объединение - это такое объединение, при котором таблица соединяется сама с собой. Например, когда вам требуются сведения о сотруднике и его менеджере (также сотруднике).

Пример:

SELECT a1.emp_no,a2.emp_name,a1.job_name,a2.dept_no 
FROM emp_mast a1,emp_mast a2 
WHERE a1.emp_no=a2.mgr_id;

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

 EMP_NO EMP_NAME JOB_NAME DEPT_NO
---------- -------------------- ---------- ----------
      4567 Алекс Инженер 15
      3456 Джек Менеджер 25
      1234 Пол Клерк 15
      2345 Jenefer Consultant 45

Cross Joins

Кросс- соединение, декартово или декартово произведение - это соединение каждой строки одной таблицы с каждой строкой другой таблицы.

Пример:

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast 
CROSS JOIN dep_mast;

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME LOCATION
---------- -------------------- ---------- ---------- ---------
      1234 Алекс Клерк ФИНАНС ПАРИЖ
      2345 Джек Консультант ФИНАНС ПАРИЖ
      3456 Пол Менеджер ФИНАНС ПАРИЖ
      4567 Jenefer Инженер ФИНАНС ПАРИЖ
      1234 Алекс Клерк МАРКЕТИНГ ЛОНДОН
      2345 Джек Консультант МАРКЕТИНГ ЛОНДОН
      3456 Пол Менеджер МАРКЕТИНГ ЛОНДОН
      4567 Jenefer Engineer МАРКЕТИНГ ЛОНДОН
      1234 Алекс Клерк HR ДЕЛИ
      2345 Джек Консультант HR ДЕЛИ
      3456 Пол Менеджер HR Дели
      4567 Jenefer Engineer HR DELHI
12 выбранных рядов.

Внутренние соединения

Внутреннее соединение - это соединение, которое возвращает строки таблиц, которые удовлетворяют условию соединения.

Пример:

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast 
INNER JOIN dep_mast USING(dept_no);

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME LOCATION
---------- -------------------- ---------- ---------- ----------
      1234 Алекс Клерк ФИНАНС ПАРИЖ
      2345 Джек Консультант МАРКЕТИНГ ЛОНДОН
      3456 Пол Менеджер ФИНАНС ПАРИЖ

Внешние соединения

Внешнее соединение - это такое соединение, которое похоже на равное соединение, но Oracle также будет возвращать несопоставленные строки из таблицы.

Левое внешнее соединение

Это левое внешнее объединение отображает все совпадающие записи обеих таблиц вместе с записями в левой таблице предложения объединения, которых нет в правой таблице предложения соединения.

Пример:

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast e LEFT OUTER JOIN dep_mast d 
ON(e.dept_no=d.dept_no);

ИЛИ ЖЕ

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast e, dep_mast d 
WHERE e.dept_no=d.dept_no(+);

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME LOCATION
---------- -------------------- ---------- ---------- ----------
      3456 Пол Менеджер ФИНАНС ПАРИЖ
      1234 Алекс Клерк ФИНАНС ПАРИЖ
      2345 Джек Консультант МАРКЕТИНГ ЛОНДОН
      4567 инженер Йенефер

Правое внешнее соединение

Это правое внешнее объединение отображает все совпадающие записи обеих таблиц вместе с записями в левой таблице предложения объединения, которых нет в правой таблице предложения соединения.

Пример:

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast e RIGHT OUTER JOIN dep_mast d 
ON(e.dept_no=d.dept_no);

ИЛИ ЖЕ

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast e, dep_mast d 
WHERE e.dept_no(+)=d.dept_no;

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME LOCATION
---------- -------------------- ---------- ---------- ---------
      1234 Алекс Клерк ФИНАНС ПАРИЖ
      2345 Джек Консультант МАРКЕТИНГ ЛОНДОН
      3456 Пол Менеджер ФИНАНС ПАРИЖ
                                           HR ДЕЛИ

Полное внешнее соединение

Полное внешнее соединение возвращает все строки из обеих таблиц слева и справа от предложения соединения, расширенные нулями, если они не удовлетворяют условию соединения.

Пример:

SELECT emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast e 
FULL OUTER JOIN dep_mast d ON(e.dept_no=d.dept_no);

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

    EMP_NO EMP_NAME JOB_NAME DEP_NAME LOCATION
---------- -------------------- ---------- ---------- ----------
      1234 Алекс Клерк ФИНАНС ПАРИЖ
      2345 Джек Консультант МАРКЕТИНГ ЛОНДОН
      3456 Пол Менеджер ФИНАНС ПАРИЖ
      4567 инженер Йенефер
                                           HR ДЕЛИ

Natural Join

Естественное объединение - это такое объединение, которое сравнивает общие столбцы обеих таблиц друг с другом.

Пример:

SELECT  emp_no,emp_name,job_name,dep_name,location 
FROM emp_mast 
NATURAL JOIN dep_mast;

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

 EMP_NO EMP_NAME JOB_NAME DEP_NAME LOCATION
---------- -------------------- ---------- ---------- ----------
      1234 Алекс Клерк ФИНАНС ПАРИЖ
      2345 Джек Консультант МАРКЕТИНГ ЛОНДОН
      3456 Пол Менеджер ФИНАНС ПАРИЖ

Antijoins

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

Пример:

SELECT * FROM emp_mast 
WHERE dept_no NOT IN (
SELECT  dept_no FROM dep_mast);

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

 EMP_NO EMP_NAME JOB_NAME MGR_ID DEPT_NO
---------- -------------------- ---------- ---------- ----------
      4567 Jenefer Engineer 2345 45

Частичные объединения

Полусоединение - это такое соединение, в котором предложение EXISTS используется с подзапросом. Это можно назвать полусоединением, потому что даже если в подзапросе возвращаются повторяющиеся строки, возвращается только один набор совпадающих значений во внешнем запросе.

Пример:

SELECT * FROM dep_mast a 
WHERE EXISTS 
(SELECT * FROM emp_mast b 
WHERE a.dept_no = b.dept_no);

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

 DEPT_NO DEP_NAME LOCATION
---------- ---------- ----------
        15 ФИНАНСЫ ПАРИЖ
        25 МАРКЕТИНГ ЛОНДОН

СОЕДИНЕНИЯ: SQL и другие реляционные базы данных

Предыдущее: NLS_CHARSET_NAME
Следующая: EQUIJOINS

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


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code