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

강신찬·2023년 5월 10일
0

인라인 뷰

  • 뷰는 쿼리의 결과를 마치 하나의 테이블처럼 사용하기 위한 목적

  • 데이터는 볼 수만 있고 저장되지 않는다.

  • 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 group by position)

스칼라 서브쿼리

  • 서브쿼리는 사용 위치에 따라 인라인 뷰와 스칼라 서브쿼리로 나눌 수 있다.
  • 스칼라 서브쿼리는 SELECT 절에 사용하는 서브쿼리를 의미
  • 각 행마다 매칭되는 서브쿼리의 결과는 단 하나의 행
  • SELECT 절에 사용한다는 의미는 하나의 컬럼처럼 출력하겠다라는 의미이므로 단 한 개의 컬럼만 리턴해야 한다.
  • OUTER JOIN 없이 생략된 정보를 출력 가능 -> OUTER JOIN을 수행한 것처럼 행 출력
  • 예시
select name, (select avg(sal) from emp2) from emp2 where position = 'intern';

EXISTS 연산자

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

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

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

출처: https://velog.io/@bacccine/PostgreSQL-3640%EA%B0%95%EA%B9%8C%EC%A7%80%EC%9D%98-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC-6qisldg0

profile
꾸준히 공부하는 백엔드 개발자

0개의 댓글

관련 채용 정보