1. Subquery
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
- 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계이다
> 서브쿼리는 메인쿼리의 칼럼 사용 가능
> 메인쿼리는 서브쿼리의 칼럼 사용 불가
2. Subquery 사용 시 주의 사항
Subquery는 괄호로 묶어서 사용
단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
subquery 에서는 order by를 사용X
3. Subquery 종류
스카라 서브쿼리 (Scalar Subquery) : select 절에 사용
인라인 뷰 (Inline View) : from 절에 사용
중첩 서브쿼리 (Nested Subquery) : where 절에 사용
4. Scalar Subquery
select 절에서 사용하는 서브쿼리, 결과는 하나의 column 이어야 한다.
select col1, (select col2 from table2 where condition)
from table1 where condition;
col1의 condition1과 col2의 condition2를 한번에 가져올 수 없는 상황인데 한번에 보고 싶을 때 주로 사용한다.
5. Inline View
From절에 사용하는 서브쿼리. 메인쿼리에서는 인라인뷰에서 조회한 col만 사용가능.
select a.column, b.column
from table1 a, (select col1, col2 from table2) b
where condition;
from에 subquery가 들어있는 경우 subquery를 하나의 테이블로 인식하고 그것을 view table이라고 한다. 즉 위의 문법에서 a 테이블과 b 테이블을 조인해서 가져오는 결과를 나타낸다.
> 예를 들어 한 col 별로 다른 col들의 조건을 보고 싶을 때 주로 사용한다.
경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회
6. Nested Subquery
Where절에서 사용하는 서브쿼리
- Single Row : 하나의 열을 검색하는 서브쿼리
- Multiple Row : 하나 이상의 열을 검색하는 서브쿼리
- Multiple Column : 하나 이상의 행을 검색하는 서브쿼리
6-1. Single Row
서브쿼리가 비교연산자 (=,>,>=,<>,!=,...)와 사용되는 경우, 서브쿼리의 검색결과는 한 개의 결과값을 가져야 한다. (두 개 이상인 경우 에러)
select col1 from table1
where col1=(where col2 from table2 where condition)
order by col1;
6-2. Multiple Row-IN
서브쿼리에 컬럼이 결과 중에 포함 될 때 사용. 즉 = 가 아닌 in을 사용.
in 대신 join을 사용해도 똑같은 결과!
select col11 from table1
where col IN (select col2 from table2 where condition)
order by col;
6-3. Multiple Row-Exists
서브쿼리결과에 값이 있으면 반환
select col1 from table1
where EXISTS (select col2 from table2 where condition)
order by col1;
예시)
6-4. Multiple Row-Any
서브쿼리 결과 중에 최소한 하나도 만족하면 (비교연산자 사용)
select col1 from table1
where col1=ANY (select col2 from table2 where condition)
order by col1;
예시)
6-5. Multiple Row-All
서브쿼리 결과를 모두 만족하면 (비교연산자 사용)
selec col1 from table1
where col1 = ALL (select col2 from table2 where condition)
order by col1;
7. Multi column subquery - 연관 서브쿼리
서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우
select col from table a
where (a.col1, a.col2, ...) in (select b.col1, b.col2, ... from table b where a.col = b.col)
order by col;
'코딩 > SQL' 카테고리의 다른 글
[MySQL] Scalar Functions : ucase, lcase, mid, length, round, now, format (0) | 2023.03.05 |
---|---|
[MySQL] Aggregate Functions(집계함수) count, sum, avg, min, max, group by, having (0) | 2023.03.05 |
[MySQL] Primary Key, Foreign Key (0) | 2023.03.05 |
[MySQL] Python으로 SQL 사용하기 (0) | 2023.02.28 |
[MySQL] Table 삭제 시 오류 : foreign key 가 있는데 truncate/delete 하는 경우 (0) | 2023.02.24 |