SQL JOIN(오라클)

·2022년 11월 21일
0

Oracle/SQL

목록 보기
9/16
  • 정의

    다른 테이블에서 원하는 컬럼 정보를 얻어오고 싶을때, 테이블들을 논리적으로 결합하여 컬럼 정보를 얻어옴

1. EQUI 조인 : 가장 일반적인 JOIN. 공통컬럼 존재

특징)
1> WHERE절에서 테이블들의 공통 컬럼들을 동등연산자(=,EQUI)로 비교
2> 컬럼이 일치하는 행에 연결시켜 테이블들을 결합해주는 JOIN
3> SELECT절의 형식은 [테이블명.컬럼명]

형식)
SELECT 테이블명.컬럼명1, 테이블명.컬럼명2,... --공통컬럼이 아니면 테이블명은 생략가능
FROM 테이블명1, 테이블명2,..
WHERE 조인조건;

예시)사원번호,이름,급여,부서번호,부서명을 조회하시오.
SELECT E.EMPNO, E.ENAME, E.SAL, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO;

출력예시>

     EMPNO ENAME             SAL     DEPTNO DNAME         
---------- ---------- ---------- ---------- --------------
      7839 KING             5000         10 ACCOUNTING    
      7782 CLARK            2450         10 ACCOUNTING    
      7934 MILLER           1300         10 ACCOUNTING    
      7902 FORD             3000         20 RESEARCH      
      7369 SMITH             800         20 RESEARCH      
      ...

2.NON-EQUI JOIN: 공통컬럼이 존재하지 않는 JOIN

테이블 JOIN 조건이 EQUI가 아니라 크거나 작을 수도 있다.

문법)
SELECT [테이블명.]컬럼명1,2,3...
FROM 테이블명1, 테이블명2,...
WHERE 테이블1.컬럼>=테이블2.컬럼1 AND 테이블1.컬럼<=테이블2.컬럼2
--BETWEEN을 사용할 수도 있겠지만 비교연산자를 써주는 것이 더 성능면에서 좋음

예시) 학생번호,이름,과목명,점수,학점을 조회해 보세요.
SELECT S.SNUM, NAME, SUBJECT, SCORE, CREDIT--SNUM이 공통컬럼이므로 테이블명 붙여줘야함. 나머지는 생략가능
FROM STUDENT S, GRADE G, CREDITS C
WHERE S.SNUM=G.SNUM --JOIN
AND G.SCORE<=C.MAXSCORE AND G.SCORE>=C.MINSCORE; -- JOIN 조건

3.CROSS JOIN: JOIN 조건을 쓰지 않은 경우

특징)
1. 실수로 JOIN조건을 쓰지 않을때 발생(대다수)
2. 테스트용 데이터를 한번에 많이 만들고자 할때 사용되기도 함
SELECT E.EMPNO,E.ENAME,E.DEPTNO,D.DNAME
FROM EMP E, DETP D;
--WHERE절이 존재하지 않음

4. SELF JOIN: 동일 테이블끼리 JOIN한 경우

특징)
1. 참조해야 하는 컬럼이 자신의 테이블의 다른 컬럼임
2. FROM절에 동일 테이블을 ALIAS만 다르게 주어서 JOIN시킴
3. WHERE절에 같은 데이터값을 쓰는 컬럼끼리 JOIN조건을 줌

문법)
SELECT E1.컬럼명1, E1.컬럼명2, E2.컬럼명3,.. --모든 컬럼이 공통컬럼이므로 컬럼명앞에 테이블명을 꼭 써주자
FROM 테이블명 E1,테이블명 E2
WHERE E1.컬럼명1=E2.컬럼명3;

5. OUTER JOIN: JOIN 기준 테이블의 데이터를 모두 출력

오라클에서는 기준테이블의 반대 테이블에(+)를 붙임

쉽게 말해서 NULL값도 출력할 테이블에 (+)을 붙임

cf) ANSI => LEFT/RIGTH OUTER JOIN : 왼쪽/오른쪽 테이블이 기준 테이블이 됨.
문법)
A테이블 COLUMN1의 NULL값들도 출력하고 싶을때
SELECT A.COLUMN1, A.COLUMN2, B.COLUMN3 FROM A,B
WHERE A.COLUMN2(+)=B.COLUMN2
출력예시>

COLUMN1 COLUMN2 COLUMN3
------------------------
VALUE1    V1      VAL1
VALUE2    V2      VAL2
	      V3      VAL3
VALUE3    V4      VAL4
	      V5      VAL5
profile
웹개발입문자

0개의 댓글