본문 바로가기

서브 쿼리 ( sub query : scalar / inline / nested ) 본문

BF 2024/SQL

서브 쿼리 ( sub query : scalar / inline / nested )

jaegomhoji 2022. 3. 23. 18:00

** 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
Comments