파게로그
DML 본문
INSERT문
기본적인 사용법
INSERT INTO TABLE (COLUMN1, COLUMN2, ...) VALUES (EXPRESSION1, EXPRESSION2, ...)
- SQL에서 문자열은 큰따옴표가 아니라 작은 따옴표로 표현
- 모든 칼럼에 대해서 데이터를 삽입하는 경우에는 칼럼명을 생략할 수 있음
- Auto Commit(SET AUTO COMMIT ON)이 설정되지 않은 경우 TCL문인 COMMIT 이후에야 데이터가 파일에 저장됨
SELECT문을 통한 삽입
INSERT INTO DEPT_COPY
SELECT * FROM DEPT;
- 입력되는 테이블은 사전에 생성되어 있어야 함
NOLOGGING 사용
ALTER TABLE DEPT NOLOGGING;
- 데이터베이스에 데이터를 입력하면 로그 파일에 그 정보가 기록됨
- check point(검사점)라는 이벤트가 발생하면 로그 파일의 데이터를 데이터 파일에 저장함
- NOLOGGING 옵션은 로그파일의 기록을 최소화시켜서 입력 시 성능을 향상시키는 방법
- NOLOGGING 옵션은 Buffer Cache라는 메모리 영역을 생략하고 기록
UPDATE문
기본적인 사용법
UPDATE EMP
SET ENAME = '조조'
WHERE EMPNO = 100;
- 조건문을 입력하지 않으면 모든 데이터가 수정되므로 유의
DELETE문
기본적인 사용법
DELETE FROM EMP
WHERE EMPNO = 100;
- 조건문을 입력하지 않으면 모든 데이터가 삭제되므로 유의
테이블의 모든 데이터 삭제
DELETE FROM EMP; -- 테이블의 용량은 감소하지 않음
TRUNCATE TABLE EMP; -- 테이블의 용량도 초기화됨
- Oracle DB는 저장 공간을 할당할 때, extent 단위로 할당함
- 테이블에 데이터가 입력되면 extent에 저장
- extent의 크기가 MAX_EXTENTS를 넘으면 용량 초과 오류 발생
- DELETE문은 삭제 여부만 표시하고 용량은 초기화되지 않음
SELECT문
기본적인 사용법
SELECT * FROM EMP WHERE EMPNO = 100;
SELECT EMPNO, ENAME FROM EMP; -- 특정 칼럼만 조회
SELECT ENAME || '님' FROM EMP; -- 모든 ENAME 칼럼의 값 뒤에 '님'을 결합
- 조건문을 입력하지 않으면 모든 데이터가 조회되므로 유의
ORDER BY를 사용한 정렬
SELECT * FROM EMP ORDER BY ENAME, SAL DESC;
-- ENAME으로 오름차순 정렬, SAL로 내림차순 정렬
SELECT ename, deptno, sal
FROM emp
ORDER BY 2 asc, 3 desc; -- SELECT절에서 컬럼의 순서
- 정렬 시점은, 모든 실행이 끝난 후 데이터 출력 직전
- 데이터베이스 메모리를 많이 사용하여 성능 저하가 발생할 수 있음
- Oracle DB는 정렬을 위해 메모리 내부에 할당된 SORT_AREA_SIZE를 이용하며, 이것이 너무 작으면 성능 저하 발생
- 정렬을 회피하기 위해서 인덱스를 생성할 때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야 함
- 오름차순은 ASC, 내림차순은 DESC
- 명시하지 않으면 오름차순 정렬
Index를 사용한 정렬 회피
CREATE TABLE EMP (
empno NUMBER(10) PRIMARY KEY,
ename VARCHAR2(20),
sal NUMBER(10)
);
INSERT INTO emp VALUES(3012, '홍길동', 3500);
INSERT INTO emp VALUES(1196, '임꺽정', 2600);
INSERT INTO emp VALUES(1033, '변사또', 4800);
- 정렬은 데이터베이스에 부하를 주기 때문에, 인덱스를 사용해서 ORDER BY를 회피할 수 있다.
- - 위와 같이 데이터 입력 후 SELECT문 실행 시 empno로 오름차순 정렬되어서 조회됨
- empno가 PK이기 때문에 자동으로 오름차순 인덱스가 생성됨
SELECT /*+ INDEX_DESC(A) */ FROM EMP A; -- hint
- EMP 테이블에 생성된 인덱스를 내림차순으로 읽게 지정한 것
- SELECT문에 ORDER BY EMPNO DESC를 사용할 필요 없음
- 첫째, EMPNO 인덱스를 내림차순으로 읽는다.
- 둘째, 인덱스를 스캔한 후에 EMPNO의 값을 가지고 테이블의 데이터를 읽는다.
- 셋째, 테이블에서 해당 행을 찾으면 인출하여 사용자 화면에 조회된다.
DISTINCT
SELECT deptno FROM EMP ORDER BY deptno; -- 10, 20, 20, 30, 30, 30, 30, 40, 50, 50, ...
SELECT DISTINCT deptno FROM EMP ORDER BY deptno; -- 10, 20, 30, 40, 50, ...
- 중복된 데이터를 한 번만 조회하도록 함
- DISTINCT 대신 UNIQUE를 사용할 수 있음
Alias(별칭)
SELECT ename AS "이름" FROM EMP a WHERE a.empno = 1000;
- 테이블명이나 칼럼명이 너무 길어서 간략하게 할 때 사용
- AS는 생략할 수 있음
'콤퓨타 왕기초 > SQLD/JDBC/Oracle DB' 카테고리의 다른 글
GROUP 연산 (0) | 2021.03.17 |
---|---|
WHERE문 사용 (0) | 2021.03.17 |
DDL (0) | 2021.03.16 |
SQL의 종류 (0) | 2021.03.16 |
관계형 데이터베이스(relational database) (0) | 2021.03.16 |
Comments