English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 SQL Full Join을 사용하여 두 테이블에서 데이터를 검색하는 방법을 배울 수 있습니다.
FULL JOIN은 매칭되든 아니든 연결 테이블의 모든 행을 반환하므로, 완전한 조인은 LEFT JOIN와RIGHT JOIN是完全联接외부 조인의 하나입니다.라는 이름도 붙여줍니다.full outer join。
하위 비엔(Venn) 도표는 완전한 조인의 작동 방식을 설명합니다。
주의:외부 조인은 결과 집합에 행을 포함하는 조인으로, 연결되려는 두 테이블의 행 사이에 불일치가 있을 수 있습니다.
이를 명확히 이해하기 위해 다음을 보겠습니다employees와departments표。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | 행정 | | 2 | Customer Service | | 3 | 재무 | | 4 | Human Resources | | 5 | 판매 | +---------+------------------+ | |
테이블: employees | 테이블: departments |
이제, 모든 직원의 이름과 사용 가능한 부서의 이름을 검색하고 싶다면, 다른 테이블에 해당하는 행이 있는与否에 관계없이, 이 경우 완전한 조인을 사용할 수 있습니다. 다음과 같이 합니다.
다음 문장은 일반적인 dept_id 필드를 사용하여 employee와 department 테이블을 조인하여 모든 부서와 모든 직원의 세부 정보를 검색합니다.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 FULL JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_name;
일부 데이터베이스(예: Oracle, MySQL)는 완전한 조인을 지원하지 않습니다. 이 경우 UNION ALL 연산자를 사용하여 LEFT JOIN과 RIGHT JOIN을 결합할 수 있습니다. 다음과 같이 합니다:
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id UNION ALL SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 RIGHT JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_name;
명령을 실행하면 다음과 같은 출력을 얻게 됩니다:
+--------+--------------+------------+------------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+------------------+ | NULL | NULL | NULL | Customer Service | | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 5 | Martin Blank | 2008-06-24 | NULL | | 4 | Rick Deckard | 2007-01-03 | 재무 | | 4 | Rick Deckard | 2007-01-03 | 재무 | | 3 | Sarah Connor | 2005-10-18 | 판매 | | 3 | Sarah Connor | 2005-10-18 | 판매 | | 2 | Tony Montana | 2002-07-15 | 행정 | | 2 | Tony Montana | 2002-07-15 | 행정 | +--------+--------------+------------+------------------+
그러나 보시다시피, 결과에는 포함됩니다departments와employees테이블의 모든 행.
추가로:조인 쿼리에서, 왼쪽 테이블은 JOIN 절에서 가장 왼쪽에 나타나는 테이블이고, 오른쪽 테이블은 절에서 가장 오른쪽에 나타나는 테이블입니다.
주의:외부 조인을 실행할 때, DBMS(데이터베이스 관리 시스템)가 어떤 행도 일치시키지 못하면, 데이터가 존재하지 않음을 나타내기 위해 NULL을 열에 넣습니다.