ORACLE SQL

SQL 집합 연산자 , JOIN

최종군 2024. 7. 24. 18:49

     * 집합 연산자 
     
     : 여러 개의 쿼리문을 하나의 쿼리문으로 만들어주는 연산자
     
     - UNION : 합집합 OR(두 쿼리문을 수행한 결과값을 더해줌)
     - INTERSECT : 교집합 AND (두 쿼리문을 수행한 결과값의 중복된 부분을 추출해준다.)
     - UNION ALL : 합집합 + 교집합(중복되는 부분이 두번 표시될 수 있다)
     - MINUS : 차집합(선행 결과값에 후행 결과값을 뺸 나머지)   

 

 

  집합 연산자 사용 시 주의사항 
        
        1) 컬럼 갯수가 동일해야한다. 
        2) 컬럼 자리마다 동일한 타입으로 작성해야 함 
        3) 정렬하고자 한다면 ORDER BY절은 마지막에 작성해야한다.

 

 

 


 

 

JOIN : 두개 이상의 테이블에서 데이터를 조회하고자 할 때 사용되는 구문. 

 

* 관계형 데이터베이스(RDB)에서는 최소한의 데이터를 각각의 테이블의 저장 

중복 저장을 최소화하기 위해 최대한 쪼개서 관리한다. 

 

각 테이블간의 연결고리(외래키)를 통해서 데이터를 매칭시켜서 조회한다. 

 

 

 JOIN은 크게 "오라클 전용 구문"과 "ANSI 구문"(미국국립표준협회 )


        오라클 전용 구문이란 ?       |               ANSI 구문 
   -------------------------------------------------------------------------------
             등가 조인              |         내부조인 
            (EQUAL JOIN)           |  (INNER JOIN) --> JOIN USING/ON
--------------------------------------------------------------------------------
        포괄 조인                        |         왼쪽 외부 조인(LEFT OUTER JOIN)
        (LEFT OUTER)               |        오른쪽 외부 조인(RIGHT OUTER JOIN)
        (RIGHT OUTER)             |        전체 외부 조인 (FULL OUTER JOIN)
--------------------------------------------------------------------------------
                                                   |            
        자체 조인 (SELF JOIN)       |               JOIN ON
    비등가 조인(NON EQUAL JOIN)     |
--------------------------------------------------------------------------------         

 

 

 

등가조인(EQUAL JOIN)

 

= > 연결 시키는 컬럼의 값이 일치하는 행들만 조회 (=> 일치하지 않은 값은 조회에서 제외 )

 

ORACLE 전용 구문 : 

 

예시 ) 

 

-- 사원의 사번, 이름, 부서명을 조회(부서코드 컬럼 => EMPLOYEE : DEPT_CODE, DEPARTMENT : DEPT_ID)

 

SELECT EMP_ID, EMP_NAME, DEPT_TITLE  

FROM EMPLOYEE, DEPAETMENT

WHERE DEPT_CODE = DEPT_ID;

 

-- 사원들의 사번 이름 직급명을 조회 (직급코드 컬럼 => EMPLOYEE : JOB_CODE, JOB : JOB_CODE)

 

-- 두 테이블의 컬럼명이 동일한 경우 별칭을 지어줌으로써 구분할 수 있다! 

SELECT EMP_ID, EMP_NAME, JOB_NAME 

FROM EMPLOYEE E, JOB J

WHERE E.JOB_CODE = J.JOB_CODE;

 

ANSI : 

 

 FROM절에 기준이 되는 테이블을 하나 작성 : 
 JOIN절에 조인하고자하는 테이블을 기술  + 매칭시키고자 하는 조건을 작성 

 

    - JOIN USING : 컬럼명이 같은 경우 
    - JOIN ON : 컬럼명이 같거나 다른 경우 

 

 

SELECT EMP_ID, EMP_NAME, JOB_NAME 

FROM EMPLOYEE 

 JOIN JOB USING(JOB_CODE);  

JOIN USING : 컬럼명이 같은 경우 

 

 

  - JOIN ON : 컬럼명이 같거나 다른 경우 

같은 경우 별칭을 지어줌으로써 구분할 수 있다. 

 

SELECT EMP_ID, EMP_NAME, JOB_NAME 

FROM EMPLOYEE 

JOIN JOB J ON(E.JOB_CODE = J.JOB_CODE);

 

 

 

 

 

-- 대리 직급인 사원의 사번, 사원명 직급명, 급여 조화 
-- 오라클 구문 

SELECT EMP_ID, EMP_NAME, JOB_NAME, SALARY
FROM employee E, JOB J
WHERE E.JOB_CODE = J.JOB_CODE AND JOB_NAME = '대리'; 
    
-- ** ANSI 구문 ** --     
    
SELECT EMP_ID, EMP_NAME, JOB_NAME, SALARY
FROM EMPLOYEE 
 JOIN JOB  USING(JOB_CODE)
WHERE JOB_NAME = '대리';

 

 

 

-- [1] 부서가 인사관리부인 사원들의 사번, 사원명, 보너스 조회 

-- **오라클 구문 **
SELECT EMP_ID, EMP_NAME, NVL(BONUS, '0')
FROM employee ,department 
WHERE DEPT_CODE = DEPT_ID
    AND DEPT_TITLE = '인사관리부';

-- **ANSI 구문**

SELECT EMP_ID, EMP_NAME, NVL(BONUS, '0')
FROM employee 
JOIN department ON (DEPT_ID = DEPT_ID)
WHERE DEPT_TITLE = '인사관리부';

 

 

 


 

'ORACLE SQL' 카테고리의 다른 글

SQL 1회독  (0) 2024.07.26
ORACLE SQL 2회독 문제 풀이  (0) 2024.07.25
SQL_함수 모음 NULL 처리 함수, 선택 함수  (0) 2024.07.23
SQL 함수_ 형변환  (0) 2024.07.22
SQL 함수_2 숫자 타입의 데이터 처리 함수 및 날짜  (0) 2024.07.21