Insert문
1. Insert문
- INSERT문은 테이블에 데이터를 입력하는 DML문이다.
- INSERT문
INSERT INTO TABLE (COLUMN1, COLUMN2,....) VALUSES(EXPRESSION1, EXPRESSION2,..);
- EMP 테이블에 데이터를 삽입하려면 테이블명, 칼럼명, 데이터 순으로 입력하면 됨
INSERT INTO EMP(EMPNO, ENAME) VALUES(1000, '임베스트');
- 데이터를 입력할 때 문자열을 입력하는 경우에는 작은 따옴표(' ')를 사용해야 함
- 만약 특정 테이블의 모든 칼럼에 대한 데이터를 삽입하는 경우에는 칼럼명을 생략할 수 있음
- 모든 칼럼의 데이터를 입력함
INSERT INTO EMP VALUES(1000, '임베스트');
- 위 예처럼 칼렴명을 생략할수 있음, 단 위의 예제에서 EMP 테이블의 칼럼은 숫자형 데이터 타입 한 개의 칼럼과
문자형 데이터 타입 한 개의 칼럼만 있어야 함
- 주의 사항은 INSERT문을 실행했다고 데이터 파일에 저장되는 것은 아님
최종적으로 데이터를 저장하려면 TCL문인 Commit을 실행해야 함
- 만약 Auto Commit(Set auto commit on)으로 설정된 경우에는 Commit을 실행하지 않아도 바로 저장됨
2. SELECT문으로 입력
- SELECT문을 사용하여 데이터를 조회해서 해당 테이블에 바로 삽입할수 있음
- 단, 입력되는 테이블은 사전에 생성되어 있어야함
INSERT INTO DEPT_TEST
SELECT * FROM DEPT;
3. Nologging 사용
- 데이터베이스에 데이터를 입력하면 로그파일(Log file)에 그 정보를 기록함
- Check point라는 이벤트가 발생하면 로그파일의 데이터를 데이터 파일에 저장함
- Nologging 옵션은 로그파일의 기록을 최소화시켜서 입력 시 성능을 향상시키는 방법
- Nologging 옵션은 Buffer Cache라는 메모리 영역을 생략하고 기록
ALTER TABLE DEPT NOLOGGING;
2. UPDATE문
- 입력된 데이터의 값을 수정하려면, UPDATE문을 사용
- UPDATE문을 사용하여 원하는 조건으로 데이털르 검색해서 해당 데이터를 수정
- 만약, UPDATE문에 조건문을 입력하지 않으면 모든 데이터가 수정되므로 유의
UPDATE EMP
SET ENAME = '조조'
WHERE EMPNO = 100;
- UPDATE문에서 주의사항은 데이터를 수정할 떄 조건절에서 검색되는 행 수만큼 수정된다는 것
- 위의 예에서 EMPNO가 100번인 직원이 두명이라면 두명의 ENAME은 모두 '조조'로 수정됨
3. DELETE문
- DELETE문은 원하는 조건을 검색해서 해당되는 행을 삭제
- DELETE문에 조건문을 입력하지 않으면 모든 데이터가 삭제,테이블에 있는 모든 데이터가 삭제됨
- DELETE문으로 데이터를 삭제한다고 해서 테이블의 용량이 초기화되지는 않음
DELETE FROM EMP
WHERE EMPNO = 100;
- 만약 위의 예에서 WHERE절(조건)을 입력하지 않으면 EMP 테이블의 모든 데이터가 삭제 됨
TIP : 테이블 용량이 초기화되지 않는다는 의미
- Oracle 데이터베이스는 저장공간을 할당할 때 Extent 단위로 할당
- 테이블에 데이터가 입력되면 Extent에 저장하게 됨
- 만약 Extent의 크기가 MAX_EXTENTS를 넘어서게 되면 용량 초과 오류가 발생 즉, 최대로 저장할 수 있는 공간의 의미
- DELETE문으로 데이터를 삭제하면 용량이 감소할 것으로 생각하는데
DELETE문은 삭제 여부만 표시하고 용량은 초기화되지 않음
SELECT TABLE_NAME, MAX EXTENTS
FROM USER_TABLES;
테이블의 모든 데이터 삭제
DELETE FROM 테이블명;
- 데이블의 모든 데이터를 살제
- 데이터가 삭제되어도 테이블의 용량은 감소하지 않음
TRUNCATE TABLE 테이블명;
- 테이블의 모든 데이터를 삭제
- 데이터가 삭제되면 테이블의 용량은 초기화됨
- 'TRUNCATE TABLE EMP;'는 EMP 테이블의 모든 데이터를 삭제하면서 테이블의 용량이 초기화 됨
4. SELECT문
1. SELECT문 사용
- 테이블에 입력된 데이터를 조회하기 위해서 SELECT문을 사용
- SELECT문은 특정 칼럼이나 특정 행만을 조회
SELECT * FROM EMP
WHERE 사원번호=1000;
- 위의 SELECT문에서 EMP 테이블의 모든 칼럼 '*'을 출력함
- 단, WHERE절에 있는 조건문에 있는 행만 조회
SELECET문법
SELECT *
FROM EMP
- FROM절에는 테이블명을 쓴다
- 즉, EMP테이블을 지정
WHERE 사원번호=1000;
- EMP 테이블에서 사원번호가 1000번인 행을 조회
- 조건문을 지정
SELECT 칼럼 지정
SELECT EMPNO, ENAME FROM EMP;
- EMP 테이블의 모든 행에서 EMPNO와 ENAME칼럼만 출력
SELECT * FROM EMP;
SELECT ENAME || '님' FROM EMP;
- EMP 테이블의 모든 행에서 ENAME 칼럼을 조회
- 단, ENAME 칼럼 뒤에 '님'이라는 문자를 결합
- 예를 들어 임베스트 님 이라고 출력됨
2. Order by를 사용한 정렬
- SELECT문을 사용할 때 Order by를 같이 사용할수 있음
- Order by는 데이터를 오름차순(Ascending) 혹은 내림차순(Descending)으로 출력
- Order by가 정렬을 하는 시점은 모든 실행이 끝난 후에 데이터를 출력해 주기 바로 전
- Order by는 정렬을 하기 때문에 데이터베이스 메모리를 많이 사용하게 됨
즉 대량의 데이터를 정렬하게 되면 정렬로 인한 성능 저하가 발생
- Oracle 데이터베이스는 정렬을 위해서 메모리 내부에 할당된 SORT AREA_SIZE를 사용
만약 SORT_AREA_SIZE가 너무 작으면 성능저하 발생
- 정렬을 회피하기 위해서 인덱스(Index)를 생성할 때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성
- 특별한 지정이 없으면 Order by는 오름차순으로 정렬
SELECT * FR0M EMP
ORDER BY ENAME, SAL DESC;
- ENAME 부분은 ENAME ASC와 같음
기본적으로 오름차순과 내림차순을 지정하지 않으면 오름차순으로 정렬
- 내림차순으로 정려라고 싶을 때는 'DESC'를 사용
3. Index를 사용한 정렬 회피
- 정렬은 Oracle 데이터베이스에 부하를 주므로, 인덱스를 사용해서 Order by를 회피할 수 있음
정렬 테스트 데이터 입력
create table emp(
empno number(10) primary key,
ename varchar2(20),
sal number(10)
);
insert into emp values(1000, '임베스트', 20000);
insert into emp values(1001, '조조', 20000);
insert into emp values(1002, '관우', 20000);
- 위와 같이 데이터를 입력하고 SELECT문을 실행하면 EMPNO로 오름차순 정렬되어 조회됨
- 그 이유는 EMPNO가 기본키이기 때문에 자동으로 오름차순 인덱스가 생성
SELECT
FROM EMP A;
- 위의 예를 보면 '/+ INDEX_DESC(A) /'를 사용
즉 힌트를 사용한 것
EMP 테이블에 생성된 인덱스를 내림차순으로 읽게 지정한것
- SELECT문에 'ORDER BY EMPNO DESC'를 사용하지 않음
- 위의 예처럼 SQL문을 사용하면 EMPNO 인덱스를 내림차순으로 읽음
- 인덱스를 스캔한 후에 해당 EMPNO의 값을 가지고 테이블의 데이터를 읽음
- 테이블에서 해당 행을 찾으면 인출하여 사용자 화면에 조회
4. Distinct와 Alias
1. Distinct
- Distinct문은 칼럼명 앞에 지정하여 중복된 데이터를 한 번만 조회하게 함
SELECT DEPTNO FROM EMP ORDER BY DEPTNO;
- 위의 예는 EMP 테이블의 DEPTNO 칼럼을 조회한 것
- 조회내용을 보면 DEPTNO가 중복으로 지정되어 있는 것을 확인할 수 있음
SELECT DISTINCT DEPTNO FROM EMP
ORDER BY DEPTNO;
- Distinct를 사용하면 DEPTNO 값이 중복되지 않음
2. Alias
- Alias(별칭)은 테이블명이나 칼럼명이 너무 길어서 간략하게 할 때 사용
SELECT ENAME AS "이름" FROM EMP a;
WHERE a.EMPNO=1000;
SELECT ENAME AS "이름"
FROM EMP a;
WHERE a.EMPNO=1000;