1. 테이블 조인
- 여러 테이블을 하나의 테이블처럼 사용하는 조인
- 두 개 이상의 테이블을 결합하여 데이터를 추출하는 기법
- 두 테이블의 공통값을 이용하여 컬럼을 조합하는 수단
● [테이블 조인의 종류]
1) inner join
- 두 테이블에 공통으로 존재하는 칼럼을 이용하는 방식
- inner 생략가능
- 기본
2) left outer join
- 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출
- outer 생략가능
3) right outer join
- 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출
- outer 생략가능
● [ (+)기호를 이용한 테이블 조인 ]
(+)기호는 일치되지 않는 행이 존재하는 않은 쪽에 붙인다, where을 사용한다
select ST.hakno, ST.uname, SU.gcode
from tb_student ST, tb_sugang SU
where ST.hakno = SU.hakno(+); -- left join
select ST.hakno, uname, SU.gcode
from tb_sugang SU, tb_student ST
where ST.hakno(+) = SU.hakno; -- right join
2. 조인의 형식
형식은 오라클과 마리아DB에서 서로 차이가 있다.
지금 알아볼 것은 ANSI(표준) SQL문 형식의 조인을 사용하는 방법이다.
아래의 코드를 살펴보며 기본적인 조인의 형식에 대해 알아보자.
형식)
select 칼럼명
from 테이블1 join 테이블2
on 조건절; -- ANSI(표준) SQL문
select 칼럼명
from 테이블1, 테이블2
on 조건절; -- Oracle DB SQL문
예시 1 - 테이블 조인하기)
select T1.*, T2.* -- T1.모든칼럼, T2.모든칼럼
from T1 join T2
on T1.x = T2.x; -- 테이블명.칼럼명
예시 2 - 3개 테이블 조인)
select T1.*, T2.*, T3.*
from T1 join T2
on T1.x = T2.x join T3 -- 3개 테이블 조인
on T1.y = T3.y;
예시 3 - 4개 테이블 조인)
select T1.*, T2.*, T3.*, T4.*
from T1 join T2
on T1.x = T2.x join T3
on T1.y = T3.y join T4 -- 4개 테이블 조인
on T1.z = T4.z;
3. 물리적 테이블과 논리적 테이블
오라클에서 생성되는 테이블은 물리적 테이블과 논리적 테이블로 나뉜다.
- 물리적 테이블 : 실제 create table한 테이블
- 논리적 테이블 : SQL문에 의해 가공된 테이블
그리고 이 두 테이블은 서로 동등한 관계이다.
예를 들어 내가 create로 만든 테이블의 행수를 알고 싶어서 count(*)를 해서 count(*) 테이블이 나온다면?
이 count(*) 테이블은 실제 create하지 않은 논리적 테이블임에도 물리적 테이블과 동등하게 사용할 수 있다.
- 조인이 된다는 뜻이닷!
이제 학번을 기준으로 수강테이블과 학생테이블을 조인해보자.
4. Inner Join 연습
1) 학번 기준으로 수강테이블과 학생 테이블 조인
select tb_sugang.*, tb_student.*
from tb_sugang join tb_student
on tb_sugang.hakno = tb_student.hakno;
2) 두 테이블간의 교집합 조인. inner 생략가능. 가장 기본.
select tb_sugang.*, tb_student.*
from tb_sugang inner join tb_student
on tb_sugang.hakno = tb_student.hakno;
3) 수강신청한 학생들의 학번, 과목코드, 이름, 이메일 조회하시오
select tb_sugang.*, tb_student.uname, tb_student.email
from tb_sugang inner join tb_student
on tb_sugang.hakno = tb_student.hakno;
4) 과목코드를 기준으로 수강테이블과 과목테이블 조인
select tb_sugang.*, tb_gwamok.gname, tb_gwamok.ghakjum
from tb_sugang inner join tb_gwamok
on tb_sugang.gcode = tb_gwamok.gcode;
5) 3개 테이블 조인
select tb_sugang.*, tb_student.uname, tb_gwamok.gname
from tb_sugang inner join tb_student
on tb_sugang.hakno = tb_student.hakno join tb_gwamok
on tb_sugang.gcode = tb_gwamok.gcode
order by tb_sugang.hakno;
6) 테이블명의 alias(별칭)도 가능하다
1)
select SU.*, ST.uname, ST.email
from tb_sugang SU join tb_student ST
on SU.hakno = ST.hakno;
2)
select SU.*, GW.gname, GW.ghakjum
from tb_sugang SU join tb_gwamok GW
on SU.gcode = GW.gcode;
3)
select SU.*, ST.uname, ST.email, GW.gname, GW.ghakjum
from tb_sugang SU join tb_student ST
on SU.hakno = ST.hakno join tb_gwamok GW
on SU.gcode = GW.gcode;
7) 조회시 테이블간에 중복되지 않은 칼럼명은 테이블명을 생략할 수 있다
* 학생테이블에 이메일, 수강신청의 학점 칼럼은 다른 테이블에 없는 중복되지 않는 칼럼이다.
그래서 테이블명을 생략하고 적어도 결과는 동일하다.
select SU.*, uname, email, gname, ghakjum
from tb_sugang SU join tb_student ST
on SU.hakno = ST.hakno join tb_gwamok GW
on SU.gcode = GW.gcode;
'⁂ Oracle DB > : 기본 익히기' 카테고리의 다른 글
[Oracle] #6-1 SQL Developer로 CSV파일 가져오기 (0) | 2022.08.29 |
---|---|
[Oracle] #5-3 rownum으로 페이징하기 (0) | 2022.08.29 |
[Oracle] #5-1 모델링(테이블 시나리오, 테이블 정의서) 개념 정리 (0) | 2022.08.25 |
[Oracle] #4-4 오라클과 마리아DB의 자료형 (0) | 2022.08.23 |
[Oracle] #4-3 Oracle 함수 : nvl, 모조칼럼(rownum, rowid) (0) | 2022.08.23 |