1. 테이블 합치기 - JOIN (INNER JOIN)
select emp_id, emp_name, dept_code, dept_title from employee join
department on (dept_code = dept_id);
employee테이블의 dept_code와 department테이블의 dept_id 두 컬럼의 값이 같으므로 합쳐서 출력한다.
이 때 합치는 기준컬럼이 두 테이블 중 한 쪽이라도 null인 행은 출력되지 않는다. <- INNER JOIN
(이 경우 dept_code 혹은 dept_id 중 하나 이상 null일 때)
실행결과
두 테이블의 컬럼명이 같을 때
select emp_id, emp_name, employee.job_code from employee join
job on (employee.job_code = job.job_code);
합치려는 두 컬럼 모두 job_code라는 컬럼명을 가지고 있다.
이 경우 컬럼명 앞에 테이블 명을 붙여서, 어떤 테이블의 컬럼명인지 구분해서 지정할 수 있다.
firsttable.a = firsttable 테이블의 a 컬럼
secondtable.a = secondtable 테이블의 b 컬럼
실행결과
2. 한 쪽 테이블을 유지한 채 다른 테이블 합치기 - OUTER JOIN
LEFT OUTER JOIN
select emp_name, dept_code, dept_title from employee left outer join department on (dept_code=dept_id);
employee 테이블에 department 테이블을 left outer join으로 합친다.
실행결과
오른쪽 테이블 (employee)에 값이 있기 때문에, 왼쪽 테이블 (department) 값이 null이더라도 출력된다는 것을 22, 23행에서 확인할 수 있다.
RIGHT OUTER JOIN
select emp_name, dept_code, dept_title from employee right outer join department on (dept_code=dept_id);
employee 테이블에 department 테이블을 right outer join으로 합친다.
실행결과
오른쪽 테이블 (department)에 값이 있기 때문에, 왼쪽 테이블 (employee) 값이 null이더라도 출력된다는 것을 22, 23행에서 확인할 수 있다.
3. 양 테이블의 모든 행을 서로 곱해서 합치기 - CROSS JOIN
select emp_name, dept_title from employee cross join department;
employee 테이블의 모든 행과 department 테이블의 모든 행을 곱해서 합친다.
만약 employee 테이블에 5개의 행이 있고, department 테이블에 6개의 행이 있다면,
출력 결과는 총 5 x 6 = 30개의 행이 된다.
실행결과
4. 테이블에 같은 테이블을 합치기 - SELF JOIN
select a.emp_id, a.emp_name, a.manager_id, b.emp_name from employee a join employee b on a.manager_id = b.emp_id;
employee 라는 동일한 테이블을 a, b로 이름 붙여 구분해준다.
위 쿼리를 통해 각 직원의 담당 매니저가 누구인지 확인할 수 있다.
실행결과
'Database' 카테고리의 다른 글
[SQL] 테이블에 데이터 추가하기 (0) | 2021.03.10 |
---|---|
[오라클] 순위 가져오기 (0) | 2021.03.10 |
[오라클] 그룹 / 집합 함수 (0) | 2021.03.09 |
[오라클] 데이터 변환 함수 (0) | 2021.03.08 |
[오라클] 날짜 표현 (0) | 2021.03.08 |
댓글