JOIN

한준수·2023년 5월 31일
0

SQLD

목록 보기
22/31

JOIN 개요

두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것.
일반적으로 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립된다.

5가지 테이블을 JOIN 하기 위해서는 최소 4번의 JOIN과정이 필요하다.(N-1)

JOIN 주의사항

  • FROM절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두개의 집합간에만 JOIN이 일어난다.
  • ((A JOIN B) JOIN C)

EQUI JOIN

  • 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우 사용한다.
    • 이름이 같게 되면 혼동이 오기 때문에 컬럼 이름 앞에 테이블 명을 기술해줘야 한다.
  • 대부분 PK,FK의 관계를 기반으로 한다.
  • JOIN의 조건은 WHERE 절에 기술하게 되는데 "=" 연산자를 사용해서 표현한다.
  • INNER JOIN 이라고도 한다.
  • JOIN에 참여하는 대상 테이블이 N개일 때, JOIN조건은 N-1 개이다.

EX) 이름이 SCOTT인 사람의 부서명과 부서번호를 출력

SELECT EMP.ENAME, DEPT.DNAME, EMP.DEPTNO
FROM EMP, DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO
AND ENAME='SCOTT';

---아래와 같이 테이블 명에 별칭을 부여할 수도 있다---

SELECT E.ENAME, D.DNAME, E.DEPTNO
FROM EMP E, DEPT D
WHERE EMP.DEPTNO=DEPT.DEPTNO
AND ENAME='SCOTT';

Non EQUI JOIN

  • 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용한다.
  • "=" 연산자가 아닌 다른 (BETWEEN, >,>=,<,<= 등)연산자들을 사용한다.

EX) 급여 등급을 5개로 나누어놓은 SALGRADE에서 정보를 얻어 각 사원의 급여 등급을 지정

SELECT ENAME, SAL, SALGRADE
FROM EMP,SALGRADE
WHERE SAL BETWEEN LOSAL AND HISAL;

테이블 3개 조인 예시

SELECT E.EMPNO, E.ENAME, D.DNAME, S.GRADE
FROM EMP E, DEPT D, SALGRADE S
WHERE E.DEPTNO = D.DEPTNO
AND
E.SAL BETWEEN S.LOSAL AND HISAL;

-----ANSI 문법------
SELECT E.EMPNO, E.ENAME, D.DNAME, S.GRADE
FROM EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
INNER JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND HISAL;
profile
응애에요

0개의 댓글