◈ DML ◈
• 집합 연산자(SET OPERATOR)
하나의 쿼리문 안에 여러개의 쿼리가 들어가는 형태를 가지는 연산자로써
테이블의 데이터를 하나로 합칠 때 주로 사용됨
* 참고 : 데이터가 조회된 결과물을 RESULT SET 이라고 부름
• UNION
1. EMPLOYEES 테이블에서 DEPARTMENT_ID가 80이면서 SALARY가 10000 이상인 직원 조회
2. EMPLOYEES 테이블에서 급여가 5000이상 10000 이하거나 이름이 A로 시작하는 직원 조회
3. 아래와 같이 서로 다른 테이블에 대한 결과를 합쳐서 조회할 수 있음
4. EMPLOYEES 테이블과 DEPARTMENTS 테이블의 데이터 결과를 합치고 중복 제거
• 위 예시 설명
1. 데이터 조회에 대한 컬럼명은 선행 쿼리문에 의해 결정됨
2. DEPARTMENT_NAME은 FIRST_NAME 컬럼의 결과값으로 더해짐
3. TO_CHAR를 사용한 이유 : LOCATION_ID가 LAST_NAME 컬럼이 있는 공간으로
데이터를 합쳐야하기 때문에 데이터 타입을 맞춰줘야 함
4. MANAGER_ID를 선행 쿼리문의 MANAGER_ID의 결과값에 더함
• UNION ALL
UNION과 동작은 똑같지만 중복을 제거하지 않음
• INTERSECT
두 개의 쿼리문에서 결과값만을 더하여 데이터를 조회함
• MINUS
선행된 쿼리문의 수행 결과에서 후행 쿼리문의 결과값을 모두 제외함
• 아래의 쿼리는 월급 5000이상, 10000 이하이고 FIRST_NAME이 A로 시작하는 직원을 제외하는 쿼리가 됨
◈ DML (JOIN) ◈
• JOIN
두 개 이상의 테이블의 데이터를 모두 조회할 때 사용하는 구문으로 써 관계형 데이터베이스의 경우 테이블끼리 서로 중복되는 데이터를 보관하는 경우가 많음
(* 서로 연관성을 주어 데이터에 접근하기 위해서)
이러한 관계형 데이터베이스의 특징으로 인해 JOIN을 사용하여 서로 연관된 데이터를 조회하기 위해서 많이 쓰임
• 참고
JOIN 문법은 오라클 조인과 ANSI(미국 국립 표준 협회) 조인으로 나눠짐
• JOIN 종류
• INNER JOIN
두 테이블의 공통된 컬럼 값을 기준으로 집합을 반환
• 오라클 조인(INNER JOIN)
EMPLOYEES 테이블과 DEPARTMENT 테이블의 데이터를 연결시켜 사용
• ANSI 조인(INNER JOIN)
EMPLOYEES 테이블과 DEPARTMENT 테이블의 데이터를 연결시켜 사용
• LEFT OUTER JOIN
왼쪽 테이블의 모든 행과, 오른쪽 테이블에서 일치하는 행들을 반환
• 오라클 조인(LEFT OUTER JOIN)
왼쪽의 모든 행과 오른쪽의 테이블에서 일치하는 행들을 반환
• ANSI 조인(LEFT OUTER JOIN)
왼쪽의 모든 행과 오른쪽의 테이블에서 일치하는 행들을 반환
• RIGHT OUTER JOIN
오른쪽 테이블의 모든 행과, 왼쪽쪽 테이블에서 일치하는 행들을 반환
• 오라클 조인(RIGHT OUTER JOIN)
오른쪽의 모든 행과 왼쪽의 테이블에서 일치하는 행들을 반환
• ANSI 조인(RIGHT OUTER JOIN)
오른쪽의 모든 행과 왼쪽의 테이블에서 일치하는 행들을 반환
• FULL OUTER JOIN
양쪽 행들의 모든 결과를 반환
• ANSI 조인(FULL OUTER JOIN)
양쪽 행들의 모든 결과를 반환
• JOIN 쿼리 작성해보기 (1)
INNER JOIN을 사용하여 직원들의 이름과 속한 부서의 이름 조회하기
• JOIN 쿼리 작성해보기 (2)
INNER JOIN을 사용하여 직원들의 이름과 해당 직무에서 근무 기간 조회하기
• JOIN 쿼리 작성해보기 (3)
DEPARTMENT_ID가 100인 직원의 이름과 부서 이름 조회
• JOIN 쿼리 작성해보기 (4)
DEPARTMENT_ID가 80이고, 급여가 12000 이상인 직원의 이름과 부서 이름 조회
• JOIN 쿼리 작성해보기 (5)
DEPARTMENT 테이블에서 LOCATION_ID를 기준으로 조인하여 각각의 부서
위치가 어디인지(STREET_ADDRESS, CITY) 확인하기
• JOIN 쿼리 작성해보기 (6)
EMPLOYEES 테이블에서 각각의 직원이 작업한 이력 확인하기
• EMPLOYEE_ID에만 별칭으로 테이블을 정의한 이유
EMPLOYEES 테이블과 JOB_HISTORY 테이블 모두 EMPLOYEE_ID를 가지고 있기 때문에 어떤 테이블의 EMPLOYEE_ID 컬럼을 가지고 올건지 명확하게 작성해 주어야 함.
그 외 다른 컬럼(FIRST_NAME, START_DATE, END_DATE)은 각각의 테이블에 따로 존재하기 때문에 별칭을 지어주지 않아도 사용 가능함
• JOIN + GROUPBY 쿼리 작성해보기 (1)
각 부서별로 직원 수 검색하여 결과 출력
• JOIN + GROUPBY 쿼리 작성해보기 (2)
각 부서별로 직원 수 검색하여 결과 출력하되 직원 수가 5명 이상인 부서
• JOIN + GROUPBY 쿼리 작성해보기 (3)
각 직무별로 평균 급여를 검색하고, 평균 급여가 가장 높은 직무의 이름과 평균 급여 출력하기
'Back-End > Oracle' 카테고리의 다른 글
Oracle ■ DML INSERT, UPDATE, DELETE (5) | 2024.07.24 |
---|---|
Oracle ■ DML SELECT (4)-서브쿼리 (0) | 2024.07.17 |
Oracle ■ DML SELECT(2)-그룹쿼리 (0) | 2024.07.15 |
Oracle ■ DML SELECT(1) (0) | 2024.07.10 |
Oracle ■ 데이터베이스 종류와 기초 (0) | 2024.07.09 |