상세 컨텐츠

본문 제목

[개미의 걸음 SQLD 2과목] SQL종류③ DML(Data Manipulation Language)

자격증/SQLD

by IT개미 데이터 2020. 12. 22. 07:07

본문

728x90

DML[Data Manipulation Language]

데이터를 직접 조작하는 것이 가능해 가장 많이 사용하는 SQL문

 

  * SELECT  : 테이블이나 뷰에서 데이터 조회
  * INSERT  : 데이터 입력
  * UPDATE : 기존에 저장된 데이터 수정
  * DELETE  : 테이블 내의 데이터 삭제[조건에 맞는 데이터만 삭제 가능, 복구 가능]
  * MERGE  : 조건에 따라 INSERT와 UPDATE 수행

 

1. SELECT문

SELECT 칼럼명 FROM 테이블명 WHERE 원하는데이터의 조건 GROUP BY 칼람명 HAVING 조건 ORDER BY 칼람명;
  • 원하는 데이터를 조회할 때 사용
        → 특정 칼럼이나 특정 행만을 조회 가능
  • Oracle 데이터베이스는 정렬을 위해 메모리 내부에 할당된 SORT_AREA_SIZE를 사용
        → SORT_AREA_SIZE가 너무 작으면 성능 저하 발생
  • Oracle 데이터베이스가 받는 부하를 줄이기 위해 정렬을 회피하고 싶을경우는 Index를 사용
        → "SELECT /*+ INDEX_DESC(A) */"를 사용할 경우 생성된 인덱스를 내림차순으로 정렬
        → 인덱스를 스캔한 후 해당 행을 찾으면 출력
  • "SELECT DISTINCT 칼럼명 FROM 테이블명;"를 사용하면 중복된 데이터 한 번만 조회 가능
  • 테이블명이나 칼럼명이 너무 길때는 Alias(별칭)을 사용 가능
  • GROUP BY절은 테이블의 소규모 행들을 그룹화하여 HAVING 조건에 맞는 데이터 조회
  • ORDER BY를 함께 사용할 경우 조회된 데이터를 오름차순[ASC] 혹은 내림차순[DESC]으로 정렬 가능
        → 조회된 데이터를 출력해주기 전 정렬해서 사용자가 보기 용이하게 정렬해서 출력
        → 대량의 데이터 정렬시 데이터베이스 메모리 사용량이 증가해 성능 저하 발생
        → 생략시 오름차순 정렬
  • ORDER BY절에서 CASE WHEN구문 사용하면 사용자가 원하는 순서대로 정렬가능
        → CASE WHEN구문 사용시 일반적으로 숫자 내림차순대로 정렬
        → "CASE WHEN 조건 THEN 결과"를 이용해 결과값에 원하는 숫자 기입
  • SELECT문은 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 순으로 실행

2020/10/06 - [데이터베이스] - [개미의 걸음 SQL 6차시] 데이터 조회 : SELECT문

 

2.INSERT문

INSERT INTO 테이블명 (COLUMN1, COLUMN2....) VALUES (COLUMN1_VALUE, VOLUMN2_VALUE....);
INSERT INTO 테이블명 VALUES (전체 COLUMN에 넣을 VALUE1,....);
INSERT INTO 테이블명 SELECT 가져올데이터 FROM 데이터를가져올테이블명;
  • 모든 칼럼에 데이터를 입력할 때 사용
        → 정의하지 않은 칼럼은 Default로 NULL값이 입력됨
        → Primary Key나 Not NULL로 지정된 칼럼은 NULL이 허용되지 않음 
  • 특정 테이블의 모든 칼럼에 데이터를 삽입할 때는 칼럼명 생략 가능
  • 문자열 데이터를 입력할 때에는 작은타옴표[' ']를 사용
  • INSERT문을 실행해도 데이터 파일에 저장되지 않음
        → 최종적으로 데이터 파일에 저장하려면 TCL문인 Commit명령 실행
        → Auto Commit(Set auto commit on)으로 설정된 경우, Commit을 실행하지 않아도 자동 저장
  • SELECT문을 사용하면 기존에 있는 데이터를 조회해서 가져올 수 있음
  • Nologging옵션을 사용하면 로그파일의 기록을 최소화시켜 입력시 성능을 향상시킬 수 있음
        → 데이터베이스에 데이터를 입력하면 Log File에 그 정보를 기록
        → Check Point라는 이벤트가 발생하면 로그파일의 데이터를 데이터 파일에 저장
        → Nologging옵션은 Buffer Cashe라는 메모리 영역을 생략하고 기록
  • ORACLE에서 "INSERT INTO 테이블명 VALUES ('777','');"입력시 ''는 NULL로 입력
        → "SELECT * FROM 테이블명 WHERE 칼럼명2 IS NULL;"로 입력해야 조회됨
  • SQL SERVER에서 "INSERT INTO 테이블명 VALUES ('777','');"입력시 ''는 공집합으로 입력
        → "SELECT * FROM 테이블명 WHERE 칼럼명2 ='';"로 입력해야 조회됨[''로 조회]

 

3. UPDATE문

UPDATE 테이블명 SET 수정되야 할 칼럼명 = 수정되기 원하는 새로운 값;
  • 입력된 데이터 값을 수정할 때 사용
  • 조건문을 사용하여 원하는 행의 데이터 수정
        → 조건문을 입력하지 않을 경우, 모든 데이터가 수정됨

 

4. DELETE문

DELETE FROM 삭제하고 싶은 테이블명;
DELETE FROM 삭제하고 싶은 테이블명 WHERE 삭제하고 싶은 테이블명=삭제할값;
  • 입력된 데이터 값을 삭제할 때 사용
  • DELETE 와 FROM사이에 다른 문법이 들어가면 안됨!!
        → "DELETE 칼럼명 FROM 테이블명"은 문법에 어긋남!!!!
  • 조건문을 사용하여 원하는 행의 데이터 삭제
        → 조건문을 입력하지 않을 경우, 모든 데이터가 삭제됨
  • DELETE FROM문으로 데이터를 삭제해도 테이블의 용량이 초기화되지 않음![로그 기록이 남음]
        → "TRUNCATE TABLE 테이블명;"을 사용하면 데이터가 삭제되면서 테이블의 용량도 초기화됨!
        → 테이블 구조도 완전히 삭제하기 위해서는 "DROP TABLE 테이블명;" 사용
DELETE FROM TRUNCATE DROP
DML DDL(일부 DML 성격을 가짐) DDL
Commit이전 ROLLBACK 가능 ROLLBACK 불가능 ROLLBACK불가능
사용자 Commit Auto Commit Auto Commit
데이터만 삭제
로그 기록 남음
테이블 구조 유지
데이터 삭제
로그 기록 삭제[용량 초기화]
테이블 구조 유지
데이터 삭제
로그 기록 삭제
테이블 구조 삭제

※ TRUNCATE는 UNDO를 위한 데이터를 생성하지 않으므로 동일 데이터량 삭제시 DELETE보다 빠름

 

 

 

 

 

728x90

관련글 더보기

댓글 영역