본문 바로가기
데이터베이스

SQL Query문 (서브쿼리, 인라인 뷰, GROUP BY)

by 염지미 2023. 8. 25.

서브쿼리 ( Sub Query )

▶ 하나의 SQL 명령문 처리 결과를 다른 SQL 명령문에 전달하기 위하여 두 개 이상의 SQL 명령문을 하나의

     SQL 명령문으로 연결한다. 서브쿼리를 포함하는 SQL 명령문을 메인 쿼리라고 한다.

메인 쿼리에서는 ORDER BY 절을 사용할 수 있고, 서브 쿼리에서는 사용이 불가능하다.

 

1. 단일행 서브쿼리

서브쿼리의 결과로 하나의 행만 메인쿼리에 반환한다.

메인쿼리의 조건절에서 서브쿼리의 결과와 비교할 경우에는 반드시 단일 행 비교 연산자 중의 하나를 사용한다.

비교 연산자 ( =, >, >=, <, <=, <> 등)

SELECT [컬럼명]
FROM [테이블명]
WHERE [컬럼명] = (SELECT [컬럼명]
		 FROM [테이블명]
		 WHERE [조건]);

 

2. 다중행 서브쿼리

서브쿼리의 검색 결과로 하나 이상의 행을 메인 쿼리에 전달한다.

메인 쿼리의 조건절에서 서브쿼리의 결과와 비교할 시 반드시 IN, EXISTS 등 다중 행 비교 연산자를 사용한다.

SELECT [컬럼명]
FROM [테이블명]
WHERE [컬럼명] IN (SELECT [컬럼명]
		 FROM [테이블명]
		 WHERE [조건]);

 

3. 인라인 뷰( INLINE VIEW )

FROM 절에 사용하는 서브쿼리

서브쿼리가 FROM 절에 사용되는 경우 무조건 ALIAS 필요

SELECT [A.컬럼명]
FROM [테이블명] A
INNER JOIN (SELECT [컬럼명]
	   FROM [테이블명]
	   WHERE [조건]) B
ON A.[컬럼명] = B.[컬럼명];

 

4. GROUP BY

테이블에서 검색된 행들을 특정 열을 기준으로 나눈다.

집계 함수를 GROUP BY 절과 함께 사용하면, 그룹별로 개수, 합계, 평균 등을 구할 수 있다.

주의 사항으로 GROUP BY 절에 명시하지 않은 열을 SELECT절에서 사용하면 에러가 발생한다.

SELECT [집계함수], [컬럼명] FROM [테이블명] GROUP BY [컬럼명];

-- 예시 --
SELECT COUNT(*), LOCATION FROM CUSTOMER GROUP BY LOCATION;

 

5. GROUP BY HAVING

 GROUP BY 절에서 명시한 열 이름에 의해 그룹으로 분류 후, 각 그룹에 대해 HAVING 절의 검색 조건을 적용한다.

HAVING 절은 반드시 GROUP BY 절과 함께 사용하고, WHERE 절의 기능과 비슷하다.

SELECT [집계함수], [컬럼명] FROM [테이블명] GROUP BY [컬럼명] HAVING [조건];

-- 예시 --
SELECT COUNT(*), LOCATION FROM CUSTOMER GROUP BY LOCATION HAVING COUNT(*) > 5;

 

댓글