본문 바로가기
Database & Bigdata/SQLD

[SQLD] SQL 기본 - DML(Data Manipulation Language)

by jionee 2020. 8. 18.
SMALL

<데이터 입력 : INSERT문>

1. INSERT문

- 테이블에 데이터를 입력하는 DML문

INSERT INTO EMP(ENPNO,ENAME) VALUES(1000,'임베스트);

INSERT INTO 테이블명(칼럼명1,칼럼명2,...) VALUES(데이터1,데이터2,...);

* 문자열 사용시 ' ' 사용

* 모든 칼럼에 데이터 삽입시 칼럼명 생략 가능

 

 

2. SELECT문

- 데이터를 조회해서 해당 테이블에 바로 삽입

INSERT INTO DEPT_TEST
SELECT * FROM DEPT; // DEPT 테이블의 모든 데이터를 조회해 DEPT_TEST 테이블에 입력

 

 

3. Nologging 사용

- DB에 데이터를 입력하면 로그 파일에 그 정보가 기록 

- Check point라는 이벤트가 발생하면 로그파일의 데이터를 데이터 파일에 저장

- Nologging 옵션은 로그파일의 기록을 최소화시켜 입력 시 성능을 최소화 시키는 방법 (Buffer Cache 라는 메모리 영역을 생략하고 기록)

ALTER TABLE DEPT NOLOGGING;

 

 

<데이터 수정 : UPDATE문>

-  UPDATE문을 사용해 원하는 조건으로 데이터를 검색해 해당 데이터를 수정함 ( 조건을 입력하지 않으면 모든 데이터가 수정됨 )

UPDATE EMP
	SET ENAME = '조조' // ENAME 칼럼 '조조'로 변경
    WHERE EMPNO = 100; // EMPNO가 100인 경우 수행

 

UPDATE 테이블명 SET 변경할 값 WHERE 조건 값 ;

 

 

 

<데이터 삭제 : DELETE문>

- 원하는 조건을 검색해 해당행 삭제 ( 조건을 입력하지 않으면 모든 데이터가 삭제됨 )
- 용량이 초기화되는것은 아님

DELETE FROM EMP
	WHERE EMPNO = 100; //empno가 100인 데이터 삭제

DELETE  FROM 테이블명;

* DELETE FROM 테이블명 : 테이블의 모든 데이터를 삭제 ( 용량 감소 X )

* TRUNCATE TABLE 테이블명 : 테이블의 모든 데이터를 삭제 ( 용량 초기화 )

 

 

 

<데이터 조회 : SELECT문>

1. SELECT문 사용

SELECT *
FROM EMP
WHERE 사원번호 = 1000;

SELECT 조회할 칼럼 FROM 조회할 테이블 WHERE 조회할 데이터의 조건;

* SELECT ENAME || '님' FROM EMP; : ENAME 칼럼 뒤에 '님'이라는 문자를 결합

 

 

2. Order by를 사용한 정렬

- 가장 늦게 실행됨

- 대량의 데이터를 정렬하게 되면 정렬로 인한 성능 저하가 발생

- Oracle은 데이터베이스 정렬을 위해 메모리 내부에 할당된 SORT_AREA_SIZE를 사용함 (SORT_AREA_SIZE가 너무 작으면 성능저하 발생)

- 정렬 회피를 위해 인덱스를 생성할때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야함

SELECT * FROM EMP
ORDER BY ENAME ASC, SAL DESC; // ename 기준 오름차순, sal 기준 내림차순

ORDER BY 칼럼명 ASC/DESC;

* ASC : 오름차순

* DESC : 내림차순

 

 

3. Index를 사용한 정렬 회피

- 정렬은 Oracle 데이터 베이스에 부하를 주므로, 인덱스를 사용해 Order by를 회피할 수 있다.

SELECT /*+ INDEX_DESC(A) */
FROM EMP A;

SELECT /*+ INDEX_DESC(테이블명 인덱스명) */

FROM 테이블명 ;

* index_asc 힌트 : 인덱스 영역에서 오름차순으로 스캔

* index_desc 힌트 : 인덱스 영역에서 내림차순으로 스캔

 

 

4. Distinct와 Alias

SELECT DISTINCT DEPTNO
FROM EMP
ORDER BY DEPTNO;

DISTINCT 칼럼명 

* 칼럼명 앞에 지정해 중복된 데이터를 한번만 조회하게 한다.

 

 

SELECT ENAME AS "이름" // ename의 별칭을 "이름"으로
FROM EMP a // EMP 테이블의 별칭을 a로
WHERE a.empno = 1000;

칼럼 AS 칼럼 별칭

* 칼럼 뒤에 AS를 붙이고 별칭을 지정한다* 테이블의 경우 띄어쓰기 후 별칭 지정 가능

댓글