데이터 분석 및 프로젝트

SELECT 문 실행 순서 / CASE/ SUBQUERY/IN NOT IN /FROM

막막한 2023. 5. 23. 18:25

SELECT 실행 순서 

 

FROM

WHERE

GROUP BY

HAVING

SELECT

ORDER BY

 

SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2

위 쿼리문 동작하는 순서 분석하기 

 

FROM invoices :  invoices 테이블 접근 

WHERE CustomerId >=10: customerid 필드가 10 이상인 레코드들 조회 

GROUP BY CustomerId : customerid 기준으로 그룹화 한다 

HAVING SUM(Total)  >= 30 : total 필드의 값들의 합이 30 이상인 결과 필터

SELECT CustomerId, AVG(Total) : 조회된 결과에서 customerid필드와 total필드의 평균값 가져오기 

ORDER BY 2 : AVG(Total) 필드 기준으로 오름차순 정렬

 

CASE 사용하기 

 

프로그래밍 언어의 IF문과 같은 기능 

SELECT CASE
	WHEN CustomerId <= 25 THEN 'GROUP 1'
        WHEN CustomerId <= 50 THEN 'GROUP 2'
        ELSE 'GROUP 3'
      END
   FROM customers

customerid 필드값에 따라 group 1, 2, 3 나누게 된다 

 

SUBQUERY

쿼리문 안에 다른 쿼리문 포함한 것 

실행되는 쿼리에 중첩으로 위치해 정보 전달 

 

1. 하나의 변수처럼 사용

2. 테이블을 리턴받아 사용

3. 하나의 컬럼처럼 사용

SELECT CustomerId, CustomerId = (
			SELECT CustomerId 
            FROM customers
            WHERE CustomerId =2
            )
FROM customers
WHERE CustomerId < 6

IN, NOT IN

IN은 특정 값이 서브쿼리에 있는지 확인하는 것 

SELECT *
FROM customers
WHERE CustomerId IN (
			SELECT CustomerId 
            FROM customers 
            WHERE CustomerId < 10
            )

customers테이블에서 customerid 값이 서브쿼리에 돌려받는 값에 속한 결과들로 조회

서브쿼리에서는 customerid가 10이하인 데이터 돌려주기 때문에 최종 조회된 데이터 또한 customerid가 10이하인 경우이다 

 

NOT IN 사용하면, 서브쿼리에서 조회된 10미만을 제외한 레코드 조회 

 

FROM

서브쿼리를 FROM에도 사용할 수 있다

SELECT *
FROM(
	SELECT CustomerId
    FROM customers
    WHERE CustomerId < 10
    
    )

조회된 결과를 하나의 테이블이나 조회할 대상으로 지정해 사