Oracle/SQL

DML(Data Manipulation Language, 데이터조작어)

psys 2020. 6. 3. 11:22
728x90

DML

데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 관리하는데 사용되는 언어

 

SELECT    테이블에서 튜플 검색

INSERT    테이블에 새로운 튜플 삽입

DELETE   테이블에서 튜플 삭제

UPDATE   테이블에서 튜플 내용 갱신

SELECT문

가장 기본적인 SQL DML 문으로 테이블이나 뷰에 있는 데이터를 조회할 때 사용

실행순서 - from, where, select, order by

 

1) 전체데이터 조회

SELECT *
FROM 테이블명;

 

2) 특정 데이터 조회

SELECT emp_name, email, hire_date
FROM employees;

employees테이블에서 이름과 이메일, 고용일을 출력

 

 

3) WHERE 조건

select employee_id, emp_name, salary
from employees
where salary >= 5000;

4) ORDER BY정렬

디폴트는 오름차순

  • ASC - 오름차순
select employee_id, salary, emp_name
from employees
where salary > 5000
order by employee_id asc;

employee_id를 기준으로 오름차순 정렬한 결과이다.

 

  • DESC - 내림차순
select employee_id, salary, emp_name
from employees
where salary > 5000
order by employee_id desc;

employee_id를 기준으로 내림차순 정렬한 결과이다.

 

  • SELECT문 컬럼 순 정렬
select employee_id, salary, emp_name
from employees
where salary > 5000
order by 1 desc;

1 desc의 첫번째 컬럼 기준으로 정렬한다는 의미

employee_id가 첫번째 컬럼으로 employee_id를 기준으로 내림차순정렬

 

5) ALIAS

select a.employee_id, 
        a.emp_name,
        a.department_id "부서아이디",
        a.department_id AS "부서",
        b.department_name AS dep_name
from employees a, departments b
where a. department_id = b.department_id;

ALIAS는 가명 또는 별명이라는 의미로 컬럼의 이름 정의

 

INSERT문

신규 데이터를 입력할 때 사용

INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...) values (내용1, 내용2, ...);

1) 기본형태

create table ex3_1(
    col1 varchar2(10),
    col2 number,
    col3 date
);

insert into ex3_1(col1, col2, col3) values ('ABC',10,sysdate); -- 컬럼명 마지막은 , <- 하지않는다.
insert into ex3_1(col3, col1, col2, ) 	-- 열오류
    values (sysdate, 'DEF', 20, ); 	-- 각 컬럼의 타입에 맞게 삽입해야함.
    
    

2) 기술명 생략

insert into ex3_1 values('GHI', 10, sysdate);
-- insert 몇 개 컬럼만 삽입할 경우는 컬럼명 써야함.
insert into ex3_1 values('GHI', 30); -- 충분하지 않은 값 오류
insert into ex3_1 (col1, col2) values('GHI', 30);

컬럼명들을 생략 할 경우에는 컬럼 수에 맞는 내용들을 삽입해줘야함

 

3) INSERT ~ SELECT형태

table1과 동일한 table2를 미리 만들고 위와 같은 구문 실행하면 table1내용 table2로 복사

 

  • 모든 컬럼 복사
INSERT INTO table2
SELECT *
FROM table1;

 

  • 원하는 컬럼 복사
INSERT INTO 테이블2(컬럼명1, 컬럼명2, 컬럼명3...)
SELECT 컬럼명1, 컬럼명2, 컬럼명3...
FROM 테이블1;

 

  • 응용
INSERT INTO table1 
select *
from table2 
where col = 'value';
create table ex3_2(
    emp_id number,
    emp_name varchar2(100)
);
insert into ex3_2 (emp_id, emp_name)
select employee_id, emp_name
from employees
where salary>5000;

-- col3의 date 타입으로 입력하지 않았지만 데이터의 형태가 맞으면 삽입.
-- 하지만 DBMS마따 다름
-- col2는 숫자타입
insert into ex3_1 (col1, col2, col3) values (10, '10', '2014-01-01');

ex> MEMBER 테이블에서 직업이 '자영업'인 정보만 생성한 MEM_EX 테이블에 insert 하시오(해당 조건으로 검색 후 insert~select문으로 삽입)

Insert into MEM_EX
select *
from MEMBER
where MEM_JOB = '자영업';

 

UPDATE문

UPDATE 테이블명
SET 컬럼명 = 변경할 값

1) 전체 행(row) 업데이트

update ex3_1 set col2=50;

2) 공백인 컬럼 업데이트

update ex3_1
set     col3 = sysdate
where   col3 = '';

3) set

update ex3_1
set     col3 = sysdate.
        col2 = '값'
where   col3 = '';

ex> INFO테이블에서 취미를 업데이트

update info
set hobby = '요리'
where nm = '박성연';

ex> MEM_EX의 '김은대'의 직업을 '학생'으로 마일리지를 0으로 초기화 하시오

update MEM_EX
set     MEM_JOB = '학생'
        , MEM_MILEAGE=0
where MEM_NAME='김은대';

DELETE문

데이터만 삭제 되며 테이블 용량은 줄어 들지 않음

삭제 후 잘못 삭제한 것을 되돌릴 수 있음

- TABLE이나 CLUSTER에 행이 많으면 행이 삭제될 때마다 많은 SYSTEM 자원이 소모

- Commit이전에는 Rollback이 가능

- 롤백정보를 기록 하므로 Truncate에 비해서 느림

- 전체 또는 일부만 삭제 가능

- 삭제 행수를 반환

- 데이터를 모두 Delete해도 사용했던 Storage는 Release 처리x

 

1) 방법1

delete ex3_2
where EMP_ID = 176;

2) 방법2

delete ex3_2
where EMP_176 AND EMP_NAME='Jonathon Taylor';

 

'Oracle > SQL' 카테고리의 다른 글

DDL(Data Define Language, 데이터정의어)  (0) 2020.06.03
수식연산자  (0) 2020.06.03
제약조건  (0) 2020.06.02
시간타입과 NOTNULL  (0) 2020.06.02
오라클 제약조건 SQL  (0) 2020.06.02