COUNT
SUM
AVG
MIN
MAX
SELECT COUNT * FROM sample51;
집계합수를 SELECT 구에 쓰면 WHERE 구의 유무와 관계없이 결괏값으로 하나의 행을 반환한다.
SELECT COUNT (no), COUNT(name) FROM sample51;
집계함수는 집합 안에 null 있을 경우 무시한다.
SELECT DISTINCT name FROM sample51;
SELECT SUM(quantity) FROM sample51;
이때 SUM 집계함수에 지정되는 집합은 수치형 뿐임. (문자열, 날짜시간형은 X)
NULL값 무시 (NULL 제거 후 합계를 냄)
SELECT AVG(quantity), SUM(quantity)/COUNT(quantity) FROM sample51;
NULL값 무시함.
NULL도 포함하고 싶다면 CASE 사용해 NULL 0으로 변환한 후 AVG 함수로 계산
문자열형, 날짜시간형에도 사용 가능
NULL값 무시
SELECT MIN(quantity), MAX(quantity), MIN(name), MAX(name) FROM sample51;
SELECT name FROM sampIe51 GROUP BY name;
SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;
집계함수는 WHERE 구의 조건식에서 사용 불가하다. (내부 처리 순서가 WHERE 구 —> GROUP BY 구 -> HAVING 구 -> SELECT 구 -> ORDER BY 구 이기 때문)
+) GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.
ORDER BY 구
SELECT name, COUNT(name), SUM(qauantity) FRON sample51 6ROUP BY name ORDER BY SUM(quantity) DESC;
GROUP BY 구로 그룹화한 경우에도 ORDER BY 구를 사용해 정련할 수 있다. 결괏값을 순서대로 정렬해야 한다면 ORDER BY 구를 지정하면 된다.
SELECT name, COUNT(name), SUM(quantity) FROM sample 51 GROUP BY name ORDER BY SUM(quantity) DESC;
SELECT 명령에 의한 데이터 질의
상부가 아닌 하부의 부수적인 질의
괄호로 서브퀴리 지정해 삭제
DELETE FROM sample54 WHERE a = (SELECT MIN(a) FRON sample54);
SELECT * FROM sample54;
-> 서브쿼리 사용해 DELETE와 SELECT 결합 가능
서브쿼리 사용 시 그 SELECT 명령이 어떤 값을 반환하는지 주의할 필요가 있다. 아래 4 가지가 일반적인 서브쿼리 패턴이다.
- 하나의 값을 반환하는 패턴
SELECT MIN(a) FROM sample54;- 복수의 행이 반환되지만 열은 하나인 패턴
SELECT no FROM sample54;- 하나의 행이 반환되지만 열이 복수인 패턴
SELECTS MIN(a), max(no) FROM sample54;- 복수의 행, 복수의 열이 반환되는 패턴
SELECT no, a FROM sample54;
이때 1번만 다름 (하나의 값만 반환함). '단일 값' = '스칼라 값'으로 불림!
연산자 사용해 비교할 경우 스칼라 값끼리 비교할 필요가 있다.
SELECT
(SELECT COUNT() FROM sample51) AS sq1;
(SELECT COUNT() FROM sample51) AS sq2;
UPDATE sample54 SET a=(SELECT MAX(a) FROM sample54);
SELECT FROM (SELECT FROM sample54) sq;
INSERT 명령과 서브귀리를 조합하여 시용할 수도 있다. INSERT 명령에는 VALUES 구의 일부로 서브쿼리를 사용하는 경우와, VALUES 구 대신 SELECT 명령을 사용하는 두 가지 방법이 있다.
서브쿼리외 부모쿼리가 서로 연관된 경우 서브쿼리는 상관 서브쿼리가 된다. 상관 서브쿼리를 사용함으로씨 두 테이블에 걸쳐 조직할 수 있다.