- join ~ on 키워드
-- 테이블과 테이블을 연결하여 특정한 데이터를 얻고자 할 때 사용하는 키워드
-- 두 개 이상의 테이블에 정보가 나뉘어져 있을 때 사용.
-- 중복해서 데이터가 저장되는 것을 막기 위함.
-- 두 개의 테이블로 나누어진 경우에는 데이터의 중복은 발생하지 않지만 원하는 정보를 얻으려면
-- 여러번 질의를 해야하는 불편함이 발생함
-- 특정 사원이 소속된 부서명을 알고싶은 경우에는 emp테이블과 dept테이블을 넘나드는 작업이 생기므로 불편하다.
-- 따라서 두 개의 테이블을 결합해 원하는 결과를 얻어낼 수 있도록 하는 조인이라는 기능이 생겨남.
-- join의 종류
-- 1) Cross Join
-- 2) Equi Join
-- 3) Self Join
-- 4) Outer Join
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
-- 1) Cross Join (좋은방법은 아님, 사용 거의 안함)
-- 두 개 이상의 테이블이 조인될 때 조건없이 테이블의 결합이 이루어지는 조인.
-- 따라서 테이블 전체 행의 컬럼이 조인됨.
-- 형식) select * from 컬럼명1, 컬럼명2;
select * from emp, dept;
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
-- 2) Equi Join (가장 많이 사용)
-- 조인의 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성.
-- 두 테이블이 조인을 하려면 일치되는 공통 컬럼을 사용하여야 함.
-- ex) emp 테이블에서 사원의 사번, 이름, 담당업무, 부서번호, 부서명, 근무위치를 화면에 보여주세요.
-- select * from emp where deptno = 10;
-- select * from dept where deptno = 10;
-- 기존대로라면 두번 쿼리문을 작성해야함. 따라서,
-- ==> emp 테이블과 dept 테이블을 조인시켜 주어야 함.
-- select 컬럼명n from 테이블 join 테이블1 on 테이블.중복컬럼 = 테이블1.중복컬럼;
select empno, ename, job, e.deptno, dname, loc -- 양쪽 테이블에 중복되는 deptno는 어느 테이블에 있는 컬럼인지 명시해야 함.
from emp e join dept d -- emp e 와 같이 별칭을 사용해서 간편하게 사용
on e.deptno = d.deptno;
-- ex) emp 테이블에서 사원이름이 'SCOTT'인 사원의 부서명을 알고 싶다면?
select ename, e.deptno, dname from emp e join dept d on e.deptno = d.deptno
where ename = 'SCOTT'; -- 조건절 추가
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
-- 3) Self Join
-- 하나의 테이블 내에서 조인을 해야 자료를 얻을 수 있는데 말 그대로 자기 자신고 조인을 맺는 것을 의미함.
-- from 절 다음에 테이블 이름을 나란히 두번 기술을 할 수 없음.
-- 따라서 같은 테이블이 하나 더 존재하는 것 처럼 사용할 수 있도록 테이블에 별칭을 붙여서 사용해야 한다.
-- emp 테이블에서 각 사원별 관리자의 이름을 화면에 출력해보자.
-- ex) CLERK의 매니저 이름은 KING 입니다.
select e1.ename || '의 매니저 이름은 ' || e2.ename || '입니다.' as "관리자 이름"
from emp e1, emp e2
where e1.mgr = e2.empno;
--[문제] emp 테이블에서 매니저가 'KING'인 사원들의 이름과 담당업무를 화면에 보여주세요.
select e1.ename, e1.job, e1.mgr
from emp e1 join emp e2
on e1.mgr = e2.empno
where e2.ename = 'KING';
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
-- 4) Outer Join
-- 2개 이상의 테이블이 조인이 될 때 어느 한 쪽 테이블에는 해당하는 데이터가,
-- 다른쪽 테이블에는 데이터가 존재하지 않는 경우 그 데이터가 출력이 되지 않는 문제점을 해결하기 위해 사용.
-- 정보가 부족한 테이블의 컬럼 뒤에 '(+)' 기호를 붙여 사용.
select e1.ename, e1.job, e1.mgr
from emp e1, emp e2
where e1.mgr = e2.empno(+);
select ename, e.deptno, dname
from emp e, dept d
where e.deptno(+) = d.deptno;
'개발자 > DB 오라클' 카테고리의 다른 글
데이터베이스 SQL 오라클 서브 쿼리문 (0) | 2022.02.23 |
---|---|
데이터베이스 SQL 오라클 dual 테이블 (0) | 2022.02.23 |
데이터베이스 SQL 오라클 where 조건절, like 키워드, order by, 그룹함수, 시퀀스 (0) | 2022.02.21 |
데이터베이스 SQL 오라클 literal 문자열 (0) | 2022.02.18 |
데이터베이스 SQL 오라클 as 키워드, distinct 키워드 (0) | 2022.02.18 |
댓글