본문 바로가기
개발/데이터베이스

(데이터베이스) 서브쿼리, 상관서브쿼리

by kakk789 2022. 4. 22.

서브쿼리

  • sql 쿼리 안에 다른 sql 쿼리가 삽입되는 것
  • 서브쿼리가 조인보다 효율이 더 좋다고 한다.
select절 - 단일 값만 반환 가능 (단일 값, sum, count 같은 것)
from절  - 반환 값이 테이블만 가능
where절 - 단일 값과, 복수 값 모두 가능.

참고블로그:
https://mjn5027.tistory.com/51
어떨 때는 서브쿼리쓰고 어떨때는 join 사용하냐?

내 생각에는 메인쿼리에서 출력해야할 속성이 다른테이블을 참조하지 않을 경우 서브쿼리로만 해도될 것 같다.

ex ) 메인쿼리 : select A1, A2, 테이블2.B1 from '테이블1'

이럴경우는 메인쿼리에서 테이블2의 값을 참조하기 때문에 조인을 사용하는게 좋을 것 같다..

상관 서브쿼리

  • 서브쿼리의 조건식에서 메인쿼리의 테이블과 조건식이 필요한 경우
  • 메인쿼리와 하위쿼리가 연관, 상관이 있어야 한다.
  • 속성으로 복수의 값이 들어 와야할 것 같은 경우에 상관 서브쿼리를 사용한다.
    실제로는 복수의 값이 들어올 수 없는데, 복수의 값이 들어와야 할 것만 같은 경우에 select를 한번 더 써줘서 값을 단일로 불러오는 개념인 듯..  (확실하진 않으니 느낌만 이해할 것.)
select 상품코드 from 신발테이블 a1
where 매출 > ( select avg(매출) from 신발테이블 a2 where a2.매출 = a1.매출)
  • 하위 쿼리에 where 절로 아래와 같이 표현 한다.
( WHERE a1.속성1 = a2.속성1)

Alias a1, a2은 모두 동일 테이블 '테이블 1' 의 별칭이다.
그냥, 약간 재귀함수 마냥 같은 테이블의 내용을 참조하는 할 경우에 저런 조건식으로 사용한다고 외우면 편합니다.

상관 서브쿼리 예시

아래 두 쿼리문은 결과가 똑같음 (굳이 표현해봤음)

    SELECT bookNAME,(SELECT bookid FROM book a2 WHERE a2.bookid = a1.bookid) FROM book a1;

    SELECT bookname, bookid FROM book;
반응형

댓글