Or10DML

/********

# 파일명 : Or10DML.sql

# DML :  Data Maripulation Language

# 설명 : 데이터를 조작할 때 사용하는 쿼리문, select를 포함하여

update(데이터수정, delete(데이터삭제, insert(데이터입력) 가 있다.

********/


/*

[데이터조회 : select문]

--데이터를 조회하기 위한 구문으로 가장 사용빈도가 높은 쿼리문이다.

사용법 :

    select 컬렴1, 컬럼명2 ....

    from 테이블명

    where 조건1, and 조건2 or....

    group by 그룹화할 컬럼명

    having 그룹의 조건

    order by 정렬을 하기위한 컬럼 asc(desc);

*/


/*

[데이터입력 : insert문]

-데이터 입력을 위한 구문으로 문자형을 입력시에는 반드시 '(싱글쿼테이션)으로

감싸야한다. 숫자형은 '(싱글)이 필요없다.


사용법 1 : 컬럼을 지정하는 방법


    insert into 테이블명 (컬럼1, 컬럼2 .....컬럼N)

    values (값1, 값2..... 값N);


사용법 2: 컬럼을 지정하지 않고 전체컬럼을 대상으로 하는 방법

    

    insert into 테이블명 values (값1, 값2......테이블의 ㅊ컬럼수와 동일하게);

*/


--테이블 생성하기

create table tb_sample (

    deptNo number(10),  -- 부서번호

    deptName varchar2(20), -- 부서명

    deptLoc varchar2(15), -- 지역

    deptManager varchar2(30)  --매니져이름

);


--방식1을 통한 데이터 입력

insert into tb_sample (deptNo, deptname, deptLoc, deptManager)

values (10, '기획실', '서울', '이순신');


--방식2를 통한 데이터 입력

insert into tb_sample values (20, '전산실', '수원', '김유신');


insert into tb_sample values (30, '기획팀', '대전', '홍길동');

insert into tb_sample values (40, '영업팀', '대구', '세종대왕');

insert into tb_sample values (50, '인사팀', '부산', '최길동');


select * from tb_sample;

commit; /* 형재 상태를 유지하겠다는 명령 

커밋을 수행하지 않으면 외부에서는 변경된 데이터를 확인할 수 없다.

*/


/*

[데이터 수정 : update문]

사용법 :

    update 테이블명

    set 칼럼 1 =값, 칼럼2 =값2 .....칼럼N=값N

    where 조건1 and 조건2;

*/

select * from tb_sample;

update tb_sample set deptLoc = '광주' where deptNo = 50;

select * from tb_sample;


select * from tb_sample where deptName = '기획실';

update tb_sample set deptManager = '문재인', deptLoc='강원'

where deptName='기획실';

select * from tb_sample;


update tb_sample set deptName='', deptLoc ='', deptManager=''

where deptNo=20;


select * from tb_sample;


/*

데이터 삭제하기 : delete문

    사용법 : delete from 테이블명 where 조건;

*/

delete from tb_sample where deptNo=10; --부서번호 10인 레코드 삭제


delete from tb_sample; --전체 레코드 삭제


select * from tb_sample;


rollback;

/* 마지막 commit 이후의 상태로 되돌려준다. 즉 commit하면

그 이전 상태로는 rollback되지 않는다.*/


/*

칼럼이 number타입이면 컬럼명 +100과 같이 사칙연산을 수행할 수 없다.

select, update 동일하게 적용됨.

*/

--deptNo에 20을 더하여 업데이트 수행

update tb_sample set deptNo= deptNo + 20 where deptNo = 50;

select * from tb_sample;








/*

1. 다음 조건에 맞는 'pt_dept' 테이블을 생성하시오.

*/


create table pt_dept(

    dno number(2),

    dname varchar2(20),

    loc varchar2(35)

);


/*

2. 다음 조건에 맞는 'pt_emp' 테이블을 생성하시오.

*/


create table pr_emp

(

    eno number(4),

    ename varchar2(10),

    job varchar2(30),

    regist_date date

);



/*

3. pr_emp 테이블의 ename 컬럼을 varchar2(50) 로 수정하시오.

*/


--테이블 스키마 확인

desc pr_emp;

alter table pr_emp modify ename varchar2(50);


/*

4. employees 테이블을 복사해서 pr_employees라는 테이블을 생성하되 

사원ID, 이름, 급여, 부서ID 만 복사하고 새로 생성된 칼럼명은 

emp_id, name, sal, dept_id로 지정하시오.

*/


create table pr_employees (

    emp_id, name, sal, dept_id

)

as

select employee_id, first_name ||' '||last_name, salary, department_id

from employees

where 1=1

;


/*

5. 수업시간에 복사했던  tb_emp_cp 테이블을 삭제하시오

*/

drop table tb_emp_cp;


/*

6. pr_employees 테이블의 이름을 pr_employees_rename 으로 변경하시오.

*/


rename pr_employees to pr_employees_rename;

desc pr_employees;

desc pr_employees_rename;


/*

7. pr_dept 테이블에서 dname 칼럼을 삭제하시오.

*/


alter table pr_dept drop column dname;


/*

8. 5번에서 삭제한 tb_member_rename 테이블이 휴지통에 있는지

확인하고 복원할수 없도록 휴지통에서 완전히 삭제하시오.

*/


show recyclebin;

purge table pr_empoyees;


/*

9. “pr_emp” 테이블의 job 컬럼을 varchar2(50) 으로 수정하시오.

*/


alter table pr_emp modify job varchar2(50);

desc pr_emp;



/*

1. DDL문 연습문제 2번에서 만든 “pr_emp” 테이블에

다음과 같이 레코드를 삽입하시오.

단, 날자는 sysdate를 이용해서 오늘 날자를 입력하시오.

*/

insert into pr_emp values (1, '문재인', '대통령', sysdate);

insert into pr_emp values (2, '이낙연', '국무총리', sysdate);

insert into pr_emp values (3, '김상조', '공정거래위원장', sysdate);


select * from pr_emp;


/*

2. 위 테이블에 다음 조건에 맞는 레코드를 삽입하시오.

이름 : 서훈

직책 : 국정원장

등록날자 : to_date함수를 이용해서 7일전 날자를 입력하시오.

*/


insert into pr_emp (

    eno, ename, job, regist_date

)

values (4, '서훈', '국정원장', to_date(sysdate-7, 'yy/mm/dd'));

select * from pr_emp;


/*

3. 등록일이 오늘인 레코드를 찾아서 ename 의 내용을 다음과 같이 변경하시오.

“문재인 공정한 대한민국” 즉 이름뒤에 “공정한 대한민국” 이라는 문자열을 추가한다.

*/


select

    *

from pr_emp

where to_char(regist_date, 'yy/mm/dd') = '17/11/08';

desc pr_emp;


update pr_emp

set ename = concat(ename, ' 공정한 대한민국')

where to_char(regist_date, 'yy/mm/dd') = '17/11/08';

select * from pr_emp;


/*

4. “김상조”의 등록일자가 “서훈” 의 등록일자와 같아지도록

업데이트 하시오. 

즉 “김상조”의 등록일자가 “서훈”과 같이 7일전 날자가 되어야 하며 

to_date 함수를 사용하는 것이 아니라 “서훈”의 등록일자를 이용해서 

업데이트 하는것이다.

*/


update pr_emp

set regist_date =

    (

        select regist_date from pr_emp

        where ename='서훈'

    )

where eno=3;


select * from pr_emp;


/*

5. pr_employees 테이블에서 

사원ID 146번과 동일한 직무를 가진 사원의 부서ID를

사원ID 197번의 부서ID로 업데이트 하시오.

*/

create table pr_employees

as

select * from employees;



-- 146번 사원의 직무ID를 확인한다.

select * from pr_employees

where employee_id=146; --job_id : SA_MAN



-- 197번 사원의 부서ID를 확인한다.

select department_id from pr_employees

where employee_id=197; -- depantment_id : 50



--정답

update pr_employees

set department_id = 

(

    select department_id from pr_employees

    where employee_id=197

)

where job_id = 

        (   

            select job_id from pr_employees

            where employee_id=146

        );

select * from pr_employees;


/*

6.  pr_employees 테이블에서 전화번호에 123 이 포함된 모든 직원을 삭제하시오.

*/


select * from pr_employees

where phone_number like '%123%';


delete from pr_employees

where phone_number like '%123%';



/*

7. pr_employees 테이블에서 입사일자가 가장 늦은 직원을 찾아서 

first_name 컬럼을 “기존의이름(신입사원)” 이 될수 있도록 업데이트 하시오. 

예) Sundita(신입사원)

*/


desc pr_employees;


--입사일의 최대값을 찾는데 (가장 입사일이 늦은 날짜)

select max(hire_date) from pr_employees;


--입사일이 가장 늦은 직원의 정보 가져오기

select * from pr_employees where hire_date = 

            (

                select max(hire_date) from pr_employees            

            );

update pr_employees

set

    first_name = concat(first_name, '(신입사원)')

where hire_date = 

            (

                select max(hire_date) from pr_employees            

            );

        --first_name 컬럼이 크기가 부족함

-first_name 컬럼의 크기를 50으로 수정후 위 쿼리문 실행

alter table pr_employees modify first_name varchar2(50);

        

desc pr_employees;

select * from pr_employees;
















































'프로그래밍 > Oracle' 카테고리의 다른 글

Or12Sequenceindex  (0) 2017.11.15
Or11ConStraintRule  (0) 2017.11.15
Or09DDL  (0) 2017.11.15
Or07Join  (0) 2017.11.15
Or06GroupBy  (0) 2017.11.15
TAGS.

Comments