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보다 빠름
댓글 영역