728x90
JOIN
JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해준다.
이러한 JOIN은 보통 SELECT 문과 함께 자주 사용된다.
종류 | 설명 |
(INNER) JOIN | 두 테이블에서 값이 일치하는 레코드를 반환 |
OUTER JOIN | 한 테이블있는 데이터 값이 다른 테이블에 하나도 나타나지 않는 경우 OUTER JOIN(외부 조인)를 사용 |
LEFT (OUTER) JOIN | 왼쪽 테이블에서 모든 레코드를 반환하고, 오른쪽 테이블에서 일치하는 레코드를 반환 |
RIGHT (OUTER) JOIN | 오른쪽 테이블에서 모든 레코드를 반환하고, 왼쪽 테이블에서 일치하는 레코드를 반환 |
FULL (OUTER) JOIN | 쪽 또는 오른쪽 테이블의 모든 레코드를 반환 |
SELF JOIN | 하나의 테이블을 Alias 로 구분해서 마치 두 테이블인 것처럼 생성 |
Q. employees 테이블에는 employee_id 가 156과 100인 두명의 last_name이 'King' 인 사용자가 있는데,
이들의 department_name을 출력하시오.
select last_name, department_id, department_name from employees
where department_id in (156,100);
/* last_name 부적합한 식별자 */
select last_name, department_id, department_name from departments
where department_id in (156,100);
/* department_name 부적합한 식별자 */
select last_name, employee_id, department_name from employees, departments
where last_name = 'King';
/* 신뢰할 수 없다 */
select last_name, employee_id, department_name from employees, departments
where last_name = 'King'
AND employees.department_id = departments.department_id
/* Alias, Cname(Canonical)name */
select e.last_name, e.employee_id, d.department_name from employees e, departments d
where last_name = 'King'
AND e. department_id = d.department_id;
select e.last_name, e.employee_id, d.department_name, e.department_id
from employees e INNER JOIN departments d
ON e.department_id = d.department_id
WHERE last_name = 'King' ;
/* INNER 생략 가능 */
select e.last_name, e.employee_id, d.department_name, e.department_id
from employees e JOIN departments d
ON e.department_id = d.department_id
WHERE last_name = 'King' ;
Q. Employees 테이블에서 Executive 부서(department_name)의 각 사원의 last_name과 해당 사원의 부서장을 보이시오.
-- [사진1]좌측에 큰 테이블이 있기때문에 left 함수를 사용
select employee_id, last_name, TO_CHAR(hire_date, 'yyyy-mm') as hired , department_name
from employees e LEFT OUTER JOIN departments d
ON d.department_id = e. department_id
where TO_CHAR(hire_date, 'yyyy-mm') BETWEEN '1999-01' AND '1999-06';
-- [사진2]우측에 큰 테이블이 있기 때문에 RIGHT 함수를 사용
select employee_id, last_name, TO_CHAR(hire_date, 'yyyy-mm') as hired , department_name
from departments d RIGHT OUTER JOIN employees e
ON d.department_id = e. department_id
where TO_CHAR(hire_date, 'yyyy-mm') BETWEEN '1999-01' AND '1999-06';
-- [사진3]select employee_id, last_name, TO_CHAR(hire_date, 'yyyy-mm') as hired , department_name
from employees e JOIN departments d
ON d.department_id(+) = e. department_id
where TO_CHAR(hire_date, 'yyyy-mm') BETWEEN '1999-01' AND '1999-06';
-- [사진1]
select department_name, a.last_name, b.last_name
from employees a, employees b, departments d
where a.manager_id = b.employee_id
and a.department_id = d.department_id
and d.department_name = 'Executive';
-- [사진2]
select department_name, a.last_name, b.last_name
from employees a JOIN employees b
on a.manager_id = b.employee_id
JOIN departments d
on d.department_id = a.department_id
where d.department_name = 'Executive';
'일단 해보는 코딩 > Oracle SQL' 카테고리의 다른 글
[오라클/SQL] 집합연산자(UNION/UNIONALL/INTERSECT/MINUS) (0) | 2022.06.08 |
---|---|
[오라클/SQL] 다중/여러개 테이블 [ANSI, Orcle] JOIN 하기 (0) | 2022.06.08 |
[오라클/SQL] 테이블 생성,변경,삭제하기 (0) | 2022.06.03 |
[오라클/SQL] 정규 표현식 (0) | 2022.06.03 |
[오라클/SQL] 함수 활용해보기(2) (0) | 2022.06.03 |