본문 바로가기

Development/SQL

SQL 기초_4

효율적인 쿼리 작성을 도와주는 Subquery

하나의 SQL 쿼리 안에 또 SQL 쿼리가 있는 것을 의미한다.

중첩 for문이나 콜백 함수와 비슷하다고 생각하면 된다.

 

 

자주 쓰이는 Subquery 유형

  • Where + Subquery
select * from 테이블1
where 필드 
in (select * from 테이블2 where 조건);

쿼리 실행 순서

from 실행 > subquery 실행 > where ... in 절에서 subquery의 결과에 해당되는 조건으로 필터링 > 결과 출력

 

  • Select + Subquery
select 필드1, 필드2, 필드3, 
	(select avg(필드명) from 테이블명
	where 조건) as 별칭설정
from 테이블명

쿼리 실행 순서

밖의 select * from 문에서 데이터를 출력 > select 안의 subquery가 매 데이터 한줄마다 실행 > 실행되는 데이터 한줄마다 subquery의 조건 또는 통계 데이터를 함께 출력

 

  • From + Subquery (가장 많이 사용)
select 필드1, 필드2, 필드3 from 테이블
inner join (
	select 필드명, round(avg(필드명),1) as 별칭 from 테이블명
	group by 필드명
) a on 메인 테이블의 필드명 = 연결할 테이블의 필드명

쿼리 실행 순서

먼저 subquery의 select가 실행 > 이것을 테이블처럼 여기고 밖의 select가 실행

 

 

쿼리문 깔끔하게 정리 : With

쿼리문을 작성하다 보면 코드가 길어지고 지저분해지는데 이럴 때 With를 사용하여 깔끔하게 정리가 가능하다.

with table1 as (
	select 필드명 from 테이블1
	group by 필드명
), table2 as (
	select 필드명 from 테이블2
	group by 테이블
)
select  필드1,
		필드2,
        필드3
from table1 a inner join table2 b on 연결할 테이블 및 필드명
inner join 테이블3 on 연결할 테이블 및 필드명

 

 

유용한 SQL 문법

  • SUBSTRING_INDEX (문자열 쪼개기)
//기준 문자로 텍스트(문자열)을 나누고 그 중 첫번째 조각을 가져온다
select 필드명, SUBSTRING_INDEX(필드명, '기준 문자', 1) from 테이블명

//기준 문자로 텍스트(문자열)을 나누고 그 중 마지막 조각을 가져온다
select 필드명, SUBSTRING_INDEX(필드명, '기준 문자', -1) from users

 

  • SUBSTRING (문자열 일부만 출력)
//SUBSTRING(필드명, 출력을 하고싶은 첫 글자의 위치, 몇개의 글자를 출력하고 싶은지)
select 필드명, substring(필드명,1,10) as date from orders

 

  • Case (경우에 따라 원하는 값을 새 필드에 출력)
select 필드명
case 
when 필드명 > 조건 then '대응할 값'
else '대응할 값'
END as 별칭
from 테이블명

'Development > SQL' 카테고리의 다른 글

SQL 기초_3  (0) 2023.03.22
SQL 기초_2  (0) 2023.03.21
SQL기초_1  (0) 2023.03.20