서브 쿼리 ( sub query : scalar / inline / nested ) 본문
** subquery 란??
> scalar subquery : 스칼라 서브쿼리, select 절에 사용
> inline view : 인라인 뷰, from 절에 사용
> nested subquery : 중첩 서브쿼리, where 절에 사용한다
> 하나의 sql문 안에 포함되어 있는 또 다른 SQL문을 말한다
> 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계이다
> 서브쿼리는 메인쿼리의 칼럼 사용 가능
> 메인 쿼리에서는 서브 쿼리의 칼럼을 사용할 수 없다
> 서브 쿼리는 서브쿼리를 괄호로 묶어서 사용
> 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능하다
> 서브쿼리 내에서는 order by 를 사용할 수 없다
** scalar subquery : 스칼라 서브쿼리, select 절에 사용
쉽게 말해서, col에 select 절을 사용해서 자료를 가져오는 것
select col1, (select col2 as alias from table2 where condition ) alias
from table1
where condition;
** Inline View : 스칼라 서브쿼리, select 절에 사용
조건을 부합하는 테이블을 만들어서 from ~절에 사용 ,
이후 해당 조건에 맞는 정보들을 원 테이블에서 추출
< 메인 쿼리에서는 인라인 뷰에서 조회한 칼럼만 사용이 가능하다 >
select a.col, b.col
from table1 a, (select column1, column2 from table2) b
where condition;
** nested subquery : 중첩 서브쿼리, where 절에 사용한다
> single row : 하나의 행을 검색하는 서브 쿼리 , 하나 이상은 Error 가 난다
> multiple row ( in ) : 여러개의 행을 검색하는
> multiple row ( exists ) : where exists ( select ~ ) 조건에 있어야 하는 경우
> multiple row ( any ) : where col = any( select ~ ) 아무 조건이나 만족하면 되는 경우
> multiple row ( all ) : where col = all( select ~ ) 모두 만족해야 하는 경우
> multiple column : 연관 서브쿼리, 여러개의 열을 검색하는
select col
from tablename a
where ( a.col1, a.col2 .. ) in ( select b.col1, b.col2, .. from tablename b where a.colname = b.colname )
order by col
경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회
select c.station, c.type, c.number
from station c, ( select station, max(case_number) count from station where status type like 'qkftod' group by asdf) m
where c.station = m.station and c.case_number = m.count;
'BF 2024 > SQL' 카테고리의 다른 글
Python에서 mysql 사용하기 - 2) , csv 파일 불러온 후 db에 넣기 (0) | 2022.03.24 |
---|---|
Python에서 mysql 사용하기 - 1) (0) | 2022.03.24 |
Scalar Functions (0) | 2022.03.23 |
Group by , having (0) | 2022.03.22 |
Aggregate Functions ( 집계함수 ) (0) | 2022.03.22 |