SQL 기초 실무/중급편Ⅰ, Ⅱ

23.09.25. SQL Developer 예제 78 ~ 87번

잇꼬 2023. 9. 28. 15:10
728x90
반응형
SMALL

    SQL의 종류 
    1. QUERY문 :select  
                        from 
                        where 
                        group by
                        having 
                        order by 
    2. DML문 : Data Manipulation Language
        insert, update, delete, merge
    3. DDL문
    4. DCL문
    5. TCL문

 

78. 데이터 입력하기(INSERT)

-- 예제78. 다음과 같이 사원테이블에 데이터를 입력하세요.
insert into emp ( empno, ename, sal, job, hiredate )
    values ( 2812, 'JACK', 3500, 'ANALYST', to_date('2019/06/05', 'RRRR/MM/DD') ) ;

select * from emp ;

/* 예제78_문제1. 부서테이블에 아래의 데이터를 입력하세요
 부서번호 : 50번 / 부서이름 : RESERCH / 부서위치 : SEOUL */
select * from dept ;

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

 

79. 데이터 수정하기(UPDATE)

-- 예제79. SCOTT 의 월급을 3200 으로 수정하세요. 
select * 
    from emp 
    where ename = 'SCOTT' ;
    
update emp 
    set sal = 3200 
    where ename = 'SCOTT' ;
    
-- 예제79_문제1. 직업이 SALESMAN 인 사원들의 커미션을 7000 으로 수정하세요. 
select * 
    from emp 
    where job = 'SALESMAN' ;

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

 

    1. delete : delete from 테이블명; // 데이터 삭제 / 저장공간 유지 / 저장구조 유지
    2. truncate : truncate table 테이블명; // 데이터 삭제 / 저장공간 삭제 / 저장구조 유지
    3. drop : drop table 테이블명; // 데이터 삭제 / 저장공간 삭제 / 저장구조 삭제

80. 데이터 삭제하기(DELETE, TRUNCATE, DROP) 

-- 예제80. SCOTT 의 데이터를 삭제하세요. 
delete from emp 
    where ename = 'SCOTT' ; -- where 절 없이 사용시 모든 데이터가 삭제 되니 주의 할것.

select * 
    from emp;

-- 예제80_문제1. 월급이 3000 이상인 사원들을 삭제하세요. 
delete from emp
    where sal >= 3000 ;

-- 예제80_문제2. 부서테이블 지우는데 구조만 남기고 다 삭제하세요. 
truncate table dept ; -- commit도 동시에 가능하다.

select * 
    from dept ;

 

81. 데이터 저장 및 취소하기(COMMIT, ROLLBACK) 

-- 예제81. 데이터 입력 작업을 영구히 저장하거나 취소하세요
select * from emp ; 

insert into emp (empno, ename, sal, deptno)
    values( 9382, 'jack', 3000, 10 );
    
rollback;

 

82. 데이터 입력, 수정, 삭제 한번에 하기(MERGE) 

-- 예제82. 사원테이블에서 부서위치 컬럼을 생성하세요. 또한 동시에 부서 테이블만 있는 부서번호를 사원테이블에 입력하세요
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 ;

-- 예제82_문제1. 사원테이블에 부서명 컬럼을 추가하고 해당 사원의 부서명을 값을 갱신하세요. 
alter table emp 
    add dname varchar2(10) ;

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

select * from emp ;

 

83. 락(ROCK) 이해하기

-- 예제83. 2개의 창으로 확인하기
select * from emp ;

-- 첫번째 창
update emp 
    set sal = 9000
    where ename = 'JONES' ; 
    
    commit; -- 저장을 하기 전까지는 두번째 창에서 로딩만 될 뿐 update가 되지 않음.

-- 두번째 창
update emp 
    set sal = 0
    where ename = 'JONES' ; 

select * 
	from emp ; -- 'JONES'의 월급을 확인 했을 때, 9000으로 확인.

 

84. SELECT FOR UPDATE절 이해하기 

/*  select fro update절 */
-- 예제84.
select ename, sal, deptno
    from emp 
    where ename = 'JONES' 
    for update ;
    
-- 예제84_문제1. 부서번호가 10, 20번인 사원들의 이름과 직업과 부서번호를 조회하는 동안 그 누구도 부서번호 10번, 20번인 사원들의 데이터를 갱신하지 못하도록 하시오. 
select ename, job, deptno
    from emp 
    where deptno in( 10, 20 ) 
    for update ;

 

85. 서브 쿼리를 사용하여 데이터 입력하기

-- 예제85. 사원테이블과 같은 구조의 새로운 테이블을 생성하고 사원 테이블에서 부서번호가 10번인 사원들의 사원번호, 이름, 월급, 부서번호를 생성한 테이블에 입력하세요.
create table emp2
as -- 데이터와 구조를 백업하고 싶을 때에는 사용하는 것. 
    select * 
        from emp 
        where 1 =2 ;

select * from emp2 ;
    
drop table emp2 ;

 select * 
        from emp 
        where 1 =2 ; -- emp 데이터없고 구조만 생성

insert into emp2 (empno, ename, sal, deptno) -- values 를 사용하게 되면 하나의 행만 update가 된다.
select empno, ename, sal, deptno -- 필요한 컬럼명만 작성
from emp 
where deptno = 10 ;

select * from emp2 ;

-- 예제85_문제1. 부서테이블과 같은 구조의 테이블의 DEPT2 라는 이름으로 생성하고 부서번호가 20번, 30번의 모든 컬럼의 데이터를 DEPT2에 입력하시오.
create table dept2
as
select * 
    from dept
    where 1 = 2; 
select * from dept;
select * from dept2 ;

insert into dept2 
    select *
    from dept
    where deptno in (20, 30) ;

 

86. 서브 쿼리를 사용하여 데이터 수정하기

-- 예제86. 직업이 SALESMAN 인 사원들의 월급을 ALLEN의 월급으로 수정하세요.
select * 
    from emp ;

update emp 
    set sal = 
        ( select sal
            from emp 
            where ename = 'ALLEN' ) 
    where job = 'SALESMAN' ;
    
-- 예제86_문제1. 부서번호가 30번인 사원들의 직업을 MARTIN의 직업으로 변경하세요. 
select * from emp ;

update emp 
    set job = 
        ( select job
            from emp 
            where ename = 'MARTIN' )
        where deptno = 30 ;

 

87. 서브 쿼리를 사용하여 데이터 삭제하기

-- 예제87. SCOTT 보다 더 많은 월급을 받는 사원들을 삭제하세요.
delete from emp 
where sal > 
    ( select sal 
        from emp 
        where ename = 'SCOTT' ) ;

select * from emp ;

-- 예제87_문제1. ALLEN 보다 늦게 입사한 사원들의 모든 행을 지우세요.
delete from emp 
where hiredate > 
    ( select hiredate 
        from emp 
            where ename = 'ALLEN' ) ;

select * from emp ;
728x90
반응형
LIST