ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQLD] SQL 개발자 공부하기 Day 6 : GROUP BY / HAVING / 형변환 / 내장형 함수
    Study/SQL 2024. 2. 21. 19:34
    728x90
    반응형
    목차
    1. GROUP BY / HAVING
    2. 형변환 / 내장형 함수

    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
    반응형

    댓글

Designed by Tistory.