SQLD - DML (Data Manipulation Language)

헨도·2024년 1월 30일
0

SQLD

목록 보기
15/28
post-thumbnail

DML (Data Manipulation Language)

INSERT 문

  • INSERT 문은 테이블에 데이터를 입력하는 DML 문이다.

INSERT 문 선언

INSERT INTO
	table (column1, column2, ...)
VALUES
	(expression1, expression2, ... );
  • EMP 테이블에 데이터를 삽입하려면 테이블명, 컬럼명, 데이터 순으로 입력하면 된다.

INSERT 문의 구조

INSERT INTO
	(1) EMP (2) (EMPNO, ENAME)
VALUES
	(3) (1000, "임베스트");

(1) 입력을 원하는 테이블명을 지정한다.
(2) 입력을 원하는 컬럼명을 지정한다.
(3) EMP 테이블에 입력되는 데이터이다.
(4) 문자열을 입력하는 경우, ''를 사용해야 한다.

  • 데이터를 입력할 때 문자열을 입력하는 경우에는 작은따옴표(' ')를 사용해야 한다.
  • 만약 특정 테이블의 모든 컬럼에 대한 데이터를 삽입하는 경우에는 컬럼명을 생략할 수 있다.
  • 모든 컬럼에 데이터를 입력한다.
INSERT INTO
	EMP
VALUES
	(1000, "임베스트");
  • 위의 예처럼 컬럼명을 생략할 수 있다. 단, 위의 예제에서 EMP 테이블의 컬럼은 숫자형 데이터 타입 한 개의 컬럼과 문자형 데이터 타입 한 개의 컬럼만 있어야 한다.
  • 주의사항은 INSERT 문을 실행했다고 데이터 파일에 저장되는 것은 아니다.
    최종적으로 데이터를 저장하려면 TCL 문인 Commit 을 실행해야 한다.
  • 만약 Auto Commit(Set auto commit on)으로 설정된 경우에는 Commit을 실행하지 않아도 바로 저장된다.

SELECT 문으로 입력

  • SELECT 문을 사용하여 데이터를 조회해서 해당 테이블에 바로 삽입할 수 있다.
  • 단, 입력되는 테이블은 사전에 생성되어 있어야 한다.
INSERT INTO 
	DEPT_TEST  -> DEPT 테이블의 모든 데이터를 조회해서 DEPT_TEST 테이블에 입력한다.
SELECT * FROM DEPT;

Nologging 사용

  • 데이터베이스에 데이터를 입력하면 로그파일(Log file)에 그 정보를 기록한다.
  • Check point 라는 이벤트가 발생하면 로그파일의 데이터를 데이터 파일에 저장한다.
  • Nologging 옵션은 로그파일의 기록을 최소화시켜서 입력 시 성능을 향상시키는 방법이다.
  • Nologging 옵션은 Buffer Cache 라는 메모리 영역을 생략하고 리고한다.
ALTER TABLE DEPT NOLOGGING;
  • 로그파일의 기록을 최소화하여 입력 성능을 향상시킨다.

UPDATE 문

  • 입력된 데이터의 값을 수정하려면, UPDATE 문을 사용한다.
  • UPDATE 문을 사용하여 원하는 조건을 데이터를 검색해서 해당 데이터를 수정할 수 있다.
  • 만약, UPDATE 문에 조건문을 입력하지 않으면 모든 데이터가 수정되므로 유의해야 한다.
UPDATE (1) EMP
	SET ENAME = (2) "조조"
(3) WHERE
	  EMPNO = 100;

(1) 수정되는 테이블이다.
(2) ENAME 컬럼의 값을 '조조'로 변경한다.
(3) EMP 테이블에서 EMPNO 가 100 번인 직원을 수정한다.

  • UPDATE 문에서 주의사항은 데이터를 수정할 때 조건절에서 검색되는 행 수만큼 수정된다는 것이다.
  • 위의 예에서 EMPNO 가 100 번인 직원이 두 명이라면 두 명의 ENAME 모두 '조조'로 수정된다.

DELETE 문

  • DELETE 문은 원하는 조건을 검색해서 해당되는 행을 삭제한다.
  • DELETE 문에 조건문을 입력하지 않으면 모든 데이터가 삭제된다.
    즉, 테이블에 있는 모든 데이터가 삭제되는 것이다.
  • DELETE 문으로 데이터를 삭제한다고 해서 테이블의 용량이 초기화되지는 않는다.
DELETE FROM EMP
(1) WHERE
	 EMPNO = 100;
  • 만약 위의 예에서 WHERE절(조건)을 입력하지 않으면 EMP 테이블의 모든 데이터가 삭제된다.

테이블의 모든 데이터 삭제

DELETE FROM 테이블명;TRUNCATE TABLE 테이블명;
테이블의 모든 데이터를 삭제한다.테이블의 모든 데이터를 삭제한다.
데이터가 삭제되어도 테이블의 용량은 감소하지 않는다.데이터가 삭제되면 테이블의 용량은 초기화된다.
  • "TRUNCATE TABLE EMP;" 는 EMP 테이블의 모든 데이터를 삭제하면서 테이블의 용량이 초기화 된다.

SELECT 문

SELECT 문 사용

  • 테이블에 입력된 데이터를 조회하기 위해서 SELECT 문을 사용한다.
  • SELECT 문은 특정 컬러밍나 특정 행만을 조회할 수 있다.
SELECT (1) *
(2) FROM EMP
(3) WHERE 사원번호 = 1000;

(1) 조회를 원하는 컬럼을 지정한다.
(2) 조회를 원하는 테이블을 지정한다.
(3) 조회를 원하는 데이터의 조건을 지정한다.

  • 위의 SELECT 문에서 EMP 테이블의 모든 컬럼 '*'을 출력한다.
  • 단, WHERE 절에 있는 조건문에 있는 행만 조회한다.

SELECT 문법

SELECT 문 문법설명
SELECT *모든 컬럼을 출력한다.
'*' 는 모든 컬럼을 의미한다.
FROM EMPFROM 절에는 테이블명을 쓴다.
즉, EMP 테이블을 지정한다.
WHERE 사원번호 = 1000;EMP 테이블에서 사원번호가 1000번인 행을 조회한다.
즉, 조건문을 지정한다.

SELECT 컬럼 지정

사용 예제설명
SELECT EMPNO, ENAME FROM EMP;EMP 테이블의 모든 행에서 EMPNO와 ENAME 컬럼만 출력한다.
SELECT * FROM EMP;EMP 테이블의 모든 컬럼과 모든 행을 조회한다.
SELECT ENAME OR "님" FROM EMP;- EMP 테이블의 모든 행에서 ENAME 컬럼을 조회한다.
- 단, ENAME 컬럼 뒤에 '님'이라는 문자를 결합한다.
- ex) 임베스트 님이라고 출력된다.

ORDER BY를 사용한 정렬

  • SELECT 문을 사용할 때 ORDER BY 를 같이 사용할 수 있다.
  • ORDER BY 는 데이터를 오름차순(Ascending) 혹은 내림차순(Descending)으로 출력한다.
  • ORDER BY 가 정렬을 하는 시점은 모든 실행이 끝난 후에 데이터를 출력해주기 바로 전이다.
  • ORDER BY 는 정렬을 하기 때문에 데이터베이스 메모리를 많이 사용하게 된다.
    즉, 대량의 데이터를 정렬하게 되면 정렬로 인한 성능 저하가 발생한다.
  • Oracle 데이터베이스는 정렬을 위해서 메모리 내부에 할당된 SORT_AREA_SIZE 를 사용한다.
    만약 SORT_AREA_SIZE 가 너무 작으면 성능 저하가 발생한다.
  • 정렬을 회피하기 위해서 인덱스(Index)를 생성할 때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야 한다.
  • 특별한 지정이 없으면 ORDER BY 는 오름차순으로 정렬한다.
SELECT * FROM EMP
(1) ORDER BY ENAME, SAL DESC;

(1) ENAME 으로 오름차순 정렬하고 SAL로 내림차순 정렬한다.

  • ENAME 부분은 ENAME ASC 와 같다.
    기본적으로 오름차순과 내림차순을 지정하지 않으면 오름차순으로 정렬한다.
  • 내림차순으로 정렬하고 싶을 때는 'DESC'를 사용한다.

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가 기본키이기 때문에 자동으로 오름차순 인덱스가 생성된다.

DISTINCT 와 Alias

  • DISTINCT 문은 컬럼명 앞에 지정하여 중복된 데이터를 한 번만 조회하게 된다.
SELECT
	DISTINCT DEPTNO
FROM EMP
ORDER BY
	DEPTNO;
  • DISTINCT 옵션을 사용하면 DEPTNO 값이 중복되지 않는다.

  • Alias(별칭)은 테이블명이나 컬럼명이 너무 길어서 간략하게 할 때 사용한다.
SELECT 
	ENAME AS '이름'
FROM EMP a
WHERE
	a.EMPNO = 1000;
profile
Junior Backend Developer

0개의 댓글