|
DML |
DDL |
DCL |
Insert |
Create |
Grant | |
Select | |||
Revoke | |||
|
Update |
Alter | |
| |||
TCL | |||
Delete |
Truncate | ||
Commit | |||
Merge |
Drop | ||
Rollback |
데이터 조작어 (DML)
대량의 데이터를 옮기는 방법
B테이블 존재함 |
B테이블 생성 | ||
ITAS |
Insert into Table AS Select .... |
CTAS |
Create Table abc AS Select * from emp; |
예제 : 학생 테이블에 '홍길동' 학생의 데이터 입력하기
SQL> INSERT INTO student
VALUES(10110,'홍','길동','1','8501011143098','85/01/01',
'055)-777-7777',170,70,101,9903);
묵시적 Null입력
예제 : 부서테이블의 부서번호와 부서이름을 입력하고 나머지는 NULL을 입력하세요.
SQL> INSERT INTO department( deptno, dname)
VALUES (300,'lifetech');
명시적 Null입력
예제 : 부서테이블의 부서번호와 부서이름을 입력하고 나머지는 NULL을 입력하세요.
SQL> INSERT INTO department
VALUES (301,'env',NULL , NULL);
또는 VALUES (301,'env', ' ' , ' ');
날짜데이터 입력
예제 : 교수 테이블에서 입사일을 2005년 1월 1일로 입력하여라.
'YY/MM/DD'형식입력 :
SQL> INSERT INTO professor(profno,name,position, hiredate,deptno)
VALUES(9920,'choi','assist','05/01/01',102);
'YYYY-MM-DD' 형식 입력:
SQL> INSERT INTO professor(profno,name,position, hiredate,deptno)
VALUES(9920,'choi','assist',
TO_DATE('2005/01/01','YYYY/MM/DD'), 102);
예제 : 교수 테이블에 새로운 행을 입력할 때 입사일을 현재 날짜로 입력하세요.
SQL> INSERT INTO professor
VALUES (9910,'baek','white',null,200,SYSDATE,10,101);
다중 행 입력
예제 :
SQL> INSERT INTO professor2
SELECT *
FROM professor
WHERE profno > 9905;
※ 만일 profno에 기본키나 고유 키 제약조건이 지정된 경우에는 중복값 입력 오류가 발생한다
데이터 수정
예제 : 교수 번호가 9903인 교수의 현재 직급을 '조교수'로 수정하여라.
SQL> SELECT *
FROM professor
WHERE profno = 9903;
SQL> UPDATE professor
SET position = '조교수'
WHERE profno = 9903;
예제 : 학번이 10201인 학생의 학년과 학과 번호를
10103학번 학생의 학년과 학과번호 와 동일하게 수정하세요.
SQL> UPDATE student
SET (grade, deptno) = (SELECT grade, deptno
FROM student
WHERE studno = 10103)
WHERE studno = 10201;
데이터 삭제
예제 : 학생테이블에서 학번이 20103인 학생의 데이터를 삭제하여라.
SQL> DELETE
FROM student
WHERE studno = 20103;
예제 : 학생 테이블에서 컴퓨터 공학과에 소속된 학생을 모두 삭제하여라.
SQL> DELETE FROM student
WHERE deptno = ( SELECT deptno
FROM departmet
WHERE dname = '컴퓨터공학과');
MERGE
구조가 같은 두 개의 테이블을 비교하여 하나의 테이블로 합치기
SQL> MERGE INTO EMP a
USING (Select * FROM HR.employees) b
ON (a.emp_no =b.employee_id )
WHEN MATCHED THEN UPDATE SET a.salary = b.salary
WHEN NOT MATCHED THEN INSERT
(emp_no, last_name, first_name, dept_no, hire_date, salary)
VALUES
(employee_id,last_name, first_name, department_id, hire_date, salary);
트랜젝션
여러개의 문장을 묶어서 하나의 셋트로 만들어 놓은 모음
COMMIT 명령문
트랜잭션 내의 모든 SQL 명령문에 의해 변경된 작업 내용을 디스크에
영구적으로 저장하고 트랜잭션을 종료.
ROLLBACK 명령문
트랜잭션 내의 모든 SQL 명령문에 의해 변경된 작업 내용을 전부 취소하고 트랜잭션을 종료.
시퀀스
자동 번호 생성 (ex. 웹게시판 글 번호 자동 할당)
문법> CREATE SEQUENCE 시퀀스명
[INCREMENT BY n] ← 시퀀스 번호의 증가 값으로 기본값은 1
[START WITH n] ← 시퀀스 시작번호로 기본값은 1
[MAXVALUE n | NOMAXVALUE] ← 생성 가능한 시퀀스 최대값 (__ 기본값)
[MINVALUE n | NOMINVALUE] ← CYCLE일 경우 새로 시작되는 값 (__ 기본값)
[CYCLE | NOCYCLE] ← 시퀀스 번호를 순환 사용할 것인지 지정 (__ 기본값)
[CACHE n | NOCACHE] ← 시퀀스 생성속도를 개선하기 위해 캐싱 여부 지정
※ CACHE 잘알기 : 데이터가 한꺼번에 몰려서 대기하는 것을 방지(=시퀀스 생성속도 개선) 하기위해 지정하는 것 (ex. 은행의 경우 손님이 몰리는 시간에 직원이 미리 대기표를 뽑아두었다가 나눠준다.)
예제 : 시작 번호는 1, 증가치는 1, 최대 값은 100인 s_seq 시퀀스를 생성하여라.
SQL> CREATE SEQUENCE s_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 100;
NEXTVAL 다음 나올 번호 확인
CURVAL 현재 번호 확인
SQL> SELECT s_seq.NEXTVAL FROM dual;
SQL> SELECT s_seq.CURRVAL FROM dual;
시퀀스를 이용한 기본 키 생성 방법
SQL> INSERT INTO student(studno, name, deptno)
VALUES (s_seq.NEXTVAL, 'hong',101);
예제 : s_seq 시퀀스를 삭제하여라.
SQL> DROP SEQUENCE s_seq
연습문제
1. 교수 번호, 이름, 학과 번호를 제외한 칼럼은 NULL을 가지도록 묵시적인 방법으로 입력하세요
(교수번호:9910, 이름: 이순신 , 학과번호:201)
SQL> insert into professor(profno,name,deptno)
values (9901,'이순신',201);
2. 이순신 교수의 직급은 사용자 아이디가 'Pascal'인 교수와 동일하게 하고
급여는 교수 번호가 '9908'인 교수와 동일하게 수정하여라.
update professor
set (position,sal) =
(select position from professor where userid='Pascal'
where name='이순신‘
3. 보직 수당이 NULL 인 교수의 보직수당을 보직수당을 최소로 받는 교수의
보직수당과 동일하게 수정하여라.
'Oracle > Oracle - SQL' 카테고리의 다른 글
SQL정리 10장 제약조건 (Constraint) (0) | 2012.01.11 |
---|---|
SQL정리 9장 DDL (0) | 2012.01.10 |
SQL정리 7장 서브쿼리 (0) | 2012.01.09 |
SQL정리 6장 join (0) | 2012.01.07 |
SQL정리 5장 그룹함수 (0) | 2012.01.05 |