💡
- DML (Data Manipulation Language) : INSERT(입력) , UPDATE(변경) , DELETE(삭제) , MERGE(병합)
- DDL (Data Definition Language) : CREATE (생성) , ALTER (수정) , TRUNCATE (잘라내기) ,DROP (삭제)
- DCL (Data Control Language) : GRANT (권한 주기) , REVOKE (권한 뺏기)
- TCL (Transaction Control Language): COMMIT (확정) , ROLLBACK (취소)
- SELECT : 어떤 분류에서는 DQL (Data Query Language) 라고도 한다.
- DML
: Data Manipulation Language. 데이터 조작어.
DML 명령어
1. insert : 테이블에 새로운 레코드 추가 시 사용되는 명령어. (C)reate 2. update : 테이블에 기존 레코드 변경 시 사용되는 명령어 (U)pdate 3. delete : 테이블에 기존 레코드 제거 시 사용되는 명령어 (D)elete 4. merge : 두개의 테이블의 내용 병합 시 사용되는 명령어
1. insert
: 데이터 입력 명령어
insert into 테이블명 [(컬럼명1, 컬럼명2,...)] values (값1,값2,....)
컬럼명 부분 생략 가능. => 모든 컬럼에 데이터를 추가하는 경우.
desc 테이블명에 조회된 컬럼(스키마)의 순서대로 값을 설정
=> 권장하지 않음.
컬럼명을 기술해야 하는 경우
1. 모든 컬럼에 값을 설정하지 않는 경우
2. 스키마 순서와 상관없이 순서를 개발자가 지정할때
3. db구조가 자주 변경되는 경우 컬럼명을 기술하는 것이 안전함
예시 : dept2 테이블에 9000번 부서 추가하기
insert into dept2 (dcode,dname,pdept,area)
values (9000,'특수판매팀',1000,'임시지역')
문제 :
1. dept2 테이블에 9001번 부서 추가하기 : 컬럼부분 생략
insert into dept2 values(9001,'특수판매1팀',9000,'임시지역')
문제 :
2. dept2 테이블에 9002번 부서 추가하기
-- 코드:9002, 부서명:특수판매2팀
insert into dept2 (dcode,dname) values(9002,'특수판매2팀')
문제 :
3. dept2 테이블에 9003번 부서 추가하기
-- 코드:9003, 부서명:특수판매3팀
insert into dept2 values(9003,'특수판매3팀','','')
select * from dept2 where dcode >= 9000
문제 :
4. dept2 테이블에 9004번 부서 추가하기
-- 코드:9004, 부서명:특수판매4팀
insert into dept2 values(9004,'특수판매3팀',null,null)
select * from dept2 where dcode >= 9000
-- null 값 입력방법
-- 1. 컬럼을 기술하지 않기
-- 2. 빈문자열값을 설정
-- 3. null, NULL로 직접 입력하기
예시 : dept2 테이블에 9005번 부서 추가하기
-- 코드:9005, 부서명:특수판매5팀
insert into dept2 values(9005,'특수판매5팀',null,null)
문제 :
5. ddl_test 테이블에 데이터 추가하기
insert into ddl_test (no, name) values (1,'홍길동')
select * from ddl_test
insert into ddl_test (no, name) values (2,'남궁길동')
문제 :
6. ddl_test2 테이블에 no:2, name:김삿갓, birth:90-01-01 데이터 추가하기
insert into ddl_test2 values (2,'김삿갓','90-01-01')
2. update
: 기존의 레코드 컬럼의 값을 수정
update 테이블명 set 컬럼1=값1,컬럼2=값2....
[where 조건문] => 변경되는 레코드를 선택 조건.
where 조건문이 구현되지 않으면 모든 레코드의 기술된 컬럼이 변경
예시 : 교수 테이블에서 직급이 조교수인 교수의 보너스를 99로 변경하기
select name,bonus from professor where position='조교수'
update professor set bonus=99 where position='조교수'
문제 :
1. 장혜진교수와 같은 직급의 교수 중 급여가 300 이하인 교수의 급여만 15% 인상하기
-- 수정전 조회
select name,pay,position from professor
where position = (select position from professor where name='장혜진')
and pay <= 300
-- 수정
update professor set pay = pay * 1.15
where position = (select position from professor where name='장혜진')
and pay <= 300
-- 수정후 조회
select name,pay,position from professor
where position = (select position from professor where name='장혜진')
문제 :
2. 학생 테이블에서 지도교수가 없는 학생의 지도교수를 이서진학생의 지도교수로 변경하기
-- 수정전 조회 : 지도교수가 없는 학생
select name,grade,profno from student where profno is null
-- 지도교수 수정
update student
set profno = (select profno from student where name='이서진')
where profno is null
-- 수정후 조회 : 지도교수가 이서진학생과 같은 학생
select name,grade,profno from student
where profno = (select profno from student where name='이서진')
문제 :
3. 전임강사의 보너스를 조교수의 평균 보너스의 50%로 변경하기.
-- 조교수의 보너스가 없는 경우는 0으로 계산하기.
-- 소숫점이하는 절삭한 보너스로 변경하기.
-- 수정전 조회 : 전임강사의 보너스 조회, 조교수의 평균 보너스 조회
select name,bonus from professor where position='전임강사'
select trunc(avg(nvl(bonus,0)) * 0.5)
from professor where position='조교수'
-- 수정
update professor set bonus = (select trunc(avg(nvl(bonus,0)) * 0.5)
from professor where position='조교수')
where position='전임강사'
-- 수정후 조회 : 전임강사의 보너스 조회
select name,bonus from professor where position='전임강사'
3. delete
: 레코드 삭제 명령어
delete [from] 테이블명
[where 조건문] => 삭제될 레코드 조건. 없는 경우는 모든 레코드 삭제. 주의필요
예시 : dept2 테이블의 dcode의 값이 9000번인 레코드 삭제하기
-- 삭제전 조회
select * from dept2 where dcode=9000
-- 삭제
delete from dept2 where dcode=9000
-- 삭제후 조회
select * from dept2 where dcode >=9000
문제 :
1. 교수테이블에서 심슨교수와 같은 부서의 교수를 퇴직시키기.
-- 삭제전 조회
select name,deptno from professor
where deptno = (select deptno from professor where name='심슨')
-- 삭제
delete from professor
where deptno = (select deptno from professor where name='심슨')
-- 삭제후 조회
select name,deptno from professor
where deptno = 201
'수업(국비지원) > Oracle' 카테고리의 다른 글
[Oracle] SQL 명령어들 - DDL (create, alter, drop, truncate) (0) | 2023.04.14 |
---|---|
[Oracle] SQL 명령어들 - TCL (commit, roolback) (0) | 2023.04.14 |
[Oracle] Sub Query (0) | 2023.04.14 |
[Oracle] 비등가 조인(non equi join), 아우터 조인(outer join) (0) | 2023.04.14 |
[Oracle] 카티션곱(cross join), 등가 조인(equi jion) (0) | 2023.04.14 |