[SQL 기초]오라클_UPDATE, CASE, TCL, 삭제용어

현서의 성장일지·2024년 4월 10일
1

SQL

목록 보기
4/14

예시로 쓸 테이블

create table student(
 sno varchar2(3) ,
 sname nvarchar2(10),
 year varchar2(10),
 dept nvarchar2(10) ,
 constraint   student_sno_pk   primary  key(sno));


create table course(
 cno varchar2(5) primary key,
 cname nvarchar2(10),
 credit varchar2(3),
 dept nvarchar2(10),
 prname nvarchar2(10));


create table enrol(
 sno varchar2(3) ,
 cno varchar2(5) ,
 grade varchar2(3),
 midterm int,
 final int ,
 constraint enrol_sno_fk foreign key(sno) references student(sno),
 constraint enrol_cno_fk foreign key(cno) references course(cno),
 constraint enrol_combo_pk primary key(sno, cno));

왼쪽부터 student, course, enrol 테이블

🌵 UPDATE SET

 특정 칼럼의 값 바꾸기

📌 update 테이블명 set 조건

순서 유의해서 작성!!

  • student 테이블의 sno가 600인 학생의 전공을 만화로 바꾸어라
update student set dept = '만화' where sno = '600'; 

🌵 CASE

 특정 조건으로 분류하기

📌case when 조건

case 구절 안은 when 조건 then 반환값 ELSE 조건하지 않는 값 반환으로 구성된다
칼럼명을 별칭으로 바꿀 수는 있지만 별칭을 받아와서 조건을 주는 것은 안 됨!

  • 기본문⬇
select s.sno, sname, sum(MIDTERM+final), round(avg(MIDTERM+final),1)/2 ,
    case --별칭 사용 안 됨
        when( (round(avg(MIDTERM+final),1)/2) >= 90) then '우수'
        when( (round(avg(MIDTERM+final),1)/2) >= 85) then '보통'
        else '미달'
    end 성적구분
from student s join enrol e
on s.sno = e.sno
group by s.sno, sname;


기본문 방식으로 사용할 수 있지만 switch 방식으로도 사용할 수 있다.

  • switch문 방식⬇
select sno, sname,
    case sno
        when '100' then '맞습니다'
        else '아닙니다'
    end  as 찾기
from student;

🌵 TCL(Transaction_트랜잭션)

 COMMIT, ROLLBACK, SAVEPOINT

📌 트랜잭션 = 한꺼번에 수행되어야 할 최소 작업 단위.
  논리적 작업 단위로 불리며 논리적으로 한 번에 수행되어햐 할 작업 단위이다.

  • COMMIT;
    트랜잭션 작업이 정상 완료되면 변경 내용을 영구 저장한다.
  • ROLLBACK; / ROLLBACK TO 세이브포인트명;
    트랜잭션 작업틀 취소하고 SAVEPONINT 시점으로 이동한다.
  • SAVEPOINT 세이브포인트명;
    현 트랜잭션 작업에 이름을 지정한다. 즉, 하나의 트랜잭션 안에 구역을 나누는 것이다.
select * from student; -- 기존 5개 레코드
commit;

insert  into student (sno, sname) values('700','둘리T1');
savepoint t1; --t1
commit;
ROLLBACK ; 
select * from student; -- 6개 레코드 출력

insert  into student (sno, sname) values('800','둘리T1');
savepoint T2; --대소문자 구분해야 함 -> 800번 저장
commit; 
ROLLBACK ; 
select * from student; -- 7개 레코드 출력
insert  into student (sno, sname) values('900','둘리T1-1');

insert  into student (sno, sname) values('901','둘리T1-1');  -- 롤백시 출력 안됨
ROLLBACK T2; 
select * from student;-- 7개 레코드 출력(901 둘리 미출력)

🌵 삭제용어

 DELETE, TURNCATE, DROP

DELETETURNCATEDROP
구조DMLDDLDDL
특징- ROLLBACK 가능
-조건처리 가능
-테이블 구조 유지
-속도가 떨어짐
-조건처리 불가능
테이블 구조 삭제
-전체 레코드 제거할 때 유용
-ROLLBACK불가능
-테이블 구조 제거
예시delete from student;truncate table student;drop table student;
profile
초보 개발자의 기술 블로그

1개의 댓글

comment-user-thumbnail
2024년 4월 12일

와우! 유용하네요!

답글 달기