나람지의 개발일기

2023.03.08 본문

학원/DB

2023.03.08

Naramji 2023. 3. 8. 15:41

EXISTS 연산자

값이 존재하는지 안 하는지가 중요한 연산자

서브쿼리로부터 결과값이 넘어오면 true / 넘어오지 않으면 false 가 됨


(예제)

※ 부하직원이 존재하는 즉, 자기자신이 매니저인 사원 출력하는 문제

select employee_id, last_name, job_id, department_id
from employees
where employee_id in (select manager_id
			 		  from employees);

→  위의 구문과 같은 내용의 일반 서브쿼리 구문. 여기서 성능적으로 더 나은 쿼리임

→  나도 모르는 부분은 서브쿼리로 작성함

→  일반적인 서브쿼리로 구문을 짤 수 없는 상황에서는 exists 연산자를 사용하는 쿼리를 사용한다.

 

 

 

 

 

WITH 절 

반복될 것 같은 구문을 위에 "선언(정의)"해두는 것

(예제)

※ 부서별 사원의 수를 구하는 서브쿼리

1번의 서브쿼리 실행 후 2번 쿼리가 실행이 된다. / 1번 쿼리는 부서별 사원의 수를 나타냄
실행순서 1 -> 4번 순

쿼리 구문이 길어지므로 WITH절로 위에서 먼저 선언을 하고 사용함

(원래라면 1번 쿼리가 3번, 4번 쿼리에 들어가고 2번 쿼리가 3번, 4번 쿼리에 들어가서 실행이 되므로 쿼리가 길어진다.)

 

 

 

 

 

(7-13 장, p.179)

Correlated subquery

한 테이블의 행에 준하여 다른 테이블의 행을 갱신할 때 correlated subquery를 사용

Correlated subquery를 사용하여 행 갱신 및 삭제

복사본 테이블 먼저 생성함

 

※ 조인을 계속해야하는 상황이라면 조인해야하는 테이블에 컬럼을 추가해서 같이 조회하는 것이 나음

department_name 컬럼 비어있음

 

일반적인 update 구문

 

[ 위의 일반 update 구문을 상호관련 서브쿼리를 이용하여 간단하게 작성한 ver ]

 

'학원 > DB' 카테고리의 다른 글

D+24)22.10.28  (0) 2022.10.28
D+19)22.10.21  (0) 2022.10.22
D+18)22.10.20  (0) 2022.10.20
D+6)2022.09.29  (0) 2022.09.29
D+5)22.09.28  (0) 2022.09.28