[SQL] SUBQUERY

Aiden·2024년 2월 12일
0

SQL

목록 보기
21/21
post-thumbnail

사용목적

하나의 SQL문 내 또 다른 SQL문을 사용하기 위한 SQL 문법입니다.

추가내용

MAIN QUERY가 SUBQUERY를 포함하는 종속적인 관계입니다.

  • SUBQUERY는 MAIN QUERY의 COLUMN을 사용할 수 있습니다.
  • MAIN QUERY는 SUBQUERY의 COLUMN을 사용할 수 없습니다.

SUBQUERY 내에서 ORDER BY는 사용할 수 없습니다.
단일행 혹은 복수행 비교연산자와 함께 사용할 수 있습니다.

문법

SCALAR SUBQUERY (SELECT절)

SELECT절에 사용하는 SUBQUERY이며, SUBQUERY의 결과는 하나의 COLUMN입니다.

SELECT column1, (SELECT column2 FROM table2 WHERE condtion)
FROM table1
WHERE condition;

INLINE VIEW (FROM절)

FROM절에 사용하는 SUBQUERY이며, MAIN QUERY에서는 INLINE VIEW에서 조회한 COLUMN만 사용 가능합니다.

SELECT a.column, b.column
FROM table1 a, (SELECT column1, column2 FROM table2) b
WHERE condition;

NESTED SUBQUERY (WHERE절)

WHERE절에 사용하는 SUBQUERY이며, SINGLE ROW, MULTIPLE ROW, MULTIPLE COLUMN으로 종류가 나뉘어집니다.

추가내용

  • SINGLE ROW : 하나의 ROW를 검색하는 SUBQUERY
  • MULTIPLE ROW : 하나 이상의 ROW를 검색하는 SUBQUERY
  • MULTIPLE COLUMN : 하나 이상의 COLUMN을 검색하는 SUBQUERY

SINGLE ROW (하나의 행을 검색하는 서브쿼리)

SUB QUERY의 결과 값이 2개 이상이라면 에러가 발생합니다.

SELECT columnname
FROM tablename
WHERE columnname = (SELECT columnname
					FROM tablename
                    WHERE condition)
ORDER BY columnname; # MAIN QUERY에서는 ORDER BY 사용 가능합니다.

MULTIPLE ROW - IN (SUBQUERY 결과 중 포함될 때)

SELECT columnname
FROM tablename
WHERE columnname IN (SELECT columnname
					FROM tablename
                    WHERE condition)
ORDER BY columnname; # MAIN QUERY에서는 ORDER BY 사용 가능합니다.

MULTIPLE ROW - EXISTS (SUBQUERY 결과에 값이 있다면 반환)

SELECT columnname
FROM tablename
WHERE columnname EXISTS (SELECT columnname
					FROM tablename
                    WHERE condition)
ORDER BY columnname; # MAIN QUERY에서는 ORDER BY 사용 가능합니다.

MULTIPLE ROW - ANY (SUBQUERY 결과 중 최소한 하나라도 만족한다면)

비교 연산자를 함께 사용합니다.

SELECT columnname
FROM tablename
WHERE columnname = ANY (SELECT columnname
					FROM tablename
                    WHERE condition)
ORDER BY columnname; # MAIN QUERY에서는 ORDER BY 사용 가능합니다.

MULTIPLE ROW - ALL (SUBQUERY 결과를 모두 만족한다면)

비교 연산자를 함께 사용합니다.

SELECT columnname
FROM tablename
WHERE columnname = ALL (SELECT columnname
					FROM tablename
                    WHERE condition)
ORDER BY columnname; # MAIN QUERY에서는 ORDER BY 사용 가능합니다.

MULTIPLE COLUMN (연관 서브쿼리)

SUBQUERY 내 MAIN QUERY의 COLUMN이 같이 사용되는 경우 사용합니다.

SELECT columnname
FROM tablename a
WHERE (a.column1, a.column2,...) IN (SELECT b.column1, b.column2,...
									 FROM tablename b
                    				 WHERE a.column = b.column)
ORDER BY columnname; # MAIN QUERY에서는 ORDER BY 사용 가능합니다.
profile
aiden

0개의 댓글