SQL_DML(INSERT, UPDATE, DELETE), DDL(CREATE, ALTER, DROP, RENAME, TRUNCATE), 시퀀스, 뷰
1. DML 이란
- 데이터 조작어 (Data Manipulation Language)
- 테이블에 원하는 데이터를 입력/수정/삭제한다.
2. INSERT
- 테이블에 새로운 데이터를 튜플(행) 단위로 입력
- INSERT INTO 테이블명 ( COLUMN_LIST ) VALUES ( COLUMN_LIST에 입력할 값 리스트)
[예시]
INSERT INTO TB_CUST (
CUST_ID
, CUST_NAME
, PASSWD
) VALUES (
'HELLO'
, '홍길동'
, '12345'
) ;
3. UPDATE
- 테이블에 있는 기존의 데이터를 변경
- UPDATE 테이블명 SET 바꿀컬럼 = 바꿀값 WHERE 바꾸고싶은행조건 ;
[예시]
UPDATE TB_CUST
SET CUST_NAME = '이름변경'
, ACT_POINT = ACT_POINT + 200
WHERE CUST_ID = 'C0001' ;
4. DELETE
- 테이블에 존재하는 데이터를 튜플(행) 단위로 삭제
- DELETE FROM 테이블명 WHERE 삭제하고싶은행조건 ;
[예시]
DELETE FROM TB_CUST_BADGE
WHERE CUST_ID = 'C0001'
AND BADGE_ID = 'B001' ;
1. DDL 이란?
- 테이블과 같은 객체를 생성/수정/삭제
2. CREATE
- 새로운 객체(OBJECT) 를 생성할 때 사용하는 명령어
- CREATE TABLE …테이블 생성
CREATE USER … 사용자 계정 생성
CREATE SEQUENCE … 시퀀스 생성
CREATE VIEW … 뷰 생성
[예시]
CREATE TABLE QUIZ_TABLE (
Q_ID NUMBER (3,0) NOT NULL , -- 3자리수 + 소수점 0자리/ 꼭 입력되야 한다.
Q_CONTENT VARCHAR2(200) NOT NULL ,
Q_ANSWER VARCHAR2(100) ,
REG_DATE DATE DEFAULT SYSDATE --DATE를 입력하지 않으면 기본적인 SYSDATE로 입력하세요
) ;
** 테이블 생성정보는 SHIFT +F4
- 테이블 생성시 이름규칙 주의사항
• 대소문자 구분을 안합니다. ex) create table aaa .. => AAA 테이블생성
• 중복되는 테이블명을 쓰면 안됩니다. Ex) create table aaa … => 에러! 기존 객체가 있습니다.
• 테이블 내에서 컬럼명이 중복되면 안됩니다. Ex) => 에러! 열명이 중복되었습니
• 문자로 시작 , 예약어는 사용 불가능 합니다. (a-z , A-Z , 0-9 , ㄱ-ㅎ , _ , $ , # 특수문자만 사용가능)
3. ALTER
- 테이블을 잘못 만들어도 삭제할 필요없이 수정이 가능
- ALTER TABLE - ADD 컬럼명
ALTER TABLE - ADD CONSTRAINT 제약조건명 UNIQUE ( 컬럼 ) ;
ALTER TABLE - DROP COLUMN 컬럼명
ALTER TABLE - MODIFY 컬럼명
ALTER TABLE - RENAME COLUMN 컬럼명
1) ALTER TABLE 테이블명 ADD 컬럼명 자료형 [default] [not null ]
- 테이블에 컬럼을 추가
[예시] TB_CUST 테이블에 “BIRTH_YEAR“ 컬럼을 문자형 8BYTE 길이로 추가
ALTER TABLE TB_CUST ADD ( BIRTH_YEAR VARCHAR2(8));
2) ALTER TABLE - ADD CONSTRAINT
(1) PRIMARY KEY (PK) : NOT NULL + UNIQUE
- 식별자 규칙을 물리적 모델링 한 것으로 NULL값 입력 불가, 중복 불가의 특징
- 특정 컬럼을 식별자로 만들면 자동으로 NOT NULL + UNIQUE 성질로 바뀌게 됩니다.
[예시]
ALTER TABLE QUIZ_TABLE ADD CONSTRAINT PK_QUIZ_TABLE PRIMARY KEY( Q_ID ) ;
(2) UNIQUE KEY(UK) : UNIQUE
- PRIMARY KEY 와는 다르게 NULL 값을 입력할 수 있게 하며, 중복은 불가능합니다
[예시]
ALTER TABLE QUIZ_TABLE ADD CONSTRAINT UK_QUIZ TABLE UNIQUE ( Q_CONTENT ) ;
(3) CHECK
- 특정 컬럼에 데이터를 입력할 때 지정한 데이터만 입력할 수 있도록 한다.
[예시] TB_MEMBER 테이블의 DEL_YN 컬럼에 ‘Y‘ , ‘N‘ 값만 입력 가능
ALTER TABLE TB_CUST ADD CONSTRAINT CK_DEL_YN CHECK (DEL_TN IN ('Y','N'));
(4) FOREIGN KEY (FK) = 외래키
- 테이블끼리 연결되어 있는 관계를 물리적 모델링한 것
- ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREIGN KEY (참조받을컬럼) REFERENCES 참조할테이블(참조할컬럼)
[예시] STUDENT_TEL 테이블의 [학생ID] 컬럼은 STUDENT 테이블의 [학생ID] 를 참조하고자 한다.
ALTER TABLE STUDENT_TEL ADD CONSTRAINT FK_STUDENT_FEL FOREIGN KEY (학생ID) REFERENCES STUDENT ( 학생ID)
3) ALTER TABLE - DROP COLUMN 컬럼명
- 테이블에서 컬럼을 삭제합니다.
[예시] TB_CUST 테이블에서 BIRTH_YEAR 컬럼을 삭제해주세요.
ALTER TABLE_TB_CUST DROP COLUMN BIRTH_YEAR
4) ALTER TABLE - MODIFY 컬럼명
- 테이블에서 컬럼 속성을 변경
[예시] TB_CUST 테이블의 CUST_NAME 컬럼은 문자형 100BYTE를 200BYTE 까지 입력 받을 수 있도록 변경해주세요.
ALTER TABLE TB_CUST MODIFY (CUST_NAME VARCHAR2(200))
5) ALTER TABLE - RENAME COLUMN -- TO --
- 테이블에서 컬럼의 이름을 변경
[예시] STUDENT 테이블이 가지고 있는 학생ID 컬럼의 이름을 STUDENT_ID로 변경해주세요
ALTER TABLE STUDENT RENAME COLUMN 학생ID TO STUDENT_ID
4. DROP
- 테이블을 영구 삭제합니다.
- CASCADE CONSTRAINT 옵션을 추가하면 관련 관계선(FK)도 모두 삭제합니다.
- DROP TABLE 테이블명
[예시1] ALTER TABLE ~ ADD CONSTRAINT FOREIGN KEY (FK) 사용한 후 DROP시 실행X
ALTER TABLE STUDENT_TEL ADD CONSTRAINT FK_STUDENT_FEL FOREIGN KEY (학생ID) REFERENCES STUDENT ( 학생ID) ;
DROP TABLE STUDENT >>>> "오류"
[예시1] DROP TABLE STUDENT CASCADE CONSTRAINT ;
5. DELETE, TRUNCATE, DROP 비교
- DELETE : 데이터 삭제, COMMIT 후 DELETE 하면 데이터 영구 삭제
- TRUNCATE : 모든 데이터 영구 삭제 / 테이블은 유지
- DROP: 모든 데이터 영구 삭제 / 테이블도 삭제
1. 시퀀스
- PK 컬럼 등에 유일한 일련변호를 만들 때 사용
INSERT INTO TB_DEAL ( DEAL_ID
, BUY_ID
, PRD_ID
, DEAL_DT
) VALUES (
'D' || LPAD(SEQ_DEAL_ID.NEXTVAL , 7 , '0')
, 'C0006'
, 'P0001'
, SYSDATE );
1) 생성하기
CREATE SEQUENCE TEST_SEQ
INCREMENT BY 1 --증가할 시퀀스 값
START WITH 1 ; -- 1부터 시작
2) 삭제하기
DROP SEQUENCE TEST_SEQ
2. 뷰
- 일종의 “가상테이블” 을 의미
- 자주 사용하는 쿼리를 저장해 놓고 이용할 수 있어 편리하고 연산이 간편
- 원하는 데이터만 보여줄 수 있게 해 보안 목적으로 사용할 수 있다
1. 생성하기
- SYSTME 계정으로 뷰 생성 권한 필요
- GRANT CREATE VIEW TO NTHNEW ; 입력
- SELECT *
FROM V_CUST_BADGE_COUT --뷰 이름 입력
2. 삭제하기
- DROP VIEW V_CUST_BADGE_COUT