POINT4. DML (Data Manipulation Language)
- INSERT 문
INSERT 문은 테이블에 데이터를 입력하는 DML문이다.
- 데이터를 입력할 때 문자열을 입력하는 경우 작은따옴표를 사용
- 만약 특정 테이블의 모든 칼럼에 데이터를 삽입하는 경우, 칼럼명을 생략할 수 있다.
- INSERT 문을 실행했다고 데이터 파일에 저장되는것이 아니다. 최종적으로 데이터를 저장하려면 TCL 문인 Commit 을 실행해야함
- 만약 Auto Commit 으로 설정된 경우 Commit 을 실행하지 않아도 바로 저장된다.
SELECT문으로 입력
- SELECT 문을 사용해서 데이터를 조회해서 해당 테이블에 바로 삽입할 수 있다.
- 단, 입력되는 테이블은 사전에 생성되어 있어야 한다.
Nologging 사용
- 데이터베이스에 데이터를 입력하며녀 로그파일에 그 정보를 기록한다.
- check point 라는 이벤트가 발생하면 로그파일의 데이터를 데이터파일에 저장한다.
- nologging 옵션은 로그파일의 기록을 최소화시켜서 입력 시 성능을 향상시키는 방법이다.
- nologging 옵션은 buffer cache라는 메모리 영역을 생략하고 기록한다.
- UPDATE문
- 입력된 데이터 값을 수정하려면 UPDATE 문을 사용한다.
- UPDATE 문을 사용하여 원하는 조건으로 데이터를 검색해서 해당 데이터를 수정할 수 있다.
- 만약 UPDATE 문에 조건문을 입력하지 않으면 모든 데이터가 수정됨
-> EMP 테이블에서 EMPNO가 100번인 칼럼의 ENAME 값을 '조조' 로 변경한다.
만약 EMPNO가 100 인 칼럼이 2개라면 2개 모두 ENAME 이 변경됨
- DELETE문
- DELETE 문은 원하는 조건을 검색해서 해당되는 행을 삭제한다.
- DELETE문에 조건문을 입력하지 않으면 모든 데이터가 삭제된다.
- DELETE 문으로 데이터를 삭제한다고 해서 테이블의 용량이 초기화되지는 않는다.
-> EMP테이블에서 EMPNO가 100인 LOW를 삭제한다.
만약 WHERE 을 입력하지 않으면 EMP 테이블의 모든 데이터가 삭제된다.
테이블에서 모든 데이터 삭제
- DELETE FROM 테이블명;
테이블의 모든 데이터를 삭제한다.
데이터가 삭제되어도 테이블의 용량은 감소하지 않음.
- TRUNCATE TABLE 테이블명;
테이블의 모든 데이터를 삭제한다.
데이터가 삭제되면 테이블의 용량은 초기화됨.
- SELECT문
- SELECT문 사용
테이블에 입력된 데이터를 조회하기 위해서 SELECT문을 사용한다.
위 SELECT문에서 EMP 테이블의 모든 칼럼'*' 을 출력한다.
단 WHERE 절에 있는 조건문에 있는 행만 조회한다.
SELECT 문법
SELECT문 문법 | 설명 |
SELECT * | - 모든 칼럼을 출력한다. - '*' 는 모든 칼럼을 의미한다. |
FROM EMP | - FROM절에는 테이블명을 쓴다. - 즉, EMP 테이블을 지정했다. |
WHERE 사원번호 = 1000; | - EMP 테이블에서 사원번호가 1000번인 행을 조회한다. - 즉, 조건문을 지정한다. |
SELECT 칼럼 지정
사용 예제 | 설명 |
SELECT EMPNO, ENAME FROM EMP; | EMP테이블의 모든 행에서 EMPNO와 ENAME칼럼만 출력한다. |
SELECT * FROM EMP; | EMP테이블의 모든 칼럼과 모든 행을 조회한다. |
SELECT ENAME || '님' FROM EMP; | - EMP 테이브르이 모든 행에서 EMPNO와 ENAME 칼럼만 출력한다. - EMP 테이블의 모든 칼럼과 모든 행을 조회한다. - 예를 들어 임베스트 님이라고 출력된다. |
- Order by 를 사용한 정렬
- SELECT 문을 사용할 때 Order by를 같이 사용할 수 있다.
- Order by는 데이터를 오름차순(Ascending) 혹은 내림차순(Descending)으로 출력한다.
- Order by가 정렬을 하는 시점은 모든 실행이 끝난 후에 데이터를 출력해 주기 바로 전이다.
- Order by는 정렬을 하기 대문에 db메모리를 많이 사용하게 된다. 즉, 대량의 데이터를 정렬하게 되면 정렬로 인한 성능 저하가 발생한다.
- Oracle db는 정렬을 위해서 메모리 내부에 할당된 SORT_AREA_SIZE 를 사용한다. 만약 SORT_AREA_SIZE가 너무 작으면 성능 저하가 발생한다.
- 정렬을 회피하기 위해서 인덱스를 생성할때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야 한다.
- 특별한 지정이 없으면 Order by는 오름차순으로 정렬한다.
- ENAME 부분은 ENAME ASC와 같다. 기본적으로 오름차순과 내림차순을 지정하지 않으면 오름차순으로 정렬한다.
- ENAME으로 오름차순 정렬하고 SAL로 내림차순 정렬한다.
- 내림차순으로 정렬하고 싶을 때는 'DESC'를 사용한다.
- Index를 사용한 정렬 회피
- 정렬은 Oracle db에 부하를 주므로, 인덱스를 사용해서 Order by를 회피할 수 있다.
전체조회하게되면 empno로 오름차순 정렬되어서 조회되는데 그 이유는 empno가 기본키이기 때문에 자동으로 오름차순 인덱스가 생성된다.
- 위의 예를 보면 힌트를 사용한건데, 그로 인해 emp 테이블에 생성된 인덱스를 내림차순으로 읽게 지정한 것
- 인덱스를 스캔한 후 해당 empno의 값을 가지고 테이블의 데이터를 읽는다.
- 테이블에서 해당 행을 찾으면 인출하여 사용자 화면에 조회된다.
- Distinct 와 Alias
Distinct
- distinct문은 칼럼명 앞에 지정하여 중복된 데이터를 한번만 조회하게 한다.
- 중복제거
Alias
- Alias는 테이블명이나 칼럼명이 너무 길어서 간략하게 할때 사용한다.
칼럼명을 '이름'으로 출력하게 함
emp 테이블명 대신 a 를 사용
여기까지
'파이썬 > SQLD' 카테고리의 다른 글
[SQLD] 시험준비 3주 2일차 - DML3 (0) | 2022.05.18 |
---|---|
[SQLD] 시험준비 3주 1일차 - DML2 (0) | 2022.05.16 |
[SQLD] 시험준비 2주 4일차 - DDL (0) | 2022.05.11 |
[SQLD] 시험준비 2주 3일차 - SQL 기본 및 활용 - SQL 종류 (0) | 2022.05.10 |
[SQLD] 시험준비 2주 2일차 - SQL 기본 및 활용 - 관계형db (0) | 2022.05.07 |