효율적인 쿼리 작성을 도와주는 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 |