정보처리기사 실기 DML-SELECT2 (16)

미룬이·2024년 7월 25일
0

정보처리기사 실기

목록 보기
16/30

!주의! : 이 게시물은 정보성 게시물이 아닌 개인 공부 복기용 게시물 입니다. 정확하지 않을 수 있습니다.



🤗훈수는 언제나 환영입니다🤗


SQL응용 DML-SELECT2


HAVING절

  • GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정함

그룹 함수

  • GROUP BY절에 지정된 그룹별로 속성의 값을 집계할 때 사용된다.
  • COUNT(속성명) : 그룹별 튜플 수를 구하는 함수
  • SUM(속성명) : 그룹별 합계를 구하는 함수
  • AVG(속성명) : 그룹별 평균을 구하는 함수
  • MAX(속성명) : 그룹별 최대값 구하는 함수
  • MIN(속성명) : 그룹별 최소값 구하는 함수
  • STDDEV(속성명) : 그룹별 표준편차를 구하는 함수
  • VARIANCE(속성명) : 그룹별 분산을 구하는 함수
  • ROLLUP(속성명) : 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수 속성의 개수가 n개이면 n+1 레벨까지, 하위 레벨에서 상위 레벨순으로 데이터가 집계됨
  • CUBE(속성명) : ROLLUP과 유사한 형태지만 CUBE는 인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구함

그룹 지정 검색

  • GROUP BY 절에 지정한 속성을 기준으로 자료를 그룹화하여 검색한다
  • 예) <상여금> 테이블에서 '부서'별 '상여금'의 평균을 구하시오
SELECT 부서, AVG(상여금) AS 평균
    FROM 상여금
    GROUP BY 부서;
  • 예) <상여금>테이블에서 부서별 튜플 수를 검색하시오
SELECT 부서, COUNT(*) AS 사원수
    FROM 상여금
    GROUP BY 부서;
  • 예) <상여금>테이블에서 '상여금'이 100이상인 사원이 2명 이상인 '부서'의 튜플 수를 구하시오
SELECT 부서 COUNT(*) AS 사원수
    FROM 상여금
    WHERE 상여금 >= 100
    GROUP BY 부서
    HAING COUNT(*) >= 2;
  • 예) <상여금> 테이블의 '부서, '상여내역' 그리고 '상여금' 에 대해 부서별 상여내역별 소계와 전체 합계를 검색하시오 (단, 속성명은 '상여금합계'로 하고, ROLLUP함수를 사용할 것)
  SELECT 부서, 상여내역, SUM(상여금) AS 상여금 합계
    FROM 상여금
    GROUP BY ROLLUP(부서, 상여내역);
  • 예) <상여금>테이블의 '부서','상여내역', 그리고'상여금'에 대해 부서별 상여내역별 소계와 전체 합계를 검색하시오 (단, 속성명은 '상여금합계'로 하고 CUBE힘수를 사용할 것)
    SELECT 부서, 상여내역, SUM(상여금) AS 상여금 합계
    FROM 상여금
    GROUP BY CUBE(부서, 상여내역);

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

2개 이상의 테이블의 데이터를 하나로 통합함

표기 형식

SELECT 속성명1, 속성명2
FROM 테이블명
UNION | UNION ALL | INTERSECT | EXECPT
SELECT 속성명1, 속성명2
FROM 테이블명
[ORDER BY 속성명[ASC | DESC];
  • 두 개의 SELECT 문에 기술한 속성들은 개수와 데이터 유형이 서로 동일해야 한다.

집합연산자의 종류

  • UNION : 두 SELECT 문의 조회 결과를 통합하여 모두 출력함 중복돤 행은 한 번만 출력함 (합집합)
  • UNION ALL : 두 SELECT 문의 조회 결과를 통합하여 모두 출력함 중복된 행도 그대로 출력함 (합집합)
  • INTERSECT : 두 SELECT문의 조회 결과중 공통된 행만 출력 (교집합)
  • EXCEPT : 첫 번째 SELECT 문의 조회 결과에서 두 번째 SELECT 문의 조회 결과를 제외한 행을 출력함 (차집합)

적용 예시

  • 예) <사원>테이블과 <직원> 테이블을 통합하는 질의문을 작성하시오(단. 같은 레코드가 중복되어 나오지 않게 하시오)
SELECT *
    FROM 사원
    UNION
    SELECT*
    FROM 직원;
  • 예) <사원>테이블과<직원> 테이블에 공통으로 존재하는 레코드만 통합하는 질의문을 작성하시오
    SELECT *
    FROM 사원
    INTERSECT
    SELECT *
    FROM 직원;
profile
미룬이

0개의 댓글