SQLD 출제 핵심 요약 2

0

SQLD 요약 정리

목록 보기
8/10

DDL(데이터 정의어)

  • Data Definition Language
    • 데이터의 구조(테이블, 컬럼)를 변경하는데 사용된다.
    • alter를 필두로 사용되는 대부분의 명령어가 DDL이다.
  • create, alter, modify, drop, truncate
  • 테이블에 관련된 명령어이다. 테이블을 생성, 변경, 삭제
  • modify는 컬럼의 특징을 변경시킨다.
  • oracle에서 DDL은 autocommit기능을 실행한다.
  • SQL server에서 DDL은 autocommit기능이 실행되지 않는다.
  • truncate는 숫자함수의 버림과 같이 쓰이므로 헷갈리지 말 것
  • drop, truncate, delete의 비교문제가 출제되기도 한다.
  • drop, truncate는 DDL이므로 oracle에서 auto commit기능이 실행된다.
  • 처리속도도 delete보다 DDL이 빠르다.
  • truncate는 drop & create이다. 실제로 처리할 때 oracle에서도 이렇게 처리한다. 논리적으로는 존재하지만 물리적으로는 존재하지 않는 명령어이다.

DML(데이터 조작어)

  • Data Manipulation Language
    • 스키마 내에서 데이터를 조작하는 일련의 SQL 명령
  • insert, select, update, delete, merge
  • insert 특정 행을 추가한다.
    insert into table(col1, col2, col3) values(val1, val2, val3);
    insert into table values(val1, val2, val3);
  • insert에 컬럼명을 명시할 경우 데이터를 집어넣을 때 명시되지 않은 컬럼은 null값이 들어가므로 not null컬럼에 null값을 넣으려고 하는지 확인해야한다.
  • insert에 컬럼을 명시하지 않으면 모든 컬럼에 순차적으로 데이터를 입력해야한다. 갯수가 정확한지 확인하자.
  • select 특정 행을 조회한다.
  • update 특정 행을 변경한다.(삭제 후 다시 추가한다.)(delete & insert) truncate와 유사하다.
    update table set col='값' where col1='조건';
  • delete 특정 행을 삭제한다.
    delete from table where col='조건';
  • 조건을 넣지 않은 delete문은 모든 데이터를 삭제한다.
  • merge 특정 데이터를 넣을 때 해당 테이블 키값을 기준으로 있으면 update, 없으면 insert를 한다. matched와 같은 명령어가 함께 사용됨.
  • commit, rollback, savepoint와 주로 함께 출제된다.

DCL(데이터 제어어)

  • Data Control Language
  • grant, revoke
  • 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함.
  • grant는 권한을 부여한다.
  • revoke는 권한을 해제한다.
  • role은 객체이다. 권한의 집합이라고 생각하면된다. 여러 권한을 모아놓고 있는 객체 domain과 성격이 유사한듯하다..

TCL(트랜잭션 제어어)

  • Transaction Control Language
  • commit, rollback, savepoint
  • commit으로 변경사항을 저장한다.
  • rollback으로 commit되기 직후 지점까지 되돌린다.
  • savepoint rollback시 저장점을 명시하면 해당 저장 지점까지 돌아간다.
  • DCL에 포함시켜서 보는 경향이 있다.

Transaction

트랜잭션의 특성은 4가지가 있다.

  • 원자성(Atomicity)
    • 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되거나 전혀 실행되지 않은 상태로 남아있어야 한다.(All or Nothing)
  • 일관성(Consistency)
    • 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
  • 고립성(Isolation)
    • 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
  • 지속성(Durability)
    • 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

트랜잭션의 격리 수준은 4가지로 아래와 같다.

  • SERIALIZABLE (직렬화 가능)
  • REPEATABLE READ (반복 가능한 읽기)
  • READ COMMITTED (커밋된 읽기)
  • READ UNCOMITTED (커밋되지 않은 읽기)
  • 아래로 갈 수록 격리수준이 낮아서 데이터부정합 문제가 생길 수 있으나 처리속도는 빨라진다. 즉, 데이터정합성과 성능은 반비례한다.

트랜잭션 격리 수준에 따라 발생할 수 있는 문제점은 3가지로 다음과 같다.

  • 더티 리드(Dirty Read)
    • 더티 리드는 특정 트랜잭션에 의해 데이터가 변경되었으나 아직 커밋되지 않은 상태에서 다른 트랜잭션이 해당 변경 사항을 조회할 수 있는 문제를 말한다.
    • A 트랜잭션이 데이터를 변경하고 commit하지 않았다.
    • B 트랜잭션이 데이터를 조회하였다.
    • rollback하였다.
    • B 트랜잭션이 무효가 된 값을 읽고 처리하므로 문제가 생긴다.
    • 즉, commit하지 않은 데이터를 읽으므로 생기는 문제이다.
  • 반복 불가능한 조회(Non-Repeatable Read)
    • 같은 트랜잭션 내에서 같은 데이터를 여러번 조회했을 때 읽어온 데이터가 다른 경우를 의미한다.
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때 데이터의 값이 다르다.
    • 행의 변경에 관련이 있다.
  • 팬텀 리드(Phantom Read)
    • 팬텀리드는 Non-Repeatable Read의 한 종류로 조회한 결과의 행이 새로 생기거나 없어지는 현상이다.
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때 없던 데이터가 생기거나 있던 데이터가 사라진다.
    • 행의 추가, 삭제와 관련이 있음.

제약조건

  • PK : not null + unique
    • 테이블당 하나의 PK를 가질 수 있음(복합키 가능)
  • not null : 해당 컬럼에 null이 올 수 없음.
  • unique : 해당 컬럼에 중복값이 올 수 없으며 null은 올 수 있다.

VIEW

  • select문을 저장한다는 개념이다.
  • 테이블과는 조금 다르다. 테이블은 데이터를 갖고있다면 view는 select만 가지고 있다.
  • 독립적이고 편의성이 있으며 보안성(보여주고싶지 않은 데이터는 안보여줄 수 있으므로)이 있다.
  • 문제점으로 기준 테이블이 사라지거나 변경되면 쓰지 못하는 경우가 많다.

그룹함수

  • roll up, cube, groupingsets, grouping
  • roll up
    • group by에 있는 컬럼들을 오른쪽에서 왼쪽순으로 그룹 생성
    • a, b로 묶이는 그룹의 값
    • a로 묶이는 그룹의 소계
  • cube
    • a, b로 묶이는 그룹의 값
    • a로 묶이는 그룹의 소계
    • b로 묶이는 그룹의 소계(전체합계)
    • 가장 길다.
  • grouping sets
    • 특정 항목으로 묶이는 그룹의 값이다.
    • a, b를 각각 group by 한 값에 union all을 실행하면 값이 같다.
  • grouping
    • 각각 그룹화한 값에 특정 항목을 붙이고 값이 있으면 1, 없으면 0 을 반환한다.
    • case문과 같이 쓰여 1, 0에 각각 특정 텍스트로 변환하여 사용이 가능하다.

TCL(트랜잭션 제어어)

  • Transaction Control Language
  • Commit : 모든 트랜잭션 변경사항을 저장한다.
  • Rollback : Commit명령어가 실행된 직후 상태로 변경사항을 되돌린다.

윈도우 함수

  • RANK 순위가 중복이면 1,1,3,4형식으로 나타난다.
  • DENSE_RANK 1,1,2,3 형식으로 나타난다.
  • PARTITION BY, ORDER BY
    • 나눠서 집계하고 싶을 때는 PARTITION BY를 사용한다. 결과는 PARTITION BY에 명시된 컬럼을 묶어서 따로 순위를 집계한다.
    • ORDER BY는 오름차순, 내림차순 으로 사용하며 PARTITION BY 뒤에 나올 수 있다.

계층형 함수

  • PRIOR 자식데이터 = 부모데이터
  • START WITH 최상위 행 지정
  • CONNECT BY PRIOR 자식컬럼 = 부모컬럼 : 부모->자식 순방향 전개
  • CONNECT BY PRIOR 부모컬럼 = 자식컬럼 : 자식->부모 역방향 전개

PL/SQL

  • 자주 출제되진 않음.
  • EXCEPTION(생략가능)
  • TRIGGER : COMMIT, ROLLBACK 불가능
    • BEFORE, AFTER별로 INSERT, UPDATE, DELETE가 있음.
    • INSERT AFTER면 해당 값이 들어가고 난 뒤 TRIGGER가 발동한다.
  • FUNCTION은 반드시 반환 값이 있다.
  • PROCEDURE는 반환 값이 없을 수도 있다.

2과목 정리가 끝났다! 내일은 1과목 정리 후 마무리 지으려한다! 2일 남았으니 화이팅이다!!

profile
비전공자 개발초보입니다!

0개의 댓글