mjeongriver
article thumbnail
Published 2023. 5. 18. 14:07
서브쿼리 정리 TIL/SQL

1. 개념

서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고도 부른다. 서브쿼리는 다음과 같이 괄호() 로 감싸져서 표현 된다.

 

- 실행 순서(서브쿼리 실행 → 메인(부모) 쿼리 실행)

 

  • (select * from table) 같이 괄호()안에 있는 쿼리를 서브 쿼리라 말한다
  • 서브쿼리(=자식쿼리, 내부쿼리) - 메인쿼리 컬럼 사용 가능
  • 메인쿼리(=부모쿼리, 외부쿼리) - 서브쿼리 컬럼 사용 불가

 

2. 서브쿼리 위치에 따른 명칭

SELECT col1, (SELECT ...) -- 스칼라 서브쿼리(Scalar Sub Query): 하나의 컬럼처럼 사용 (표현 용도)
FROM (SELECT ...)         -- 인라인 뷰(Inline View): 하나의 테이블처럼 사용 (테이블 대체 용도)
WHERE col = (SELECT ...)  -- 일반 서브쿼리: 하나의 변수(상수)처럼 사용 (서브쿼리의 결과에 따라 달라지는 조건절)

 

1) 중첩 서브쿼리

- where 문에 나타나는 서브쿼리

1] 조건값을 상수로 할 때

select name, height 
from userTbl
where height > 177;

 

2] 조건값을 select로 특정할때 (단 결과가 값이 하나여야됨)

select name, height 
from userTbl
where height > (select height from userTbl where name in ('김경호'));

 

 

3] 조건에 값이 여러개 들어올땐 any.  any in과 동일한 의미이고 or를 의미한다.

select name, height 
from userTbl
where height = any(select height from userTbl where addr in ('경남')​);

 

4] all은 도출된 모든 조건값에 대해 만족할때. and를 의미한다.

select * 
from city
where population > all( select population from city where district = 'New York' );

 

2) 인라인 뷰

- FROM 문에 나타나는 서브쿼리로 서브 쿼리가 FROM 절에 사용되 경우 무조건 AS 별칭을 지정해 주어야 한다.

SELECT EX1.name,EX1.salary
FROM (
  SELECT *
  FROM employee AS Ii
  WHERE Ii.office_worker='사원'
) EX1; -- 서브쿼리 별칭

 

3) 스칼라 서브쿼리

- SELECT 문에 나타나는 서브쿼리로 다른 테이블에서 어떠한 값을 가져올때 쓰인다.

하나의 레코드만 리턴이 가능하며, 두개 이상의 레코드는 리턴할 수 없다.

- 일치하는 데이터가 없더라도 NULL값을 리턴할 수 있다. 이는 원래 그룹함수의 특징중에 하나인데 스칼라 서브쿼리 또한 이 특징을 가지고 있다.

SELECT D.DEPTNO, (SELECT MIN(EMPNO) FROM EMP WHERE DEPTNO = D.DEPTNO) as EMPNO 
FROM DEPT D 
ORDER BY D.DEPTNO

 

3. 서브쿼리 실행 조건


서브쿼리는 SELECT문으로만 작성 할 수 있다. (정확히 SELECT문 쿼리밖에 사용 할 수 없는것 이다.)​​
반드시 괄호()안에 존재하여야 한다.
괄호가 끝나고 끝에 ;(세미콜론)을 쓰지 않는다.
ORDER BY를 사용 할 수 없다.

 

참조

https://inpa.tistory.com/396

 

[MYSQL] 📚 서브쿼리 개념 & 문법 💯 정리

서브쿼리(Subquery) 서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라

inpa.tistory.com

 

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

day38-DB: sql  (0) 2022.11.25
day37-DB: sql  (0) 2022.11.22
day36-DB: sql  (0) 2022.11.21
day35-DB: sql  (0) 2022.11.18
day34-DB: sql  (0) 2022.11.17
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그