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 첫걸음
'SQL' 카테고리의 다른 글
프로그래머스 SQL 고득점 KIT(GROUP BY) (1) | 2022.04.17 |
---|---|
SQL 기본 문법 정리(4) (COUNT, DISTINCT, SUM, AVG, MIN, MAX) (0) | 2022.04.14 |
SQL 기본 문법 정리(3) (INSERT, DELETE, UPDATE) (0) | 2022.04.14 |
SQL 기본 문법 정리(2) (ORDER BY, LIMIT, 문자열 연산, 날짜 연산, CASE문) (2) | 2022.04.13 |
SQL 기본 문법 정리(1) (SELECT, DESC, AND, OR, LIKE) (1) | 2022.04.12 |