쥬로그
오라클 - 조인, 별명, 뷰 본문
< JOIN, 별명(ALIAS), 뷰(view) >
* 오라클은 표준 조인 외에 크로스조인, 내추럴조인, 외부조인(=), non-equal 조인, using과 같은
자체적으로 지원하는 조인형식이 있다.
* 별명(ALIAS)는 테이블의 컬럼명을 쿼리결과에 노출하고 싶지 않거나 알기 쉽게 표시하고 싶을 때 사용한다.
* JOIN의 개념, 종류
- 서로 다른 테이블을 공통 컬럼을 기준으로 합치는(결합하는) 테이블 단위 연산
- 조인의 결과 테이블은 이전 테이블의 컬럼 수의 합과 같다.
- 조인 시 서로 다른 테이블에 같은 컬럼명이 존재하면 구분을 위해 테이블명.컬럼명 으로 표시
select * from 테이블 1 join 테이블2 on 테이블 1.컬럼명 = 테이블2.컬럼명
ex) emp 테이블과 dept 테이블을 조인하시오. (emp.deptno = dept.deptno)
-> select * from emp join dept on emp.deptno = dept.deptno;
직원명(ENAME)과 부서명(DNAME), 위치(LOC)을 표시하시오.
-> select emp.ename, dept.dname(컬럼명) from emp join dept on dep.deptno = dept.deptno; (직원명과 부서명)
select emp.ename, dept.dloc(컬럼명) from emp join dept on emp.deptno = dept.deptno; (직원명과 위치)
- 조인 시 NULL 값을 허용하는 내부조인(불가)과 외부조인(허용)으로 구분
> INNER JOIN
: 조인 시 NULL 값을 허용하지 않음 (NULL 값을 가진 레코드는 조인 결과에서 빠짐)
> LEFT JOIN
: 조인 시 JOIN의 왼쪽 테이블의 NULL 값을 포함해서 표시
> RIGHT JOIN
: 조인 시 JOIN의 오른쪽 테이블의 NULL 값을 포함해서 표시
> FULL JOIN
: LEFT JOIN과 RIGHT JOIN의 합집합 (=UNION)
ex) EMPLOYEES 테이블과 DEPARTMENTS 테이블을 INNER JOIN하라
-> select count(*) from employees inner join departments on employees.department_id = department.department-id;
* 오라클에만 있는 조인의 개념
> Cross JOIN
: 조인 조건이 없는 경우나, 조건이 유효하지 않으면 사용함 -> 모든 경우의 수를 조합
> Equi (natural) JOIN
: 표준 INNER 조인, 대상 테이블에 공통으로 존재하는 컬럼을 대상으로 조인
: Equi의 경우 공통 컬럼을 기반으로 공통 컬럼명 명시,
: natural의 경우 공통 컬럼명 명시 안 해도 동일 이름의 컬럼을 조인, 여러 컬럼을 지정할 경우 using(컬럼명)을 이용
> Non-equi JOIN
: Equi 조인에 해당되지 않는 경우
> Outer JOIN
: 누락되는 컬럼이 존재하는 경우에도 출력.
: 누락되기 원하지 않는 컬럼에 (+) 붙임. ( +는 한 쪽에만 사용, 양 쪽에 모두 사용할 경우 error 발생)
> Self JOIN
: 자체 테이블과의 조인.
* 별명 (ALIAS)
- SQL 쿼리 결과 생성 시 컬럼명에 대한 별명을 사용해 표시하는 기능
- 조인할 때 많이 사용됨
SELECT 테이블명1.컬럼명1 AS 별명1, 테이블명2.컬럼명2 AS 별명2 FROM ...
ex) select emp.ename as name, dept.dname as department, deptloc as location from emp join dept using(deptno);
-> emp.ename은 name으로, dept.dname은 department로, deptloc은 location으로 출력되게 선언
* 뷰 (VIEW)
- 임시 테이블의 한 종류
- 쿼리의 결과를 임시 테이블에 저장
- 뷰 생성 권한을 주어야 한다.
- 두 가지 유형이 있음
-> Simple View: 하나의 테이블에서 생성
-> Complex View: 여러 개의 테이블에서 생성
ex) 1. Scott에서 뷰 생성권한을 부여하시오.
2. emp 테이블에서 salary가 3000이상인 경우 별도의 뷰인 emp_high_wage를 생성하시오.
-> grant create view to scott;
-> create or replace view emp_high_wage as select * from emp where sal >= 3000;
-> select * from emp_high_wage;
< Point >
☆ JOIN은 여러 개의 테이블을 합쳐서 더 큰 테이블을 만드는 연산이다.
조인을 한 후 컬럼 수의 합은 기존 테이블의 컬럼 수의 합과 같다.
(공통 컬럼이 있는 경우에는 각 컬럼이 조인 결과물에 모두 들어간다.)
☆ A JOIN B에서 A 테이블의 레코드가 누락되지 않고 모두 표시하려면 LEFT JOIN을 한다.
A 테이블의 레코드가 B 테이블의 대응 레코드에 존재하지 않아도 누락되지 않고 모두 표시한다.
☆ JOIN 연산을 명시하지 않으면 INNER JOIN 연산을 수행한다.
< 요약 >
* JOIN - 서로 다른 테이블을 합치는 연산
INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL JOIN
각 테이블에 조인 기준 컬럼의 NULL 값을 포함 여부에 따라 결정
* ALIAS
쿼리 결과 컬럼명을 다른 이름으로 대체해서 표시
* VIEW
쿼리 결과를 임시 테이블에 저장하고 사용
'Study > Oracle' 카테고리의 다른 글
오라클 - LIKE 검색, NULL 값, GROUP BY/HAVING (0) | 2021.08.30 |
---|---|
오라클 - SELECT INTO, INSERT INTO SELECT (0) | 2021.08.30 |
오라클 - 중복제거, 논리연산자, 결과정렬 (0) | 2021.08.26 |
오라클 - SQL, CRUD (0) | 2021.08.26 |
오라클 - 기본 사용법 (0) | 2021.08.26 |