-
[SQLD] SQL 개발자 공부하기 Day 6 : GROUP BY / HAVING / 형변환 / 내장형 함수Study/SQL 2024. 2. 21. 19:34728x90반응형
목차
1. GROUP BY / HAVING
GROUP BY
‣ 테이블에서 소규모 행을 그룹화하여 합계, 평균, 최댓값, 최솟값 등을 계산할 수 있다.
ex)
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO;‣ DEPTNO칼럼과 SAL의 합계를 조회하라 / EMP 표에서 / DEPTNO 별로 그룹화해라.
-> EMP표에서 DEPTNO 별로 그룹화해서 DEPTNO 칼럼과 SAL의 합계를 조회하라.
(1) HAVING
‣ GROUP BY에 조건절을 사용하려면 HAVING을 사용해야 한다.
‣ WHERE절에 조건문을 사용하게 되면 조건을 충족하지 못하는 데이터들은 GROUP BY 대상에서 제외된다.
WHERE
‣ 그룹화하기 전의 개별 레코드에 조건 적용
HAVING
‣ 그룹화된 결과에 대해 조건 적용(2) 집계 함수 종류
집계 함수 설명 COUNT( ) ‣ 행 수를 조회한다. SUM( ) ‣ 합계를 계산한다. AVG( ) ‣ 평균을 계산한다. MAX( ) , MIN ( ) ‣ 최댓값과 최솟값을 계산한다. STDDEV( ) ‣ 표준편차를 계산한다. VARIANCE( ) ‣ 분산을 계산한다. 반응형(3) GROUP BY 사용 예제
SELECT DEPTNO, MGR, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, MGR;‣ DEPTNO, MGR , SAL의 평균을 조회하라. / EMP 표에서 / DEPTNO와 MGR을 그룹화해라
-> EMP 표에서 DEPTNO와 MGR을 그룹화해서 DEPTNO, MGR, SAL의 평균을 조회하라.
SELECT JOB, SUM(SAL)
FROM EMP
GROUP BY JOB
HAVING SUM(SAL) >= 1000;‣ JOB, SAL의 합계를 조회하라 / EMP 표에서 / JOB을 그룹화해라 / SAL의 합계가 1000 이상인 것만 조회하라.
-> EMP 표에서 JOB을 그룹화한 후 JOB, SAL의 합계를 조회하되, SAL의 합계가 1000 이상인 것만 조회하라.
SELECT DEPTNO, SUM(SAL)
FROM EMP
WHERE EMPNO BETWEEN 1000 AND 1003
GROUP BY DEPTNO;‣ DEPTNO, SAL의 합계를 조회하라 / EMP 표에서 / EMPNO가 1000 이상 1003 이하인 것만 / DEPTNO로 그룹화해라.
-> EMP표에서 EMPNO가 1000이상 1003 이하인 것만 DEPTNO별로 그룹화해서 DEPTNO, SAL의 합계를 조회하라.
(4) SELECT문 실행 순서
‣ FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 순으로 실행된다.
2. 형변환 / 내장형 함수
형변환
‣ 두 개의 데이터의 데이터 타입(형)이 일치하도록 변환하는 것.
‣ 예를 들어 숫자와 문자열의 비교, 문자열과 날짜형의 비교와 같이 데이터 타입이 불일치할 때 발생.
(1) 형변환 함수
집계 함수 설명 TO_NUMBER(문자열) ‣ 문자열을 숫자로 변환한다. TO_CHAR(숫자 혹은 날짜, [FORMAT]) ‣ 숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환한다. TO_DATE(문자열, [FORMAT]) ‣ 문자열을 지정된 FORMAT의 날짜형으로 변환한다. (2) 명시적 Explicit 형변환 vs 암시적 IMplicit 형변환
명시적 형변환
‣ 형변환 함수를 사용해서 데이터 타입을 일치시키는 것.
‣ 개발자가 SQL을 사용할 때, 형변환 함수를 사용해야 한다.
암시적 형변환
‣ 개발자가 형변환을 하지 않은 경우 데이터베이스 관리 시스템이 자동적으로 형변환하는 것을 의미한다.
728x90인덱스 칼럼에 형변환을 수행하면 인덱스를 사용하지 못한다.
‣ 인덱스는 데이터를 빠르게 조회하기 위해서 인덱스 키를 기준으로 정렬해 놓은 데이터이다.
‣ 인덱스는 기본적으로 변형이라는 것이 발생하면 인덱스를 사용할 수 없다. 물론 예외적인 것도 있다.
‣ 인덱스가 있어도 인덱스 칼럼에 형변환이 발생하면 인덱스를 사용할 수 없다.내장형 함수 BUILT-IN Function
‣ 모든 데이터베이스는 SQL에서 사용할 수 있는 내장형 함수를 가지고 있다.
(1) DUAL 테이블
‣ Oracle 데이터베이스에 의해서 자동으로 생성되는 테이블.
‣ Oracle 데이터베이스 사용자가 임시로 사용할 수 있는 테이블로 내장형 함수를 실행할 때도 사용할 수 있다.
(2) 문자열 함수
문자열 함수 설명 ASCII(문자) ‣ 문자 혹은 숫자를 ASCII 코드값으로 변환한다. CHR/CHAR(ASCII 코드값) ‣ ASCII 코드 값을 문자로 변환한다. (Oracle - CHR / MS-SQL, MySQL - CHAR) SUBSTR(문자열, m, n) ‣ 문자열에서 m번째 위치부터 n개를 자른다. CONCAT(문자열1, 문자열2) ‣ 문자열1번과 문자열2번을 결합한다. LOWER(문자열) ‣ 영문자를 소문자로 변환한다. UPPER(문자열) ‣ 영문자를 대문자로 변환한다. LENGTH/LEN(문자열) ‣ 공백을 포함하여 문자열의 길이를 알려준다. LTRIM(문자열, 지정문자) ‣ 왼쪽에서 지정된 문자를 삭제한다. 지정된 문자를 생략하면 공백을 삭제한다. RTRIM(문자열, 지정문자) ‣ 오른쪽에서 지정된 문자를 삭제한다. 지정된 문자를 생략하면 공백을 삭제한다. TRIM(문자열, 지정된 문자) ‣ 왼쪽 및 오른쪽에서 지정된 문자를 삭제한다. 지정된 문자를 생략하면 공백을 삭제한다. (3) 날짜형 함수
날짜열 함수 설명 SYSDATE ‣ 오늘의 날짜를 날짜 타입으로 알려준다. EXTRACT(YEAR FROM SYSDATE) ‣ 날짜에서 년, 월, 일을 조회한다. (4) 숫자형 함수
숫자형 함수 설명 ABS(숫자) ‣ 절댓값을 돌려준다. SIGN(숫자) ‣ 양수, 음수, 0을 구별한다. MOD(숫자1, 숫자2) ‣ 숫자1을 숫자2로 나누어 나머지를 계산한다. CEIL/CEILING(숫자) ‣ 숫자보다 크거나 같은 최소의 정수를 돌려준다. FLOOR(숫자) ‣ 숫자보다 작거나 같은 최소의 정수를 돌려준다. ROUND(숫자, m) ‣ 소수점 m 자리에서 반올림한다. TRUNC(숫자, m) ‣ 소수저 m 자리에서 절삭한다. DECODE
‣ 특정 조건이 참이면 A, 거짓이면 B로 응답한다.
‣ IF문으로 구현할 수 있다.
ex)
SELECT DECODE (EMPNO, 1000, 'True', 'False')
From EMP;‣ EMP 표에서 EMPNO가 1000이면 True, 아니면 False를 응답한다.
CASE
‣ 여러 조건에 대해 다른 결과 값을 쉽게 반환해준다.
‣ IF ~ THEN ~ ELSE ~ END의 프로그래밍 언어처럼 조건문을 사용할 수 있다.
‣ 조건을 WHEN구에 사용한다.
‣ 해당 조건이 참이면 THEN이 실행되고 거짓이면 ELSE구가 실행된다.
ex)
SELECT CASE
WHEN EMPNO = 1000 THEN 'A'
WHEN EMPNO = 1001 THEN 'B'
ELSE 'C'
END
FROM EMP;‣ EMP 표에서 EMPNO가 1000이면 A, EMPNO가 1001이면 B, 그 외의 경우에는 C로 출력한다.
WITH
‣ 서브쿼리(Subquery)를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문이다.
‣ 옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단한다.
728x90반응형'Study > SQL' 카테고리의 다른 글
[SQLD] SQL 개발자 공부하기 Day 8 : 그룹 함수 (Group Function) (0) 2024.02.23 [SQLD] SQL 개발자 공부하기 Day 7 : SUBQUERY / JOIN / UNION / MINUS (0) 2024.02.22 [SQLD] SQL 개발자 공부하기 Day 5 : SELECT / WHERE / NULL (0) 2024.02.20 [SQLD] SQL 개발자 공부하기 Day 4 : 관계형 데이터베이스 / SQL (0) 2024.02.19 [SQLD] SQL 개발자 공부하기 Day 3 : 데이터 모델링의 이해 오답 노트 (0) 2024.02.18