ANSI 문법

tpids·2024년 6월 10일

DB

목록 보기
13/25
  • ANSI(미국국립표준협회) 문법은 모든 DBMS 에서 사용가능한 조인 문법

오라클 조인과 ANSI의 차이점

SELECT A.직원ID, A.부서ID, B.부서명
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID (+) ; 

WHERE 부분에 조인조건 사용
FROM 이 깔끔하지만 WHERE 가 복잡
아우터 조인은 (+) 기호를 이용해서 표시
LEFT JOIN 과 RIGHT JOIN 사이를 빠르게 전환 가능

SELECT A.직원ID, A.부서ID, B.부서명
FROM 직원 A LEFT OUTER JOIN 부서 B
ON (A.부서ID = B.부서ID)

FROM 뒤의 ON 부분에 조인조건을 사용
WHERE절 없이 구현 가능하지만 FROM절이 복잡
모든 DBMS에서 사용 가능

  • 따로 (+) 조건이 없다면 INNER JOIN 으로 연결

  • 양쪽 테이블 모두 OUTER JOIN을 하고 싶다면
    FULL OUTER JOIN을 이용 (오라클 문법에는 존재X)

--ANSI 문법
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A INNER JOIN 직원주소 B
ON (A.직원ID = B.직원ID);

SELECT A.직원ID, A.이름, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+);

SELECT A.직원ID, A.이름, B.주소
FROM 직원 A LEFT OUTER JOIN 직원주소 B
ON (A.직원ID = B.직원ID);

--실습문제
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+)
AND A.직원ID IN ('A0005', 'A0008');

SELECT A.직원ID, A.이름, B.주소
FROM 직원 A LEFT OUTER JOIN 직원주소 B
ON (A.직원ID = B.직원ID)
WHERE A.직원ID IN ('A0005', 'A0008');

SELECT B.직원ID, B.이름, A.주소
FROM 직원주소 A, 직원 B
WHERE A.직원ID(+) = B.직원ID;

SELECT B.직원ID, B.이름, A.주소
FROM 직원주소 A RIGHT OUTER JOIN 직원 B
ON (A.직원ID = B.직원ID);

SELECT A.직원ID, A.이름, A.나이, B.연락처
FROM 직원 A, 직원연락처 B
WHERE A.직원ID = B.직원ID;

SELECT A.직원ID, A.이름, A.나이, B.연락처
FROM 직원 A INNER JOIN 직원연락처 B
ON  (A.직원ID = B.직원ID);

--TIP
SELECT A.직원ID, A.이름, A.나이, B.연락처, C.주소
FROM 직원 A , 직원연락처 B, 직원주소 C
WHERE A.직원ID = B.직원ID
AND B.직원ID = C.직원ID;

SELECT A.직원ID, A.이름, A.나이, B.연락처, C.주소
FROM 직원 A INNER JOIN 직원연락처 B
ON (A.직원ID = B.직원ID) INNER JOIN 직원주소 C
ON (B.직원ID = C.직원ID);

SELECT 소속반, COUNT(소속반)
FROM 수강생정보
GROUP BY 소속반;
profile
개발자 공부중

0개의 댓글