오라클 조인은 반드시 오라클에서만 사용 가능한 조인을 의미한다.오라클 조인 방법의 특징은 여러 테이블을 연결하는 조인 조건을 WHERE
절에 명시한다.
Equi 조인
조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 반드시 일치하는 행을 연결하여 데이터를 반환하는 조인이다. 기본키 primary key
를 가진 테이블(master)과 참조키 foreign key
를 가진 테이블(slave)을 조인할 때 사용한다. WHERE
절에 두 개의 테이블을 연결할 조건인 조인 조건을 동등 연산자 =
를 사용하여 명시한다.
-- 사원 테이블(employees)과 부서 테이블(departments)의 사원명과 부서명 출력
SELECT last_name,department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;
① 공통 컬럼 사용 시 모호성 제거
여러 테이블을 조인하는 경우, master 테이블의 기본키와 salve 테이블의 참조키로 동일한 컬럼명이 존재하게 된다. 이러한 공통 컬럼을 사용하는 경우에는 반드시 컬럼명 앞에 테이블명을 지정해야 된다.
② 테이블에 별칭(alias) 사용
FROM
절에도 테이블 별칭을 사용할 수 있다. 테이블명이 길거나 식별이 힘든 경우에 유용하다. 가독성⬆️
-- employees 테이블의 별칭은 emp, departments 테이블의 별칭은 dept로 지정
SELECT emp.last_name,department_name, emp.department_id
FROM employees emp, departments dept
WHERE emp.department_id = dept.department_id;
③ 검색 조건 추가
Oracle 조인에서는 WHERE
절에 조인 조건과 검색 조건을 같이 지정하기 때문에 가독성이 떨어질 수 있다. 따라서 조인 조건을 먼저 명시하고 나중에 검색조건을 명시한다.
-- 사원 테이블과 부서 테이블 조인시 이름이 Whalen 사원만 검색
SELECT emp.last_name,salary,department_name
FROM employees emp, departments dept
WHERE emp.department_id = dept.department_id
AND last_name='Whalen';
Non-Equi 조인
WHERE절에 조인 조건을 지정할 때 동등 연산자(=) 이외의 연사자를 사용하는 조인을 의미한다.
-- 사원들의 월급 등급을 조회
SELECT last_name, salary, grade_level
FROM employees e, job_grades g
WHERE e.salary BETWEEN g.lowest_sal AND g.highest_sal;
-- 사원들의 월급 등급 및 부서명까지 조회
SELECT last_name, salary, department_name, grade_level
FROM employees e, departments d, job_grades g
WHERE e.department_id = d.department_id
AND e.salary BETWEEN g.lowest_sal AND g.highest_sal;
self 조인
하나의 테이블에서 두 개의 칼럼이 연관 관계를 가지고 있는 경우에 사용한다.
-- 사원번호, 사원이름과 관리자번호, 관리자이름 조회
SELECT e.employee_id 사원번호, e.last_name 사원명, e.manager_id 관리자번호, m.last_name 관리자명
FROM employees e, employees m
WHERE e.manager_id = m.employee_id;

위 SQL문에서 하나의 employees 테이블을 e
와 m
별칭을 사용하여 마치 두 개의 테이블처럼 사용하고 있다. 이렇게 하나의 테이블을 별칭(Alias)을 사용하여 조인하는 방식을self조인
이라고 한다.
outer 조인
조인 조건에 만족하지 않는 데이터는 누락되며 조인 조건에 일치하는 데이터만 조회하는 것을Inner조인
이라고 한다. equi
non-equi
self
조인이 모두 Inner 조인이라고 할 수 있다. Outer조인
은 조인 조건에 만족하지 않아도 결과 값에 포함시키는 방식으로 (+)
연산자를 사용한다.
(+)
연산자는 조인하고자 하는 테이블 중 반드시 하나에만 사용 가능(+)
연산자는 일치하는 데이터가 없는 쪽에 지정(+)
연산자를 지정하면 내부적으로 한 개 이상의 널(null)을 가진 행이 생성되고 이렇게 생성된 널 행들과 데이터를 가진 테이블의 행들이 조인하게 되어 결과 값에 포함이 됨.
-- 관리자가 없는 사원 정보도 모두 포함하여 사원의 이름과 담당 관리자의 사원번호를 조회
SELECT e.last_name 사원명, m.last_name 관리자명
FROM employees e, employees m
WHERE e.manager_id = m.employee_id(+);

관리자 테이블(m)에 일치하는 데이터가 없기 때문에m.employee_id
에 (+)
연산자를 지정해야 되며 실행결과는 다음과 같이 관리자가 없는 King 사원 정보도 포함되어 출력된다.
💡 cartesian product
cartesian product
은 조인할 때 일치하는 데이터만 반환하지 않고 조인하는 각 테이블의 행 개수를 서로 곱한 결과가 반환된다. 유효한 데이터로 사용되지 못하며 일반적으로 조인 조건이 생략된 경우 발생한다. 조인 조건 명시의 중요성 ✨
'Database > SQL' 카테고리의 다른 글
[SQL] 서브쿼리 (Sub Query) (0) | 2023.07.28 |
---|---|
[SQL] ANSI 조인 (0) | 2023.07.28 |
[SQL] Having 절 (0) | 2023.07.27 |
[SQL] GROUP BY 절 (0) | 2023.07.27 |
[SQL] 그룹 함수 (0) | 2023.07.27 |
오라클 조인은 반드시 오라클에서만 사용 가능한 조인을 의미한다.오라클 조인 방법의 특징은 여러 테이블을 연결하는 조인 조건을 WHERE
절에 명시한다.
Equi 조인
조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 반드시 일치하는 행을 연결하여 데이터를 반환하는 조인이다. 기본키 primary key
를 가진 테이블(master)과 참조키 foreign key
를 가진 테이블(slave)을 조인할 때 사용한다. WHERE
절에 두 개의 테이블을 연결할 조건인 조인 조건을 동등 연산자 =
를 사용하여 명시한다.
-- 사원 테이블(employees)과 부서 테이블(departments)의 사원명과 부서명 출력
SELECT last_name,department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;
① 공통 컬럼 사용 시 모호성 제거
여러 테이블을 조인하는 경우, master 테이블의 기본키와 salve 테이블의 참조키로 동일한 컬럼명이 존재하게 된다. 이러한 공통 컬럼을 사용하는 경우에는 반드시 컬럼명 앞에 테이블명을 지정해야 된다.
② 테이블에 별칭(alias) 사용
FROM
절에도 테이블 별칭을 사용할 수 있다. 테이블명이 길거나 식별이 힘든 경우에 유용하다. 가독성⬆️
-- employees 테이블의 별칭은 emp, departments 테이블의 별칭은 dept로 지정
SELECT emp.last_name,department_name, emp.department_id
FROM employees emp, departments dept
WHERE emp.department_id = dept.department_id;
③ 검색 조건 추가
Oracle 조인에서는 WHERE
절에 조인 조건과 검색 조건을 같이 지정하기 때문에 가독성이 떨어질 수 있다. 따라서 조인 조건을 먼저 명시하고 나중에 검색조건을 명시한다.
-- 사원 테이블과 부서 테이블 조인시 이름이 Whalen 사원만 검색
SELECT emp.last_name,salary,department_name
FROM employees emp, departments dept
WHERE emp.department_id = dept.department_id
AND last_name='Whalen';
Non-Equi 조인
WHERE절에 조인 조건을 지정할 때 동등 연산자(=) 이외의 연사자를 사용하는 조인을 의미한다.
-- 사원들의 월급 등급을 조회
SELECT last_name, salary, grade_level
FROM employees e, job_grades g
WHERE e.salary BETWEEN g.lowest_sal AND g.highest_sal;
-- 사원들의 월급 등급 및 부서명까지 조회
SELECT last_name, salary, department_name, grade_level
FROM employees e, departments d, job_grades g
WHERE e.department_id = d.department_id
AND e.salary BETWEEN g.lowest_sal AND g.highest_sal;
self 조인
하나의 테이블에서 두 개의 칼럼이 연관 관계를 가지고 있는 경우에 사용한다.
-- 사원번호, 사원이름과 관리자번호, 관리자이름 조회
SELECT e.employee_id 사원번호, e.last_name 사원명, e.manager_id 관리자번호, m.last_name 관리자명
FROM employees e, employees m
WHERE e.manager_id = m.employee_id;

위 SQL문에서 하나의 employees 테이블을 e
와 m
별칭을 사용하여 마치 두 개의 테이블처럼 사용하고 있다. 이렇게 하나의 테이블을 별칭(Alias)을 사용하여 조인하는 방식을self조인
이라고 한다.
outer 조인
조인 조건에 만족하지 않는 데이터는 누락되며 조인 조건에 일치하는 데이터만 조회하는 것을Inner조인
이라고 한다. equi
non-equi
self
조인이 모두 Inner 조인이라고 할 수 있다. Outer조인
은 조인 조건에 만족하지 않아도 결과 값에 포함시키는 방식으로 (+)
연산자를 사용한다.
(+)
연산자는 조인하고자 하는 테이블 중 반드시 하나에만 사용 가능(+)
연산자는 일치하는 데이터가 없는 쪽에 지정(+)
연산자를 지정하면 내부적으로 한 개 이상의 널(null)을 가진 행이 생성되고 이렇게 생성된 널 행들과 데이터를 가진 테이블의 행들이 조인하게 되어 결과 값에 포함이 됨.
-- 관리자가 없는 사원 정보도 모두 포함하여 사원의 이름과 담당 관리자의 사원번호를 조회
SELECT e.last_name 사원명, m.last_name 관리자명
FROM employees e, employees m
WHERE e.manager_id = m.employee_id(+);

관리자 테이블(m)에 일치하는 데이터가 없기 때문에m.employee_id
에 (+)
연산자를 지정해야 되며 실행결과는 다음과 같이 관리자가 없는 King 사원 정보도 포함되어 출력된다.
💡 cartesian product
cartesian product
은 조인할 때 일치하는 데이터만 반환하지 않고 조인하는 각 테이블의 행 개수를 서로 곱한 결과가 반환된다. 유효한 데이터로 사용되지 못하며 일반적으로 조인 조건이 생략된 경우 발생한다. 조인 조건 명시의 중요성 ✨
'Database > SQL' 카테고리의 다른 글
[SQL] 서브쿼리 (Sub Query) (0) | 2023.07.28 |
---|---|
[SQL] ANSI 조인 (0) | 2023.07.28 |
[SQL] Having 절 (0) | 2023.07.27 |
[SQL] GROUP BY 절 (0) | 2023.07.27 |
[SQL] 그룹 함수 (0) | 2023.07.27 |