◈ DML ◈
• 서브쿼리
SQL 쿼리 안에 포함된 또 다른 쿼리
• 서브쿼리 예시
Donald 라는 직원과 같은 부서에 있는 직원 이름 조회할 때 기본적인
코드는 아래와 같이 2번에 걸쳐 SELECT를 사용해야 함
• 서브쿼리 예시
서브쿼리를 사용할 경우 한번의 쿼리로 조회 가능
• 설명
1. 서브쿼리가 실행
2. Donald가 속한 부서의 ID를 찾음
3. 찾은 결과(50)을 DEPARTMENT_ID = 50 으로 대입되어 조건식 생성
4. 메인 쿼리의 SELECT 실행
◈ DML (단일행 서브쿼리) ◈
• 단일행 서브쿼리
결과값의 데이터(행)가 1개인 서브 쿼리로써 단일행 비교 연산자와 사용할 수 있음
* 단일행 비교 연산자 : =, <, <=, >=, >, !=
• 설명
1. 서브쿼리가 실행
2. DEPARTMENT_ID가 30인 직원들의 평균 월급을 반환
3. 찾은 평균 연봉값이 SALARY >= 조건식에 대입되어 조건식 생성
4. 메인 쿼리의 SELECT 실행
• 단일행 서브쿼리 사용해보기 (1)
가장 높은 월급을 받는 직원의 이름 조회
• 단일행 서브쿼리 사용해보기 (2)
직원의 가장 많은 부서 이름 조회
• 단일행 서브쿼리 사용해보기 (3)
가장 낮은 LOCATION_ID를 가진 도시 조회
• 단일행 서브쿼리 사용해보기 (4)
가장 높은 보너스를 받는 직원의 이름 조회
◈ DML (다중행 서브쿼리) ◈
• 다중행 서브쿼리
결과값의 데이터(행)가 여러 개인 서브 쿼리로써 다중행 비교 연산자와 사용할 수 있음
* 다중행 비교 연산자 : IN, ALL, ANY, …
• 설명
1. 서브쿼리가 실행
2. 부서별 가장 낮은 월급 출력
3. 찾은 결과여러개를 IN에 의해 하나씩 대입하여 조건에 만족하는 데이터 조회
4. 메인 쿼리의 SELECT 실행
• 설명
결과값이 IN(2100, 4400, 6000, 6500, 10000, …) 처럼 완성되므로 EMPLOYEES
테이블의 SALARY가 해당 값들이 존재하는 컬럼들의 데이터를 조회함
• 다중행 서브쿼리 사용해보기 (1)
ALL 연산자는 앞에 비교 연산자(>, <, >=, <=)가 붙으며 모두 일치해야 TRUE가 됨
• 다중행 서브쿼리 사용해보기 (2)
ANY 연산자는 해당하는 값 중 하나라도 일치하면 TRUE를 반환함
◈ DML (다중열 서브쿼리) ◈
• 다중열 서브쿼리
결과값의 컬럼이 여러 개인 서브 쿼리. 단, 데이터(행)은 반드시 하나여야 하며 단일행 비교 연산자와 사용할 수 있음
* 단일행 비교 연산자 : =, <, <=, >=, >, !=
• 설명
1. 서브쿼리가 실행
2. Bruce 직원의 부서 번호와 월급 조회
3. 찾은 결과들을 각각의 컬럼에 대입하여 조건식 확인
4. 메인 쿼리의 SELECT 실행
• 설명
WHERE (컬럼1, 컬럼2) = (값1, 값2) 와 같이 대입되어 조건식을 계산함
• 다중열 서브쿼리 사용해보기 (1)
이메일이 SBELL인 직원과 사수번호, 부서번호가 같은 직원들의 이름 조회하기
• 다중열 서브쿼리 사용해보기 (2)
핸드폰 번호가 650.507.9811인 직원과 같은 부서, 직무를 가지는 직원 조회
◈ DML (다중열,다중행 서브쿼리) ◈
• 다중열, 다중행 서브쿼리
결과값의 컬럼과 데이터(행)가 여러 개인 서브 쿼리. 다중행 비교 연산자와 사용할 수 있음
• 설명
WHERE (컬럼1, 컬럼2) IN (값1, 값2) 와 같이 대입되어 조건식을 계산함
• 다중열, 다중행 서브쿼리 사용해보기 (1)
부서번호가 50번 이면서 이름이 S로 시작하는 직원들의 이름과 연봉 조회하기
• 다중열, 다중행 서브쿼리 사용해보기 (2)
부서별 가장 많은 월급을 받는 직원들의 이름, 부서번호, 월급 조회하기
◈ DML (인라인 뷰) ◈
• 인라인 뷰
메인쿼리의 FROM에 서브 쿼리를 사용하며, 수행한 결과가 테이블 대신 사용됨
단, 서브쿼리에서 조회한 컬럼들을 기준으로만 메인 쿼리에서 조회할 수 있음
• 인라인 뷰 서브쿼리 사용해보기 (1)
부서별 가장 많은 월급을 받는 직원 조회하기
• 인라인 뷰 서브쿼리 사용해보기 (2)
이름이 K로 시작하고 월급을 5000 이상 받는 직원 조회하기
• 인라인 뷰를 사용하는 이유
1. 인라인 뷰를 사용할때는 되도록 조건식을 메인쿼리에 두는것이 좋음 인라인 뷰에서는
필요한 일부 데이터만을 불러오고, 그 데이터에서 조건식을 따지면
성능이 좋아짐 (전체 데이터에서 하나씩 비교해가며 조건식을 보는것보다 빠름)
2. 인라인 뷰를 사용할 때 별칭을 사용하여 쿼리의 가독성을 높일 수도 있음
3. TOP-N 쿼리를 사용하기 위해서 주로 사용됨
* TOP-N 쿼리 : 상위 N개의 데이터를 추출하는 쿼리
• 참고 1,2번으로 변경된 인라인 뷰
이름이 K로 시작하고 월급을 5000 이상 받는 직원 조회하기
• 인라인 뷰 서브쿼리 사용해보기 (3)
인라인뷰로 각 부서별 월급의 합계, 평균, 인원수를 구하고 조회하기
• TOP-N 쿼리
상위 N개의 데이터를 추출하기 위한 쿼리
ex) 직원중 급여가 가장 높은 상위 3명, 입사한지 가장 오래된 직원 상위 5명, …
• 종류
1. ROWNUM
-> 오라클에서 사용되며, WHERE에서 행의 개수를 제한함
-> 단, ROWNUM으로 TOP-N 쿼리를 만들기 위해서는 인라인뷰 사용 필요
2. ROW LIMITING ANSI 표준 문법
-> 그동안 실습에서 자주 사용했던 ‘FETCH FIRST 5 ROWS ONLY‘
-> 실습에서 사용한 것 외에도 행의 개수를 제한하는 옵션들이 있음
3. 기타
• ROWNUM 사용해보기 (1)
월급이 높은 직원 3명 조회하기
인라인뷰에서 정렬 후 ROWNUM <= 3을 통해 3번째 행보다 낮거나 같은 데이터만 출력
• 참고
메인쿼리 컬럼에 ROWNUM을 작성하여 몇번째 행인지 컬럼을 추가하여 데이터를 조회할 수 있음
• ROWNUM 사용해보기 (2)
오늘은 오라클 DML SELECT문 서브쿼리에 대해 공부를 진행하였다! 세미 프로젝트때 쉴틈없이 했던거지만 더욱더 공부해 까먹지않고 익숙해져야겠다 그럼 20000!! 곧 파이널 프로젝트에 들어가는데 과정 및 여러가지 이슈 등등을 업로드할 예정이다 진짜로 그럼 20000@!@!
'Back-End > Oracle' 카테고리의 다른 글
Oracle ■ CREATE (0) | 2024.07.25 |
---|---|
Oracle ■ DML INSERT, UPDATE, DELETE (5) | 2024.07.24 |
Oracle ■ DML SELECT(3)-집합 연산자,조인 (0) | 2024.07.17 |
Oracle ■ DML SELECT(2)-그룹쿼리 (0) | 2024.07.15 |
Oracle ■ DML SELECT(1) (0) | 2024.07.10 |