데이터 삽입과 변경, 트랜잭션, 조인 질의문, 중첩 질의문, 집합 연산자와 집단 연산자, 순위 계산

단비·2022년 10월 15일
0

SQL 활용

목록 보기
4/4
  • 다양한 Insert 구문
    • 단일행 입력
      • into 생략 가능, 속성을 명시하지 않으면 테이블 생성시 정의한 컬럼순서와 동일한 순서로 입력함

        insert into 테이블명 [속성명1..] values
    • NULL 의 입력
      • 해당 속성값을 모르거나 미확정일 때 사용
      1. 묵시적인 방법
        • insert into 절에 해당 속성명 생략
      2. 명시적인 방법
        • values 절에 있는 속성값에 NULL을 사용
    • 서브 쿼리를 이용한 데이터 삽입
      • 서브쿼리의 결과를 테이블에 삽입함

      • 한 번에 여러 튜플을 넣을 수 있음

        insert into 테이블
        (subquery)
    • 질의 결과 테이블 만들기
      • from 테이블에 조건에 맞는 리스트를 대상테이블로 생성

        select 컬럼리스트 into 대상테이블
        from 테이블 where 조건
    • 테이블 구조의 복사
      • 구조만 복사하고 튜플은 복사하고 싶지 않은 경우

      • where 조건에 항상 거짓이 되는 조건을 기술함

        select * into 대상테이블명
        from 복사할테이블 where 1 > 2
    • 테이블 구조 검색문
      exec sp_help 테이블명
    • values 를 이용한 다중행 입력
      insert into 테이블명 values (속성값들), (속성값들)
  • update 구문
    • 데이터 수정
      • 테이블에 저장된 데이터를 수정하기 위한 조작어

        update 테이블명 set 속성 =[where 조건]
        update 테이블명 set 속성1 =1, 속성2 =2.. [where 조건]
      • 서브쿼리를 이용한 수정

        update 테이블명 set 속성1=(select ~ from ~ where)
        [where 조건]
  • delete 구문

  • 트랜잭션의 개념
    • 트랜잭션이란 논리적 일의 단위
      • 하나의 SQL은 하나의 트랜잭션
    • 트랜잭션의 활용
      • 동시성 제어
        • 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지함
      • 회복
        • 데이터베이스를 갱신하는 도중에 시스템 고장 시에도 데이터베이스의 일관성을 유지함
    • 트랜잭션이 없다면
      • 은행계좌이자증가 만약 일부만 이자가 증가되고 컴퓨터가 다운되면 다중 이자계산이 됨
    • 두 개의 SQL을 모아서 하나의 트랜잭션으로 관리함
  • 트랜잭션의 특성
    • ACID
      • Atomicity : 원자성
        • 한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음
        • DBMS의 회복 모듈은 시스템이 다운되는 경우에 부분적으로 데이터베이스를 갱신한 트랜잭션의 영향을 취소함으로써 트랜잭션의 원자성을 보장함
      • Consistency : 일관성
        • 어떤 트랜잭션이 수행 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에도 데이터베이스는 일관된 상태를 가짐
        • 트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있음
      • Isolation : 격리성(=고립성)
        • 한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를 다른 트랜잭션들이 접근하지 못하도록 해야함.
        • DBMS는 응용들의 요구사항에 따라 다양한 고립수준을 제공함
      • Durability : 영속성
        • 완료된 트랜잭션의 효과는 시스템이 고장난 경우에도 데이터베이스에 반영됨
  • 트랜잭션 제어문(TCL)
    • COMMIT
      • 트랜잭션의 마지막 명령어가 수행되었음을 나타냄
      • COMMIT된 트랜잭션은 철회가 불가함
    • ROLLBACK
      • 트랜잭션의 변경을 취소하고 트랜잭션 종료
    • SAVEPOINT
      • 현재 트랜잭션에서 ROLLBACK 시킬 위치 지정
      • 대규모 트랜잭션에서 오류 발생으로 전체 트랜잭션을 취소 시키는 것이 큰 부담이 될 수 있음
    • 트랜잭션모드
      1. 자동 커밋 트랙잭션

        • 하나의 명령문이 하나의 트랜잭션이 됨
      2. 명시적 트랜잭션

        • begin tran ~ commit tran(또는 rollback tran)으로 이루어짐
      3. 묵시적 트랜잭션

        • 자동 커밋의 반대되는 개념
        • 사용자가 commit tran(또는 rollback tran)을 입력하기 전까지 복수개의 명령문을 하나의 트랜잭션으로 간주함
        • begin tran이 필요없음
        set implicit transactions {on|off}
    • savepoint
      • 트랜잭션 내의 savepoint 지정
        - 트랜잭션 내의 저장점명을 다르게 하면 여러 개의 savepoint를 지정할 수 있음

        save tran 저장점명
      • 저장점 위치로 취소


  • 조인
    • 하나의 SQL질의문에 의해서 여러 테이블에 저장된 데이터를 한 번에 조회할 수 있는 기능
    • 두 개 이상의 테이블을 결합한다는 의미
  • 간단한 조인
    • SQL에서 간단한 조인 표기법
      • from 절에 조인에 참여하는 두 테이블을 기록함 [콤마(,)로 구분함]
      • where 절에 조인 조건을 기술함
    • 조인문 작성 시 유의 사항
      • 테이블 별명
        • from 테이블 별명 으로 정의 가능
        • 해당 SQL 에서만 유효한 별명임
  • 다양한 조인
    • 카티샨 프로덕트
      • 두 테이블에 속한 튜플들의 모든 가능한 쌍을 생성함
        • 일반적인 방법
          • from절에 두 개 이상의 테이블명을 기록함
          • where 절에는 조인 조건을 기술하지 아니함
    • 쎄타 조인
      • <, >, <=, >=, !=, between, and

        ex)
        select e1.ename from employee e1, employee e2
        where e1.salary > e2.salary
    • ANSI 조인
      • left outer join : 왼쪽 테이블에 있는 튜플들이 나옴
      • right outer join : 오른쪽 테이블에 있는 튜플들이 나옴
      • full outer join : 양쪽 테이블에 있는 튜플들이 나옴

  • 중첩 질의문
    • 하나의 SQL 문의 결과를 다른 SQL문에 전달함
    • 두 개의 SQL문을 하나의 SQL로 처리함
    • 조인 구문과 표현 능력이 동일함
  • 단일행 서브 쿼리와 다중행 서브 쿼리
    • 단일행 서브 쿼리 (비교연산가능)
      • 서브쿼리의 결과로 하나의 튜플만이 반환됨
      • 서브 쿼리의 검색 조건이 후보키에 연관되어 있을 경우가 많음
    • 다중행 서브 쿼리 (비교연산불가)
      • 서브 쿼리의 결과로 여러 개의 튜플들이 반환됨
      • 가능한 비교 연산자
        • in
          • 속성값이 여러 값들 중 하나이기만 하면 참
          • =or 의 의미
        • any 또는 some
          • 메인 쿼리 비교 조건에서 서브쿼리의 결과와 하나라도 일치하면 참
          • in 과의 차이점은 >, >=, <=, <과 같은 범위 비교와도 같이 사용가능함
          • in과 같은 의미
        • all
          • 메인 쿼리리 비교 조건에서 서브쿼리의 결과와 모두 일치하면 참
        • exist or not exitst
          • 서브 쿼리의 결과가 하나라도 존재하면 참이 되는 연산자
  • 다중 컬럼 서브쿼리
    • 서브 쿼리의 결과가 여러 개의 속성들로 구성되어 주쿼리의 조건과 비교하는 서브 쿼리

    • 개별적으로 비교한 뒤 and 연산을 이용해 최종 결과를 출력함

      ex)
      where dno in (select dno from employee where eno = 101)
      and salary in (select salary from employee where eno = 101)
  • 상호 연관 서브 쿼리
    • 비상호 연관 서브쿼리
      • 메인 쿼리와 서브쿼리가 연관이 없음
    • 상호 연관 서브쿼리
      • 메인 쿼리절과 서브쿼리 간에 검색 결과를 교환하는 서브쿼리

      • 서브쿼리의 where 절에 메인 쿼리의 테이블과 연결함

        where table1.속성 비교연산자 (select 속성리스트 
        													from table2 
        													where table2.속성 비교연산자 table1 속성)
  • 중첩 질의문 작성 시 주의점
    • 다중행 서브 쿼리 시 단일행 비교 연산자와 사용하는 경우
      • 중첩 질의문 사용 시 오류가 없도록 in, any, all을 기본적으로 사용함
      • 서브 쿼리 내에서는 order by절을 사용하면 안됨
      • 서브 쿼리의 결과가 null일 경우 메인 쿼리 결과 또한 null임(메인 쿼리 결과값을 원하면 no exists 를 사용)

  • 집합 연산자
    • 테이블을 구성하는 튜플 집합에 대한 테이블의 부분 집합을 결과로 반환하는 연산자
    • UNION : 합집합
      • UNION ALL
        • 집합 연산자를 대상 테이블을 집합으로 봄(결과도 집합이므로 중복을 허용하지않음). 중복된 결과를 보고싶을때 사용
    • INTERSECT : 교집합
    • EXCEPT : 차집합
  • 외부 합집합
    • 합병 호환성
      • 차수(속서의 수)가 같아야함
      • 대응되는 속성 쌍 별로 타입, 의미가 같아야함
      • NULL은 모든 속성에서 사용할 수 있는 속성값
  • 집단 함수
    • 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 그룹화하여 해당 그룹 별 통계값을 출력하는 함수
    • 종류
      1. SUM : 합계
      2. AVG : 평균
      3. COUNT : 개수
        • COUNT(속성명) : 속성값이 null이 아닌 속성값의 개수
        • COUNT(DISTINCT 속성명) : 속성값이 null이 아니며 중복이 되지 않는 속성값의 개수
      4. MAX : 최대값
      5. MIN : 최소값
      6. STDEV : 표준편차
      7. VAR : 분산
        • 각 값이 평균과 얼마나 떨어져있는지
        • 각 값과 평균 차에 대한 차(편차)의 제곱의 평균
  • GROUP BY와 HAVING
    • group by
      • 특정 속성을 기준으로 테이블 전체를 그룹으로 나누기 위한 절

      • select 절에는 집단연산자나 group by에 사용한 속성명만을 사용할 수 있음

        select~from~where~group by 속성명
        select~from~where~group by 속성명1, 속성명2,...
    • having
      • 각 그룹에 대한 제약 조건을 기술할 때 사용

      • group by의 종속절이므로 group by없이는 사용 불가

        select~from~where~group by 속성명 having 조건
  • ROLLUP과 CUBE
    • rollup
      • group by절에서 그룹핑 후 각 그룹에 대한 부분합을 구하는 연산자

        (group by절에 n개의 속성명이 있으면 n+1개의 그룹핑 조합이 나옴)
        select~from~where~group by 속성명 with rollup
    • cube
      • group by절에서 그룹핑 후 각 그룹의 조합에 따른 부분합을 구하는 연산자

        (group by절에 n개의 속성명이 있으면 2n개의 그룹핑 조합이 나옴)
        select~from~where~group by 속성명 with cube
    • grouping sets 함수
      • 여러 개의 group 조건을 표시하고 싶은 경우

  • TOP() 함수
    • 질의 결과는 ORDER BY절을 이용하여 정렬할 수 있음

    • ORDER BY 정렬 기준에서 특정 등수 / 비율까지만 보고 싶은 경우

      select top(n) 속성명
      ..
      order by 속성명
    • 동률이 있을 때 모두 보고싶은 경우

      select top(n) with ties 속성명
      ..
      order by 속성명
    • 정렬 기준 특정 비율까지만 보고싶은 경우
      - 상위 n%까지만 출력

      select top(n) percent [with ties] 속성명
      ...
      order by 속성명
  • RANK() 함수
    • 각 튜플에 등수를 표시함

      rank 함수 over (order by 속성명 [asc|desc])
    • 동률에 대하여 동일 등수 배정

      • 비연속식 등수 배정

        select 속성명, rank() over(order by 속성명 [asc|desc])
      • 연속식 등수 배정

        select 속성명, dense_rank() over(order by 속성명 [asc|desc])
    • 동률에 대하여 임의 등수 배정
      - ROW_NUMBER() 함수

      select 속성명, ROW_NUMBER() over(order by 속성명)
    • 전체 튜플을 n개로 균등 분할하여 순위 지정

      select 속성명, NTILE(n) over(order by 속성명)
  • 그룹 별 순위 지정
    • PARTITION BY 속성명
      - 튜플들을 속성값에 따라서 그룹핑함
      - 각 그룹에 대하여 순위 함수를 적용함

      rank() over (partition by 속성명1 order by 속성명2 [asc|desc])
      # 속성명1 대로 분류하고 그 내에서 속성명2 기준 오름차순,내림차순 정렬
    • 그룹별 특정 등수의 정보를 보고 싶은 경우
      - where 절을 같이 활용

      rank() over (partition by 속성명1 order by 속성명2 [asc|desc]) as 속성명
      ..
      where 속성명 = 등수
  • 그룹 별 집단 함수
    • 그룹 별 집단 함수의 적용

      select 집단함수 ~ group by ~
      select 집단함수() over(partition by 속성명)
  • 행 순서 함수
    • 정렬된 대상에서 특정 순위의 튜플들을 추출할 필요가 있을 때 사용
    1. FIRST_VALUE 함수
    2. LAG / LEAD 함수
      • 정렬 기준 선행값 / 후행값
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글