* 집합 연산자
: 여러 개의 쿼리문을 하나의 쿼리문으로 만들어주는 연산자
- 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 |