데이터베이스와 sql

SQL 입문, 04장 테이블을 서로 통합하는 조인 알아보기(2)

_Jin_ 2024. 2. 17.

https://www.youtube.com/playlist?list=PLG7te9eYUi7usbPInfbh24eE3lsbjGxRw

 

Do it! SQL 입문

굵직한 글로벌 기업의 현직 데이터베이스 전문가가 20년간의 기업 실무와 강의 경험을 아낌없이 담았습니다! 실제 나스닥 주식, 국가 통계 포털의 데이터베이스로 현업에서 바로 사용 가능한 표

www.youtube.com

< 이지스 퍼블리싱의 ' Do It ! SQL 입문 ' 강의를 학습하며 정리합니다.>

 

SUBQUERY ( 서브쿼리 )

 


(1) 서브쿼리란? 

 - INNER QUERY라고도 한다.
 - 하나의 쿼리문안에 포함되어 있는 또 하나의 쿼리문이며, 메인쿼리가 서브쿼리를 포함하는 종속적 관계의 모습이다.
 - 여러 번의 쿼리를 수행해야 얻을 수 있는 결과를 하나의 중첩된 문장으로 간편하게 조회할 수 있다.


 ♣ 서브쿼리가 사용가능한 문법
    ● SELECT 절
    ● FROM 절
    ● WHERE 절
    ● HAVING 절
    ● ORDER BY 절
    ● INSERT 문의 VALUES 절
    ● UPDATE 문의 SET 절

위 2개의 구문은 동일한 결과를 보이는 서브쿼리 코드이다. 
좌측은 WHERE절 안에서 서브쿼리가 쓰이고 있으며, 우측은 FROM절 안에서 서브쿼리가 작성되어 있다. 
두 쿼리문은 동일한 결과값을 가져오지만, 성능이나 순서 등이 작성 방식에 따른 차이가 있다. 그러나 현재 수준에서 이를 학습하기에는 심화 내용이므로 지금은 동일한 결과를 조회함에 다양한 방법이 있다는 정도만 파악하고 작성할 수 있는 점이 중요하다. 


(2) 서브쿼리 종류( 일반적으론 WHERE절에서 사용 )

 서브쿼리의 반환값에 따라 서브 쿼리 종류가 나눠진다. 

 - 단일 행 서브쿼리 : 서브쿼리의 결과가 1행
    ; 단일행 비교연산자와 사용한다.( = , < , <= , >= , > , <> )
    # SELECT * FROM stock WHERE price <= ( SELECT AVG( price ) FROM stock ) 
    → 주식 종목 중 평균 가격보다 작거나 같은 종목 출력


 - 다중 행 서브쿼리 : 서브쿼리의 결과가 여러 행
    ; 여러행이 리턴값으로 실행되며, 다중행 비교연산자와 사용된다.( IN, ALL, ANY, SOME, EXISTS )
    # SELECT * FROM stock WHERE name IN ( SELECT name FROM nasdaq_company WHERE name = %시스템 )     
    → 나스닥에 상장한 회사 중 ~~시스템으로 끝나는 이름의 회사의 정보출력


 - 다중 컬럼 서브쿼리 : 서브쿼리의 결과가 여러 칼럼
    ; 서브쿼리의 결과가 여러 개의 컬럼이 필요한 경우 사용된다.
   # SELECT * FROM stock WHERE ( start_year, price ) IN ( SELCET start_year, MAX(price) FROM nasdaq_company )  
   
→ 나스닥에 상장한 년도별 가장 가격이 높은 회사 조회

♣ 주의 사항
 - 서브쿼리를 괄호로 묶어서 사용
 - 서브쿼리 안에서는 Order by 절은 사용 못함
 - 연산자로 오른쪽에 사용해야함  



(2) 서브쿼리 위치에 따른 분류

- 인라인 뷰 

    ; FROM절에서 사용하는 서브쿼리이다. SELECT절의 결과를 FROM절에서 하나의 테이블처럼 사용하고 싶다면 이용한다. 

- 스칼라 서브쿼리
 
   ; SELECT절에서 사용하는 서브쿼리이다. SELECT절에서 서브쿼리를 사용하여 하나의 컬럼처럼 사용하기 위한 목적을 지닌다. 하지만 성능이 좋지 않고, 주로 표현하지 않는 방법이다.

댓글