JOIN이란?
쉽게 말해 여러 테이블을 조회하는 것!!
이때 기준이 되는 값은 보통 primary key나 foreign key 이다.
* primary key -> 기본키란 고유의 값 각 레코드를 구분해주는 기준이 되는 값 ex) 주민번호, ID
* foreign key -> 외래키는 다른 테이블의 기본 키를 참조하는 형태로 사용하는 키
설명이 어려우니 실습으로 이해하자!!!
Equi 조인
Equi 조인이란
select 테이블명.출력하고자 하는 attribute.... from 테이블1, 테이블2 where 조건
위와 같은 형태로 테이블을 조회하는 것
hr계정으로 접속해서 departments와 employees 테이블을 조회해보자!!
조회 결과를 보면 둘다 DEPARTMENT_ID를 가지고 있는 것을 확인 가능함. 우리는 이 attribute를 중심으로 해서 테이블을 조회해본다.
조회 방식:employees테이블의 first_name을 출력함과 동시에, 이 first_name에 해당하는 department_name을 departments 테이블에서 출력한다.
SQL> select employees.first_name, departments.department_name from employees, departments where departments.department_id = employees.department_id;
다음 명령어를 분석해보면 다음과 같다.
select -> 출력해라
employees.first_name -> employees테이블에 first_name과
departments.department_name -> departments테이블의 department_name를
from employees, departments -> employees table과 departments 테이블에서
where departments.department_id = employees.department_id ->이때 조건은 departments 테이블이 department _id와 employees 테이블의 department_id가 같은 애들이다.
위의 경우 테이블 명(departments, employees)을 반복해서 쓰는 것을 볼 수 있다.
따라서 좀 더 효율적으로 쓰기위해 테이블 alias를 지정해준다.
SQL> select E.first_name, D.department_name from employees E, departments D where D.department_id = E.department_id;
위와 같이 employees를 E로 departments를 D로 바꾼 것을 확인 가능하다.
여기서 가장 중요한 것
from employees E, departments D -> 테이블 명 alias는 from 다음에 지정해준다는 것이다.
여기서 만약 조건을 붙이고 싶으면 and를 사용하여 붙인다.
SQL> select E.first_name, D.department_name from employees E, departments D where D.department_id = E.department_id and D.department_name = 'Finance';
2. non equi join
non equi join은 기본 조인과 아예 조회 범위가 다르다. 보통 attribute가 일치하지 않는 두 테이블에서 between 연산자를 통해 사용한다.
emp 테이블과 salgrade 테이블을 조인시키려한다. 이전 join과 다르게 겹치는 attribute가 존재하지 않는다. 이럴 때 사용하는 것이 non equi 조인이다.
겹치는 것이 존재하지는 않지만 emp 테이블의 SAL 속성이 어느 등급에 속하는지는 계산이 가능하다.
예를들어 첫번째 레코드인 SMITH의 경우 SAL이 800이다. 이는 salgrade테이블의 LOSAL 700과 HISAL 1200 사이에 속하므로 등급이 1인 것을 확인 가능하다.(700(LOSAL) < 800(SAL) <1200(HISAL))
non equi 조인은 where에 between 연산자만 추가하여 사용할 수 있으며, 나머지는 equi join과 비슷한 형식을 취한다.
SQL> select E.ename, E.sal, S.GRADE from emp E, salgrade S where E.sal between S.losal and s.hisal;
명령어를 분석해보면 다음과 같다.
select E.ename, E.sal, S.GRADE -> emp 테이블의 ename과 sal 그리고 salgrade 테이블의 GRADE를 출력해라
from emp E, salgrade S -> 별칭(alias) 지정
where E.sal between S.losal and s.hisal -> 이때 조건은 emp 테이블의 sal은 salgrade 테이블의 losal과 hisal 사이에 있어야한다.
3. inner join
가장 기본적인 조인이어서 흔히 join이라 하면 inner join을 말한다.
inner join의 기능은 equi join과 비슷하며 그 형태에만 차이가 있다.
select alias.에트리뷰트 1...... from 테이블명1 alias [inner] join 테이블명2 alias on 조건
앞에 equi join의 문제를 inner join으로 바꿔보자!
조회 방식: employees테이블의 first_name을 출력함과 동시에, 이 first_name에 해당하는 department_name을 departments 테이블에서 출력한다.
from에 , 대신 join으로 연결을 해주고
where 대신 on을 써주면 inner join으로 바꾸는 것이 가능하다.
만약 조건을 더 추가하고 싶다면 뒤에 where문을 쓰는 것으로 추가가 가능하다.
'프로그래밍 > 네트워크 프로그래밍' 카테고리의 다른 글
네트워크 프로그래밍-tomcat 서버 연동, UTF-8 설정,JSP-form (0) | 2018.11.24 |
---|---|
네트워크 프로그래밍-자바(db 연동, STMT, PSTMT) (0) | 2018.11.22 |
네트워크 프로그래밍-DB(집계함수와 group/정렬) (0) | 2018.09.29 |
네트워크 프로그래밍-DB(함수, 조건문) (0) | 2018.09.21 |
네트워크 프로그래밍-DB(savepoint,column format,연산자,like, is null, rownum) (0) | 2018.09.15 |