now is better than never

[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 14 - 16 본문

SQL/초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡)

[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 14 - 16

김초송 2022. 11. 17. 20:06
-- 데이터 입력하기 (insert)
insert into emp(empno, ename, sal, job, hiredate)
values (2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05','RRRR/MM/DD') );

select *
from emp;

rollback;

insert into dept
values (50, 'RESEARCH', 'SEOUL');

select *
from dept;

rollback;

-- 데이터 저장 및 취소하기 (commit, rollback)
-- rollback: 했던 모든 작업을 취소
update emp
set sal=0
select * from emp;

delete from emp
select * from emp;

rollback;

select * from emp;

insert into emp(empno, ename, sal, job, hiredate)
values (2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05','RRRR/MM/DD') );

commit;
-- commit을 한 이후에는 rollback 안 됨

select * from emp;

-- 데이터 수정하기 (update)
update emp
set sal = 3200
where ename='SCOTT';

select * from emp;

update emp 
set comm = 7000
where job = 'SALESMAN';

rollback;

-- 데이터 삭제하기 (delete, truncate, drop)
delete from emp
where ename = 'SCOTT';
-- where 절 없으면 테이블 전체 삭제

select * from emp;

truncate table dept;

rollback;

insert into emp(empno, ename, sal, job, hiredate)
values (2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05','RRRR/MM/DD') );

commit;

-- 데이터 입력, 수정, 삭제 한번에 하기 (merge)

alter table emp
add loc varchar2(10);

select * from emp;

merge into emp e
using dept d
on (e.deptno = d.deptno)
when matched then 
update set e.loc=d.loc
when not matched then
insert (e.empno, e.deptno, e.loc) values (1111, d.deptno, d.loc);

select * from emp;

alter table emp
add dname varchar2(10);

merge into emp e
usting dept d
on (e.deptno = d.deptno)
when matched then
update set e.dname = d.dname;

-- rock: DML 문을 작성할 때 커밋 전에 다른 세션에서 값을 수정/갱신할 수 없게 행을 잠그는 기능
-- 데이터의 일관성을 유지하기 위해
-- update를 실행하자 마자 rock이 걸림

-- select for update절
-- 검색하는 동안 누구도 내가 조회하는 데이터를 갱신할 수 없게 함
-- 롤백이나 커밋해야 다른 세션에서 update 가능
select ename, sal, deptno
from emp
where ename = 'JONES'
for update;

rollback;

-- 서브쿼리를 사용하여 데이터 입력하기
-- 새로운 테이블을 만들고 데이터 입력하기

-- emp 테이블과 똑같은 테이블 만들기 -> 백업하고 싶을 때
create table emp2
as
    select *
    from emp;
-- emp 테이블의 구조만 갖고오기
create table emp2
as
    select *
    from emp
    where 1=2; 

select * from emp2;

-- 다른 테이블의 데이터를 가져와서 한꺼번에 입력
insert into emp2 (empno, ename, sal, deptno)
select empno, ename, sal, deptno
from emp
where deptno=10;

-- 서브쿼리를 사용해서 데이터 수정하기
update emp
set sal = (
    select sal
    from emp
    where ename = 'ALLEN')
where job = 'SALESMAN';

rollback;

-- 서브쿼리를 사용하여 데이터 삭제하기
delete from emp
where sal > (select sal
            from emp
            where ename='SCOTT');
            
rollback;

-- 서브쿼리를 사용하여 데이터 합치기
alter table dept
add sumsal number(10);

merge into dept d
using (select deptno, sum(sal) as sumsal
        from emp
        group by deptno) v
on (d.deptno = v.deptno)
when matched then 
update set d.sumsal = v.sumsal;

select * from dept;

rollback;

-- 연습문제: cnt컬럼을 만들고 부서별 인원 수 넣기
-- 데이터 입력하기 (insert)
insert into emp(empno, ename, sal, job, hiredate)
values (2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05','RRRR/MM/DD') );

select *
from emp;

rollback;

insert into dept
values (50, 'RESEARCH', 'SEOUL');

select *
from dept;

rollback;

-- 데이터 저장 및 취소하기 (commit, rollback)
-- rollback: 했던 모든 작업을 취소
update emp
set sal=0
select * from emp;

delete from emp
select * from emp;

rollback;

select * from emp;

insert into emp(empno, ename, sal, job, hiredate)
values (2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05','RRRR/MM/DD') );

commit;
-- commit을 한 이후에는 rollback 안 됨

select * from emp;

-- 데이터 수정하기 (update)
update emp
set sal = 3200
where ename='SCOTT';

select * from emp;

update emp 
set comm = 7000
where job = 'SALESMAN';

rollback;

-- 데이터 삭제하기 (delete, truncate, drop)
delete from emp
where ename = 'SCOTT';
-- where 절 없으면 테이블 전체 삭제

select * from emp;

truncate table dept;

rollback;

insert into emp(empno, ename, sal, job, hiredate)
values (2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05','RRRR/MM/DD') );

commit;

SQL문의 종류

  1. QUERY문
    select, from, where, group by, having, order by
  2. DML문 (Data Manipulation Languae) : insert, update, delete, merge
  3. DDL문
  4. DCL문
  5. TCL문

 

  • 데이터 삭제하기
    * truncate: rollback 되지 않음, 실행과 동시에 commit = 테이블 영구히 삭제
    * drop은 휴지통 기능있어서 회수할 수 있음.
명령어 데이터 저장공간 저장구조
delete 삭제 유지 유지
truncate 삭제 삭제 유지
drop 삭제 삭제 삭제