[PostgreSQL] 36~40강까지의 내용 정리

인라인 뷰부터 EXISTS 연산자까지

인라인 뷰

-뷰는 쿼리의 결과를 마치 하나의 테이블처럼 사용하기 위한 목적
-데이터는 볼 수만 있고 저장되지 않는다
-FROM 절에 사용

-인라인 뷰는 쿼리 안의 뷰 형태로, FROM 절에 사용하는 서브쿼리
-대소비교가 가능하다
-조인을 통해 조건을 전달할 때 사용
-분리된 다른 테이블을 참조하여 원하는 정보를 가공하는 문법인 JOIN을 사용하여 두 데이터를 비교하는 표현식

-서브쿼리의 그룹 함수 결과(ex. avg(height) as avg_height ) 전달 시 반드시 컬럼 별칭을 사용해야 한다
→ 조건문에서 다시 계산을 하는 것처럼 잘못 인식이 될 수 있기 때문, 에러 발생

-인라인 뷰엔 반드시 별칭을 사용해야 한다

-기존 테이블에도 있고, 인라인 뷰에도 있는 컬럼 같은 경우 반드시 테이블 별칭.컬럼명의 형태로 사용한다

상호연관 서브쿼리

-서브쿼리에 사용하는 표현식을 상호연관 서브쿼리라고 한다
-메인쿼리와 서브쿼리의 정보를 교환하는 표현식
-메인쿼리와 서브쿼리의 비교 가능, 그룹별 대소 비교 가능
-서브쿼리에 비교 조건 전달

예시

select p1.name, p1.position, p1.pay from professor p1

where pay > ( select avg(pay) from professor p2 where p1.position = p2.position group by position)

스칼라 서브쿼리

-서브쿼리는 사용 위치에 따라 인라인 뷰와 스칼라 서브쿼리로 나눌 수 있다
-스칼라 서브쿼리는 SELECT 절에 사용하는 서브쿼리를 의미
-각 행마다 매칭되는 서브쿼리의 결과는 단 하나의 행
-select 절에 사용한다는 의미는 하나의 컬럼처럼 출력하겠다라는 의미이므로 단 한 개의 컬럼만 리턴해야 한다
-아우터 조인 없이 생략된 정보를 출력 가능 -> 아우터 조인을 수행한 것처럼 행 출력

예시

select name, (select avg(sal) from emp2) from emp2 where position='intern';

EXISTS 연산자

-서브쿼리 연산자로, 서브쿼리 결과의 True, False 값을 메인 쿼리에 전달
-각 행의 서브 쿼리 결과의 참, 거짓을 판단하여 참이면 연산 결과를 리턴, 아님 생략
-select 절보다 where절이 중요
-NOT EXISTS로 부정 연산 가능

Q. jumun과 menu 테이블을 사용하여 1000번 고객이 주로 애용하는 메뉴의 이름과 가격 정보 출력
A.

select pname,price from menu

where exists (select 1 from jumun where menu.pid= jumun.pid and gno = 1000);

좋은 웹페이지 즐겨찾기