All :L

8장 SQL 응용 (DML - SELECT (2/2)) 본문

STUDY/정보처리기사

8장 SQL 응용 (DML - SELECT (2/2))

ofijwe 2023. 4. 16. 15:27
반응형

[DML - SELECT]

💡 SELECT 명령어란?

SELECT

 

: 테이블에서 튜플을 검색하는 명령

📌 일반 형식
SELECT [PREDICATE] [테이블명.]속성명 [AS 별칭][, [테이블명.]속성명, ]
[, 그룹함수(속성명) [AS 별칭]]
[, Window함수 OVER (PRAPRIRION BY 속성명1, 속성명2, 
    ORDER BY 속성명 3, 속성명4, )]
FROM 테이블명[, 테이블명, ]
[WHERE 조건]
[GROUP BY 속성명, 속성명, ]
[HAVING 조건]
[ORDER BY 속성명 [ASC | DESC]];

💡 그룹 지정 검색이란?

그룹 함수

 

: GRUOP BY절에 지정된 그룹별로 속성 값을 집계할 때 사용하는 것

함수 기능
COUNT() 그룹별 튜플 수를 구하는 함수
SUM() 그룹별 합계를 구하는 함수
AVG() 그룹별 평균를 구하는 함수
MAX() 그룹별 최대값를 구하는 함수
MIN() 그룹별 최소값을 구하는 함수
STDDEV() 그룹별 표준편차를 구하는 함수
VARIANCE() 그룹별 분산을 구하는 함수
ROLLUP( , , ) - 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수
- 속성의 개수가 n개이면, n+1 레벨까지, 하위 레벨에서 상위 레벨 순으로 데이터 집계
CUBE( , , ) - 인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구하는 함수
- 속성의 개수가 n개이면, 2^n 레벨까지, 상위 레벨에서 하위 레벨 순으로 데이터 집계

그룹 지정 검색

 

: GRUOP BY절에 지정한 속성을 기준으로 자료를 그룹화하여 검색

  • <상여금> 테이블에서 '부서'별 '상여금'의 평균 구하기
    # 예시 1 👩🏻‍💻
    SELECT 부서, AVG(상여금) AS 평균
    FORM 상여금
    GROUP BY 부서;
  • <상여금> 테이블에서 '상여금'이 100 이상인 사원이 2명 이상인 '부서'의 튜플 수 구하기
    # 예시 1 👩🏻‍💻
    SELECT COUNT(부서)
    FORM 상여금
    WHERE 상여금 >= 100
    GROUP BY 부서
    HAVING COUNT(*) >= 2;
  • <상여금> 테이블의 '부서', '상여내역', 그리고 '상여금'에 대해 부서별 상여내역별 소계와 전체 합계 검색
    # 예시 1 👩🏻‍💻 (ROLLUP 사용)
    SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
    FORM 상여금
    GROUP BY ROLLUP(부서, 상여내역);
    # 예시 2 👩🏻‍💻 (CUBE 사용)
    SELECT 부서, 상여내역, SUM(상여금) AS 상여금합계
    FORM 상여금
    GROUP BY CUBE(부서, 상여내역);

💡 WINDOW 함수 이용 검색이란?

WINDOW 함수

 

: GROUP BY절을 이용하지 않고 함수의 인수로 지정한 속성의 값 집계

  • 함수의 인수로 지정한 속성이 집계할 범위 -> 윈도우
    [WINDOW 함수 종류]
    • ROW_NUMBER() : 윈도우별로 각 레코드에 대한 일련번호 반환
    • RANK() : 윈도우별로 순위를 반환, 공동 순위 반영
    • DENSE_RANK() : 윈도우별로 순위 반환, 공동 순위 반영 X

WINDOW 함수 이용 검색

 

  • <상여금> 테이블에서 '상여내역'별로 '상여금'에 대한 일련 번호 구하기
    # 예시 1 👩🏻‍💻
    SELECT 상여내역, 상여금
      ROW_NUMBER() OVER (PARTITION BY 상여내역 ORDER BY 상여금 DESC) AS NO
    FROM 상여금;
  • <상여금> 테이블에서 '상여내역'별로 '상여금'에 대한 순위 구하기
    # 예시 1 👩🏻‍💻
    SELECT 상여내역, 상여금
      RANK() OVER (PARTITION BY 상여내역 ORDER BY 상여금 DESC) AS 상여금순위
    FROM 상여금;

💡 집합 연산자를 이용한 통합 질의란?

 

: 집합 연산자를 사용하여 2개 이상의 테이블의 데이터를 하나로 통합하는 것

📌 일반 형식
SELECT 속성명1, 속성명2, 
FORM 테이블명
UNION | UNION ALL | INTERSECT | EXCEPT
SELECT 속성명1, 속성명2,
FROM 테이블명
[ORDER BY 속성명 [ASC | DESC]];
  • 집합 연산자의 종류(통합 질의의 종류)
    집합 연산자 설명 집합 종류
    UNION - 두 SELECT문의 조회 결과를 통합해 모두 출력
    -중복된 행은 한번만 출력
    합집합
    UNION ALL - 두 SELECT문의 조회 결과를 통합해 모두 출력
    -중복된 행 모두 출력
    합집합
    INTERSECT - 두 SELECT문의 조회 결과 중 공통된 행만 출력 교집합
    EXCEPT - 첫 번째 SELECT문의 조회 결과에서 두 번째 SELECT문의 조회 결과를 제외한 행 출력 차집합
  • <사원> 테이블과 <직원> 테이블을 통합하는 질의문 작성 (중복 X)
    # 예시 1 👩🏻‍💻
    SELECT *
    FROM 사원
    UNION
    SELECT *
    FROM 사원
  • <사원> 테이블과 <직원> 테이블에 공통으로 존재하는 레코드만 통합하는 질의문 작성
    # 예시 1 👩🏻‍💻
    SELECT *
    FROM 사원
    INTERSECT
    SELECT *
    FORM 직원;
반응형
Comments