본문 바로가기
프로그래밍/데이터베이스

[SQL 기초 - 12장] 오라클 SQL DELETE, DROP, CREATE 구문(feat. 제약조건)

by 잡학다방 2024. 12. 17.
반응형

안녕하세요!

오늘은 DML 의 마지막인 DELETE 구문을 알아보려고 합니다.

어제 DML 못 보신분들은 알죠? 복습 필요합니다~!

DML - DELETE​

DELETE 는 많이 본 단어죠?

예상 하셨겠지만 테이블의 행을 삭제할 때 사용하는 SQL 입니다.

먼저 문법을 보시면

DELETE 문법

먼저 어떤 테이블에서 삭제할지를 결정하고,

테이블의 어떤 행을 삭제할지를 결정해주면 됩니다.

어제 UPDATE 쿼리로 emp 테이블에 사번이 9999번인 사원을 등록했다고 가정하고

(아, 물론 INSERT 로 직접 삽입을 한 후에 하셔도 됩니다!)

다시 DELETE 를 통해 그 사원 정보를 삭제하는 쿼리를 짜보겠습니다.

위와 같이 간단하게 작성할 수 있습니다.

DELETE 구문은 WHERE 절이 따라 온다는 것을 볼 수 있는데요,

따라서 WHERE 절에 서브쿼리도 사용이 가능합니다.

위와 같이 WHERE 절에 서브쿼리를 사용하므로써

삭제할 행을 제한할 수 있습니다.

아! 원래 있던 데이터를 DELETE 하면 완전 날아가는 것이니 COMMIT; 하기 전에

반드시 실습 후에는 ROLLBACK; 명령어를 통해서 다시 복구해주세요~!

(혹은 데이터를 복구할 필요가 없으신 분들은 DELETE 대신에 TRUNCATE 을 사용해 주세요!

문법은 동일합니다. 다만, TRUNCATE 은 ROLLBACK 도 못해요^^;)

DDL

DELETE 를 마지막으로 DML 구문들을 모두 배워봤습니다.

다음으로 DDL 을 배울 건데요,

그 중에서 오늘은 DROP과 CREATE 을 배우도록 하겠습니다!

우선 DDL 은 데이터가 들어갈 공간(table) 을 생성, 삭제,

컬럼 추가, 각종 객체 생성, 수정, 삭제 등의 기능을 하는 녀석입니다.

다만, DDL은 자동 커밋이 되기 때문에 테이블을 생성했다고 하면

ROLLBACK 이 되지 않으므로 테이블 삭제 명령어를 사용해야합니다.

이 점 기억해 두고 시작하겠습니다.

​DROP

DROP은 테이블을 삭제하는 SQL 구문 입니다.

문법은 간단합니다.

 

DROP

위와 같이 작성해주시면 됩니다.

만약 emp 테이블의 복사본인 emp_copy 테이블을 삭제 한다고 하면

위와 같이 작성 해주시면 되는데요,

아까 말씀 드렸다싶이 ROLLBACK 이 되지 않기 때문에

삭제 하기 전에 한 번 생각하고 삭제해주세요!

실습을 할 때는 다음으로 배울 CREATE 으로 복사본을 만든 후 그 테이블을 삭제해주세요.

​CREATE

다음은 CREATE 입니다.

말 그대로 생성. TABLE 을 생성하는 구문입니다.

문법은

CREATE

위와 같습니다.

먼저 테이블명을 정해주시고

그 테이블에 들어갈 컬럼들과 컬럼들의 타입을 정해주시면 되겠습니다.

위는 ranger 라는 테이블을 만들어 본 것인데요,

ranger_no 이라는 컬럼의 데이터는 숫자 이어야 하고,

ranger_nm 의 데이터는 문자(SQL에서 문자 데이터는 보통 VARCHAR2를 사용합니다!),

reg_dt 는 날짜로 지정해 주었는데

값이 없으면 기본값으로 현재날짜가 입력되게 한 것입니다.

위에서 제가 생성한 테이블들의 컬럼 옆에

숫자형, 문자형, 날짜형 과 같은 '제약조건'을 걸어 주었는데요

그렇다면 이 제약조건은 무엇인지 알아보겠습니다.

​제약조건

우선 ORACLE DBMS 는 데이터 무결성 이라는 특징을 갖고 있습니다.

잘못된 데이터가 들어가는 것을 방지하는 성격이죠.

예를 들자면,

사원 테이블에 중복된 사워번호가 등록되는 것을 방지하거나,

반드시 입력이 되어야 되는 컬럼의 값을 확인하는 등의 성격입니다.

이 데이터 무결성을 지키기 위해 제공하는 것이 제약조건인데, 5가지가 있습니다.

1. NOT NULL

해당 컬럼에 값이 NULL이 들어오는 것을 제약, 방지한다.

2. UNIQUE

전체 행 중에 해당 컬럼의 값이 중복되면 안된다.

(단, NULL에 대한 중복은 허용한다.)

3. PRIMARY KET = UNIQUE + NOT NULL

(다른 행에 동일한 값이 나오면 안된다)

4. FOREIGN KEY

연관된 테이블에 해당 데이터가 존재해야만 입력이 가능하다.

(ex. emp 테이블에 데이터를 입력할 때 dept 테이블에 존재하지 않는

deptno 값을 입력하는 것을 방지)

5. CHECK 제약 조건(NOT NULL 은 여기에 들어갈 수 있음)

컬럼에 들어오는 값을 정해진 로직에 따라 제어한다.

(ex. 남성 = M, 여성 = F

시스템에는 M, F 두 가지 값만 저장될 수 있도록 제어)

위와 같은 5가지 제약 조건이 있는데요,

그렇다면 제약조건을 생성하는 방법은 어떤것들이 있는지 알아보겠습니다.

1. 테이블 생성시 컬럼 옆에 기술하는 경우

(상대적으로 세세하게 제어하는 것은 불가)

2. 테이블 생성 시 모든 컬럼을 기술하고 나서 제약조건만 별도로 기술

(1번 방법보다 세세하게 제어하는게 가능)

3. 테이블 생성 이후, 객체수정 맹령을 통해 제약조건을 추가

그럼 1번 방법으로 PRIMARY KEY 를 생성 해보겠습니다.

일단 dept 테이블의 정보를 토대로 시작하기 위해

DESC dept; 명령으로 dept 테이블의 데이터 정보를 확인 후 시작 해주세요.

위와 같이 dept_test 테이블을 만들어 보았습니다.

NUMBER 옆에 PRIMARY KET 라고 적어 주시면 됩니다.

그 전에 CONSTRAINT 하고 PK_dept_test 라고 있는데요,

CONSTRAINT는 PK_dept_test라는 별칭을 부여하기 위해 필요한 녀석입니다.

PRIMARY KEY 이외에 다른 조건을 넣어주시고 싶으면

아까 제가 소개해 드렸던 다섯가지중에 하나를

PRIMARY KEY 위치에 작성 해주시면 됩니다.

오늘은 DELETE, DROP, CREATE 에 대해서 알아보았습니다.

이 전까지 배웠던 테이블의 컬럼들을 가공하는 것이 아니라

테이블 자체를 가공하는 것인만큼

좀 더 신경써서 사용 해주시면 좋을 것 같네요~!

오늘도 끝까지 봐주셔서 감사합니다!

다음에 또 봐요~!

 

#sql#sqldeveloper#oracle#dbms#select#from#where#groupby#join#outerjoin#조인#서브쿼리#delete#drop#create#제약조건#rollback#commit#primarykey#notnull#check#contstraint

반응형