DB 17일차

김강산·2022년 6월 24일

orcle SQL

목록 보기
14/25

<학습목표>
1. 조인이란? : 둘 이상의 테이블이 뭉여져서 마치 하나의 테이블처럼 묶여지는 것
2. 조인의 종류?

  • Cartesian product : 카티전 프로덕트, 모든 가능한 행들의 조합
  • Equi Join : 등가 / 동등 / 심플 / 이퀄조인, 조건이 일치하는 컬럼을 매칭 (주로PK 와FK)
  • Non-Equi Join : 조건절에서 JOIN 조건이 '='이 아닌 다른 연산기호로 주어지는 경우
  • Outer Join : 외부조인, 조건이 일치하지 않더라도 모든 행들을 검색하고자 할 때 사용
    (+)로 표시한다
  • Self Join : 셀프조인, 한 테이블 내에서 JOIN 하는 경우
  1. ANSI란?
  • Cross Join : Cartesian Product 와 동등
  • Inner Join : 각 테이블에 동일한 이름의 컬럼이 존재할 때 자동으로 조건이 적용된다.
  • Outer Join : Equi Join 과 동등
  • Natural Join : (Left/ Right/ Full Outer Join)

조인조건 두 테이블이 연결되어있어야 한다
조인 시 단계
1) 두 테이블 사이에 P.K, F.K 관계를 찾자
2) 관계가 있다면 FROM절에 두 테이블명을 적음
자료형과 크기가 같음, 같은 데이터가 있음
3) P.K데이터와 F.K데이터가 같은 경우에만
결과에 포함
4) 컬럼을 구성, FROM절의 테이블에 ALIAS
EX)
CARTESIAN PRODUCT :
SELECT L.LPROD_GU
, L.LPROD_NM
, P.PROD_LGU
, P.PROD_ID
, P.PROD_NAME
FROM LPROD L, PROD P;

중요***
EQUI JOIN :
SELECT L.LPROD_GU
, L.LPROD_NM
, P.PROD_LGU
, P.PROD_ID
, P.PROD_NAME
FROM LPROD L, PROD P
WHERE L.LPROD_GU = P.PROD_LGU;

SELECT C.CART_NO
, C.CART_PROD
, C.CART_QTY
, C.CART_MEMBER
, P.PROD_NAME
, M.MEM_NAME
FROM PROD P, CART C, MEMBER M
WHERE P.PROD_ID = C.CART_PROD
AND C.CART_MEMBER = M.MEM_ID;

ORACLE 사투리 => ANSI표준로 치환
ANSI 표준
EX)
SELECT L.LPROD_GU
, L.LPROD_NM
, P.PROD_LGU
, P.PROD_ID
, P.PROD_NAME
FROM LPROD L INNER JOIN PROD P
ON (L.LPROD_GU = P.PROD_LGU);

3개부터 조금 다름
SELECT C.CART_NO
, C.CART_PROD
, C.CART_QTY
, C.CART_MEMBER
, P.PROD_NAME
, M.MEM_NAME
FROM PROD P INNER JOIN CART C ON (P.PROD_ID = C.CART_PROD)
INNER JOIN MEMBER M ON(C.CART_MEMBER = M.MEM_ID);
앞에 PROD 가 한묶음
묶음과 MEMBER를 묶어줌

5개 묶음

SELECT C.CART_NO
, C.CART_PROD
, C.CART_MEMBER
, C.CART_QTY
, M.MEM_NAME
, P.PROD_NAME
, B.BUYER_NAME
, L.LPROD_NM
FROM CART C INNER JOIN MEMBER M ON( M.MEM_ID = C.CART_MEMBER)
INNER JOIN PROD P ON(P.PROD_ID = C.CART_PROD)
INNER JOIN BUYER B ON(P.PROD_BUYER = B.BUYER_ID)
INNER JOIN LPROD L ON(L.LPROD_GU = P.PROD_LGU);

JOIN 조건 이외의 조건은 WHERE로 만들어준다
EX)
SELECT P.PROD_ID 상품코드
, P.PROD_NAME 상품코드
, B.BUYER_NAME 거래처명을
FROM BUYER B, PROD P
WHERE B.BUYER_ID = P.PROD_BUYER
AND B.BUYER_NAME LIKE '삼성전자';

ANSI표준
SELECT P.PROD_ID 상품코드
, P.PROD_NAME 상품코드
, B.BUYER_NAME 거래처명을
FROM BUYER B INNER JOIN PROD P
ON (B.BUYER_ID = P.PROD_BUYER)
WHERE B.BUYER_NAME LIKE '삼성전자';

0개의 댓글