파게로그

DML 본문

콤퓨타 왕기초/SQLD/JDBC/Oracle DB

DML

파게 2021. 3. 16. 13:27

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