Database/Oracle

[Oracle SQL] DML (Data Manipulation Language) 예제

2022. 2. 1. 20:51
목차
  1. Data 조작어(DML, Data Manipulation Language)
  2. SELECT
  3. INSERT
  4. UPDATE
  5. DELETE
반응형

Data 조작어(DML, Data Manipulation Language)

테이블에 새 행을 추가 하거나, 기존 행 수정 또는 기존 행 삭제 등의 논리 작업 단위를 형성하는 DML문 모음을 트랜잭션(Transaction)이라 한다.

 

SELECT

SELECT문은 데이터베이스에서 정보를 검색한다.

 

SELECT [DISTINCT] { *, column [alias], ... }
FROM table
[WHERE condition];

SELECT 절은 표시할 컬럼을칼럼을 지정하고, FROM 절은 SELECT 절에 나열된 칼럼을 포함하는 테이블을 지정한다.

 

SELECT : 하나 이상의 컬럼으로 구성되는 목록

DISTINCT : 명시하는 경우 중복되는 칼럼을 생략

* : 모든 컬럼 선택

column : 명명된 칼럼을 선택

alias : 선택된 컬럼에 다른 머리글을 부여 (별칭)

FROM table : 해당 칼럼을 포함하는 테이블을 지정

 

SQL문은 대소문자를 구별하지 않고, 한 줄이 넘어가도 상관없다. 그러나 Keyword 같은 경우는 약어로 쓰거나 다음 행에 나눠 쓸 수 없다.

SQL문이 길어지는 경우 절(ex. FROM절, WHERE절 등)은 일반적으로 서로 다른 행에 쓴다.

 

모든 컬럼 선택

SELECT *
FROM employee;

 

특정 컬럼 선택

SELECT id, name
FROM employee;

 

INSERT

INSERT문을 사용하여 테이블에 새 행을 추가한다. INSERT문은 한 번에 한 행만 추가할 수 있다.

INSERT INTO table [(coluumn [, column, ...])]
VALUES (value [, value, ...])

기본적으로 테이블의 칼럼 순서대로 값을 나열한다.

 

INSERT INTO employee (id, name, address)
VALUES (10, '홍길동', '서울');

문자와 날짜 값은 작은 따옴표로 묶어야 한다.

 

Null 값을 갖는 행 삽입

INSERT INTO employee (id, name)
VALUES (10, '홍길동');

암시적 방법으로, address 값을 Null 값으로 넣기 위해 칼럼 목록에서 address를 생략하였다.

 

INSERT INTO employee (id, name, address)
VALUES (10, '홍길동', NULL);

명시적 방법으로 직접 NULL 키워드를 지정하였다.

 

특정 값 삽입

현재 날짜 삽입은 굉장히 많이 쓰이는데, MySQL에서는 now()로 표현하는 것과 달리 Oracle SQL에서는 SYSDATE 함수를 사용하여 현재 날짜와 시간을 기록한다.

INSERT INTO employee (id, name, email, hire_date)
VALUES (10, '홍길동', 'hong@mail.com', SYSDATE);

 

현재 날짜가 아닌 특정 날짜 값을 삽입하고 싶다면, TO_DATE() 함수를 사용하면 된다.

INSERT INTO employee (id, name, mail, hire_date)
VALUES (11, '김철수', 'kim@mail.com', TO_DATE('20220201', 'yyyymmdd'));

 

Subquery 사용

다른 테이블에서 행 복사를 하여 INSERT문을 작성할 수 있다.

INSERT INTO table [(column [, column, ...])
		subquery;

 

서브쿼리 사용 시 VALUES 절은 사용하지 않고, INSERT 절의 칼럼 수와 서브 쿼리의 칼럼 수를 일치시켜야 한다.

INSERT INTO employee (id, name, email, hire_date)
SELECT employee id, name, email, TO_DATE('20220201', 'yyyymmdd')
FROM employee
WHERE id = 10;

 

UPDATE

기존 행을 수정해야할 때 사용한다. INSERT문과는 다르게 필요한 경우 한 번에 여러 행을 수정할 수 있다

UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

 

WHERE 절을 지정하여 특정 행을 수정할 수 있다.

UPDATE employee
SET name = '홍길순'
WHERE id = 10;

WHERE 절에 id 칼럼이 10인 경우를 조건으로 명시하였다.

 

WHERE 절 생략 시 테이블의 모든 행이 수정된다.

 

다중 컬럼 수정

UPDATE employee
SET (id, name) = (SELECT id, name form employee WHERE id = 11)
WHERE id = 10;

SET 절에 서브 쿼리를 사용하여 여러 개의 칼럼을 수정할 수 있다.

 

다른 테이블을 기반으로 한 개의 행 수정

UPDATE employee
SET dept_id = (SELECT dept_id FROM employee WHERE id = 21)
WHERE job_id = (SELECT job_id FROM employee WHERE id = 21);

WHERE 절에 서브쿼리를 사용하여 갱신할 행을 추출한 뒤 수정하는 것이다.

 

UPDATE문 사용 시에는 (다른 쿼리문들도 그렇지만) 무결성 제약조건을 만족하는지 잘 따져보아야 한다.

무결성 제약조건이 위배되는 경우 해당 행이 수정되지 않는다.

 

DELETE

DELETE 문을 사용하여 테이블에서 기존 행을 제거한다.

DELETE [FROM] table
[WHERE condition];

 

앞서 보았던 UPDATE문과 마찬가지로 WHERE 절을 지정하여 특정 행(들)을 삭제할 수 있고, WHERE 절 생략 시 테이블의 모든 행이 삭제된다.

DELETE FROM employee
WHERE id = 10;

DELETE FROM employee; /* 모든 행 삭제 */

 

다른 테이블을 기반으로 한 개의 행 삭제

DELETE FROM employee
WHERE dept_id = (SELECT dept_id FROM department WHERE dept_id = 21);
반응형
  1. Data 조작어(DML, Data Manipulation Language)
  2. SELECT
  3. INSERT
  4. UPDATE
  5. DELETE
'Database/Oracle' 카테고리의 다른 글
  • [Oracle SQL] LAG() 함수 이용해서 증감 표현하기
  • [Oracle SQL] 제약 조건 (Constraint)
  • [Oracle SQL] DDL (Data Definition Language)
  • [Oracle SQL] 트랜잭션 (Transaction)
밈아
밈아
개발 공부 블로그
밈아
Mimah
밈아
전체
오늘
어제
  • 분류 전체보기 (220)
    • Web (37)
      • Spring (9)
      • Thymeleaf (2)
      • Vue.js (8)
      • HTML & CSS (4)
      • 게시판 만들기 (9)
    • Programing Language (73)
      • Java (34)
      • Python (26)
      • JavaScript (6)
      • JSP (0)
      • Kotlin (5)
    • Programing (17)
      • Git (5)
      • Clean Code (0)
      • Errors (11)
    • Database (19)
      • Oracle (7)
      • MySQL (6)
    • Solution (33)
      • 백준 (10)
      • 정보올림피아드 (9)
      • Book (11)
    • Setting (14)
    • CS (3)
      • Operating System (0)
      • Algorithm (1)
      • Data Structure (0)
      • Etc. (2)
    • Daily (21)
      • Daily (9)
      • TIL (7)
      • Blog (2)
      • Review (3)

인기 글

최근 글

반응형

최근 댓글

태그

  • mysql
  • 파이썬
  • java
  • 코딩 테스트
  • 프로그래머스
  • 알고리즘
  • programmers
  • Web
  • 자바
  • Python

블로그 메뉴

  • 홈
  • 방명록
  • 태그
hELLO · Designed By 정상우.
밈아
[Oracle SQL] DML (Data Manipulation Language) 예제
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.