SQL

SQL 기본 문법 정리(5) (GROUP BY, HAVING, 서브쿼리)

Bryan Lee 2022. 4. 17. 19:52

 

1) GROUP BY

- GROUP BY 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶입니다. 

SELECT name FROM sample51 GROUP BY name;

 

1-1) GROUP BY 구와 집계함수 조합

- GROUP BY 구와 집계함수를 조합할 수 있습니다. 

SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;

 

1-2) 결과값 정렬

- GROUP BY 구로 그룹화한 경우에도 ORDER BY 구를 사용해 정렬할 수 있습니다.

SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP By name ORDER BY SUM(quantity) DESC;

 

2) HAVING 구로 조건 지정

- HAVING 구는 GROUP BY 구의 뒤에 기술하며 WHERE 구와 동일하게 조건식을 지정할 수 있습니다.

SELECT name, COUNT(name) FROM sample51 GROUP BY name HAVING COUNT(name) = 1;

 

3) 서브쿼리

- 서브쿼리는 SELECT 명령에 의한 데이터 질의로, 상부가 아닌 하부의 부수적인 질의를 의미합니다.  

- '최솟값을 가지는 행을 삭제'할 때, 다음과 같이 서브쿼리를 지정할 수 있습니다.

DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM sample54);

 

3-1) SET 구에서 서브쿼리 사용하기

- UPDATE의 SET 구에서도 서브쿼리를 사용할 수 있습니다. 

UPDATE sample54 SET a = (SELECT MAX(a) FROM sample54);

3-2) FROM 구에서 서브쿼리 사용하기

- FROM 구에서도 서브쿼리를 사용할 수 있습니다.

- SELECT 명령 안에 SELECT 명령이 들어 있는 듯 보이는데, 

  이를 '네스티드(nested) 구조' 라고 합니다.  

SELECT * FROM (SELECT * FROM sample54) sq;

3-3) INSERT 명령과 서브쿼리

- INSERT 명령과 서브쿼리를 조합해 사용할 수도 있습니다. 

INSERT INTO sample541 VALUES (
(SELECT COUNT(*) FROM sample51),
(SELECT COUNT(*) FROM sample54)
);

 

4) 상관 서브쿼리

- 상관 서브쿼리는 EXISTS 술어를 조합시켜서 서브쿼리를 사용하는 방법입니다. 

UPDATE sample551 SET a = '있음' WHERE
EXISTS (SELECT * FROM sample551 WHERE no2 = no);

4-1) NOT EXISTS

- '없음'의 경우, 행이 존재하지 않는 상태가 참이 되므로

   이때는 NOT EXISTS를 사용합니다.  

UPDATE sample551 SET a = '없음' WHERE
NOT EXISTS (SELECT * FROM sample551 WHERE no2 = no);

레퍼런스

- SQL 첫걸음