Введение в соединения Oracle
Отображение данных из нескольких таблиц с помощью объединений
Цель объединения - объединить данные из двух или более таблиц, представлений или материализованных представлений. Объединение фактически выполняется всякий раз, когда в предложении 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 программирования