[데이터베이스] 서브쿼리란 무엇인가.

행복한 콩🌳·2023년 1월 31일
0

데이터베이스

목록 보기
25/26

서브쿼리란 무엇인가

  • 서브쿼리란 하나의 SQL 문 내에 있는 또 다른 sql문을 말한다.

JOIN과 서브쿼리의 차이는 무엇인가

  • JOIN은 JOIN에 참여하는 모든 테이블이 대등한 관계에 있어, 조인에 참여하는 모든 테이블의 칼럼은 어느 위치에 있어도 자유롭게 사용 가능
  • 집합 간의 곱의 관계
    따라서 1:N 관계 테이블이 조인하면 1(1*N)레벨의 집합이 생성됨
  • 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
  • 서브 쿼리는 서브쿼리 레벨과 상관 없이 항상 메인 쿼리 레벨로 결과 집합이 생성됨

서브쿼리

서브쿼리란 부모 쿼리 안에 작성하는 내부의 SELECT 쿼리이며, 주로 부모 쿼리의 FROM과 WHERE의 조건으로 사용됩니다.

서브쿼리라고 해서 특별한 문법이 있는 것이 아니라, SELECT를 괄호( )로 묶어서 가독성을 높입니다.

서브쿼리 사용 시 주의사항

① 서브쿼리를 괄호로 감싸서 사용한다.
② 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
③ 서브쿼리에서는 ORDER BY를 사용하지 못한다.

서브쿼리 사용 가능한 곳

  • SELECT
  • FROM
  • WHERE
  • HAVING
  • ORDER BY
  • INSERT문의 VALUES
  • UPDATE문의 SET

서브쿼리 종류

서브쿼리란 위치에 따라 SELECT절, FROM절, WHERE절로 나뉘는데,

  1. SELECT절에 [SELECT, FROM, WHERE]을 넣음
    SELECT절에 사용되는 서브쿼리는 하나의 열처럼 사용된다

  2. FROM절에 [SELECT, FROM, WHERE]을 넣음
    FROM절에 사용되는 서브쿼리는 하나의 테이블처럼 사용된다.

테이블처럼 사용되므로, 열 이름과 테이블명을 꼭 명시해줘야 함 (FROM절 내 서브쿼리는 괄호를 치고, AS 명시)

  1. WHERE절에 [SELECT, FROM, WHERE]을 넣음
    가장 많이 쓰이는 일반 서브쿼리이다.

유형에 따라 나눈 서브 쿼리는 아래와 같다.

  1. 중첩 서브쿼리 ( Nested Subquery )

  2. WHERE 절에 나타는 서브쿼리

    • WHERE 절에서 사용되는 서브쿼리
  3. FROM 절에 나타나는 서브쿼리
    - FROM 절에서 사용되는 서브쿼리
    FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 한다. FROM 절에는 테이블 명이 오도록 되어 있다. 그런데 서브쿼리가 FROM절에 사용되면 뷰(View)처럼 결과가 동적으로 생성된 테이블로 사용할 수 있다. 임시적인 뷰이기 때문에 데이터베이스에 저장되지는 않는다.
    또한, 인라인 뷰로 동적으로 생성된 테이블이여서 인라인 뷰의 칼럼은 자유롭게 참조가 가능하다.

  4. 스칼라 서브쿼리 ( Scalar Subquery )

  5. SELECT 절에 나타나는 서브쿼리

참고로 일반적으로 join 연산이 서브쿼리 연산보다 성능이 좋기 때문에, 서브쿼리는 join으로 바꿀 수 있으면 성능측정 과정을 통해 바꾸는 것이 좋습니다.

  • join 연산과 subquery 연산의 성능 차이가 알고싶다면 링크 < 이 스택오버플로를 참고하세요 단 영어임 ㅎ

[참조]
https://snowple.tistory.com/360
https://victorydntmd.tistory.com/139
그리고 참조는 안했는데 믿음 가는 티스토리 'SQL 전문가 가이드 한국 데이터베이스 진흥원에서 공부한 내용' 적어둔 티스토리
https://mozi.tistory.com/233

profile
매일매일 조금씩 모여 숲이 되자🐣

0개의 댓글