[SQL] 4. DML (Insert,Update,Delete), DDL (Create,Alter,Drop),집합연산자

hhs012·2022년 1월 11일
1

SQL

목록 보기
4/8
post-custom-banner

1. DML (Insert,Update,Delete)

INSERT

INSERT INTO 테이블명(칼럼)
VALUES (1,2,3...);

INSERT INTO EMP_history 
VALUES (9999,'GUGUGU','SALESMAN',7698,T,1300,0,10);

insert into emp_history
select * from emp where deptno= 20; -- 다중 레코드 한 번에 입력

NULL 넣는 방법

create table tt (seq number,val number); 

insert into tt values(3,null); -- null 넣는 방법1
insert into tt values(3,''); -- null 넣는 방법2 *null과 공백은 다르다.
insert into tt (seq) values(77); -- null 넣는 방법3 *특정 컬럼에만 값을 주기

UPDATE

update 테이블명
set 컬럼1 = 바꾸고 싶은 값1,
    컬럼2 = 바꾸고 싶은 값2
where 조건 *조건 설정을 안하면 모든 값이 바뀌므로 주의!

update emp_copy
set sal = 55555,
    mgr = null -- update문에서는 예외적으로 is null > = null.
where deptno=10;

---emp_copy테이블에서 7844직업과 같고, 7654의 급여와 같게끔 7900사원 수정
update emp_copy 
set job = (select job from emp_copy where empno=7844) ,
    sal = (select sal from emp_copy where empno=7654)
where empno=7900;

select * from emp_copy;

DELETE

❗ 삭제하기 전에, 삭제할 값을 미리 확인하기

select * from emp_copy;
delete 
from 테이블명
where 조건

delete 
from emp_copy 
where deptno = (select deptno from emp_copy where ename='SMITH') 

2. DDL (Create,Alter,Drop)

❗ DDL문은 자동 커밋되어 rollback이 안되므로 주의하자. drop을 사용하기

CREATE

① 테이블 명, ② 컬럼 명

  • 테이블, 컬럼 명의 길이는 30byte 문자 (Oracle 12c R2 부터는 128byte)

  • 문자(영문, 한글), 숫자, 특수문자(_, $, #)만 가능

  • 반드시 문자로 시작

③ 데이터 타입

  • NUMBER(4) : 4자리의 가변 길이 정수

  • NUMBER(7,2) : 7자리의 가변 길이 정수와 2자리의 가변길이 소수

  • VARCHAR2(10) : 10byte의 가변 길이 문자

④ 기본 값

  • 테이블에 값이 입력(INSERT) 될 때 값이 없으면 기본으로 생성되는 값

  • DEFAULT [값(문자, 숫자, 날짜)], 사용하지 않으면 생략 가능

⑤ NULL 허용 여부

  • 기본 값은 NULL 허용이며, NOT NULL 선언 시 해당 컬럼은 NULL 값을 허용하지 않음

출처: https://gent.tistory.com/322


create table qq
(ww number,sde varchar2(10),rdate date);

--조건에 맞는 테이블 복제 (기존에 테이블이 있을 경우)
create table EMP_history 
as (select * from emp where deptno = '10');

--테이블 복제
create table emp 
as (select * from emp where 1=0);

ALTER

--컬럼 이름 변경
alter table emp_history2 
rename column job to job2; --- 잘 사용하지 않는다.

--컬럼 크기, 타입 수정 (테이블에 이미 존재하는 컬럼 변경)
alter table emp_history 
modify ename varchar2(5); --varchar2(10)>varchar2(5)

-- 새로운 컬럼 추가
alter table emp_history2 
add fname varchar2(10);

--컬럼 삭제
alter table emp_history2 
drop column sal2;

--테이블명 변경
alter table emp_history2 
rename to emp_history22;

DROP

Delete from 테이블명; --테이블은 남긴 채 데이터만 삭제(기록o-백업가능)
Truncate from 테이블명; --테이블은 남긴 채 데이터만 삭제(기록x-백업불가, DDL문이기 때문)
Drop from 테이블명; --테이블 자체를 삭제(아예 삭제)

commit
:COMMIT을 해주면 저장하면서 트랜잭션이 종료되고 결과에 반영된다.

rollback
: 이전 상태로 복귀, 삭제했는데 취소하고 싶은 경우 ROLLBACK을 사용해주시면 된다.

❗ commit을 안한 경우에만 유효하다.
이미 commit을 한 상태라면, rollback을 해도 원상복귀가 불가능하다.

rollup

rollup: 그룹의 총 집계 결과를 보여준다. 
SELECTDEPTNO,JOB,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);


3. 집합연산자

type과 컬럼 개수가 동일해야 한다. select 3개면 밑에 select도 3개

(select empno,ename,to_char(111) as coll from emp)
union 
(select 111,'abc', 'aaaa' from dual)
union 
(select 122,'abc','asd' from dual);

union : 합치기 (중복 제거)

(select * from emp_history)
union
(select * from emp);

union all: 합치기 (중복 허용)

(select * from emp_history)
union all
(select * from emp);

쿼리에 개별적으로 order by절 사용할 수 없다.

--정렬을 해야 하는 경우 
select *
from((select * from emp_history)
        union all
     (select * from emp))
order by ename;

intersect: 교집합

(select * from emp)
intersect
(select * from emp_history);

minus: 차집합

(select * from emp)
minus
(select * from emp_history);
post-custom-banner

0개의 댓글