데이터베이스 연구실.log

동등 조인과 비동등 조인

동등 조건과 범위 조건의 조인, 조인 조건 개수 및 세 테이블 연결과 조인 후 집계

EQUI JOINNON EQUI JOIN조인 조건테이블 별칭카티션 곱salgrade

#핵심 요약

오라클 조인 문법은 네 가지임
equi join(조인 조건이 등호), non equi join(등호가 아닌 조건), outer join(equi join으로 볼 수 없는 결과를 볼 때), self join(자기 자신과 조인)

Oracle 문법 조인은 FROM 절에 테이블을 쉼표로 나열하고 WHERE 절에 조인 조건을 반드시 씀
조인 조건 개수는 테이블 개수 - 1임

조인 조건이 없으면 두 테이블의 카티션 곱(모든 행 조합)이 나옴

월급 등급처럼 범위로 이을 때는 e.sal BETWEEN s.losal AND s.hisal 같은 비동등 조건을 씀

#개념과 동작 원리

조인 쿼리의 두 테이블에 조인 조건이 없으면 Oracle은 카티션 곱을 돌려줌
카티션 곱이 꼭 필요한 경우가 아니면 항상 조인 조건을 넣으라고 권함

실습에서는 테이블 별칭(emp e, dept d)을 붙이고 컬럼 앞에 별칭을 써서 어느 테이블의 컬럼인지 밝혔음

조인 조인 조건 예 실습 테이블
equi join e.deptno = d.deptno emp, dept
non equi join e.sal BETWEEN s.losal AND s.hisal emp, salgrade(등급, 최저, 최고 월급)

#필수 명령어 또는 SQL

#실습 테이블

SQL Developer 또는 SQL*Plus객체 또는 설정을 변경함
CREATE TABLE salgrade
( grade NUMBER(10),
  losal NUMBER(10),
  hisal NUMBER(10) );

INSERT INTO salgrade VALUES (1, 700, 1200);
INSERT INTO salgrade VALUES (2, 1201, 1400);
INSERT INTO salgrade VALUES (3, 1401, 2000);
INSERT INTO salgrade VALUES (4, 2001, 3000);
INSERT INTO salgrade VALUES (5, 3001, 9999);
COMMIT;

결과 해석:

실습에서는 앞에 DROP TABLE salgrade를 두었음
같은 이름의 테이블이 있으면 지워짐

#equi join

SQL Developer 또는 SQL*Plus조회만 함
SELECT e.ename, d.loc, e.deptno
  FROM emp e, dept d
 WHERE e.deptno = d.deptno;

SELECT e.ename, e.sal, d.loc, e.job
  FROM emp e, dept d
 WHERE e.deptno = d.deptno
   AND e.job = 'SALESMAN';

결과 해석: 개별 실행 출력은 기재 없음

#non equi join과 세 테이블 조인

SQL Developer 또는 SQL*Plus조회만 함
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, d.loc, s.grade
  FROM emp e, dept d, salgrade s
 WHERE e.deptno = d.deptno
   AND e.sal BETWEEN s.losal AND s.hisal;

결과 해석: 세 테이블이라 조인 조건이 두 개임(dept - emp - salgrade)

#조인 후 집계

SQL Developer 또는 SQL*Plus조회만 함
SELECT d.loc, SUM(e.sal)
  FROM emp e, dept d
 WHERE e.deptno = d.deptno
 GROUP BY d.loc;

결과 해석:

실습 총정리 문제(답 확인 불가): 부서 위치별 최대, 최소, 합계 월급, 부서 위치별 합계를 가로로, 부서 위치별 이름 나열, 부서 위치별 합계와 맨 아래 전체 합계
각각 집계 함수와 그룹별 조회, 문자열 집계와 피벗, 다차원 집계의 문법을 조인 결과에 적용하는 과제임

#업무형 실습

실습에서는 쇼핑몰 고객, 상품, 주문 테이블(고객번호, 고객 이름, 등급, 지역 / 상품번호, 상품명, 분류, 가격 / 주문번호, 고객번호, 상품번호, 주문일, 수량, 금액)을 만들고 "서울 지역 고객 중 결제금액 5만 원 이상 주문을 금액 내림차순으로" 같은 문제를 냈음
비회원 주문은 고객번호가 NULL이라 equi join 결과에서 빠짐(스크립트 주석 "비회원" 기준)
이런 행까지 보려면 OUTER JOIN을 씀

가격 등급 테이블(price_grade: 등급, 최저, 최고 가격)로 상품 가격 등급을 매기는 non equi join 문제도 있음
실습 예상 결과에는 등급이 1~4 숫자로 적혀 있지만 테이블 값은 BRONZE, SILVER, GOLD, VIP임

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기