서론
2과목 1장 SQL 기본 (DDL)
DDL
CREATE
기본형식
CREATE TABLE 테이블명
(칼럼명1 데이터_타입 [DEFAULT],
칼럼명2 데이터_타입 [DEFAULT],
CONSTRAINT 제약조건명 PRIMARY KEY (기본키칼럼));
CREATE TABLE 테이블명
(칼럼명1 데이터_타입 [DEFAULT],
칼럼명2 데이터_타입 [DEFAULT],
칼럼명3 데이터_타입
CONSTRAINT 제약조건명 PRIMARY KEY (기본키칼럼),
CONSTRAINT 제약조건명 FOREIGN KEY(칼럼명3) REFERENCES 참조할테이블(참조칼럼),
CONSTRAINT 제약조건명 CHECK(조건문));
#예시
CREATE TABLE PRODUCT
(PROD_ID VARCHAR2(10) NOT NULL,
STORAGE_FK VARCHAR2(10),
PROD_NM VARCHAR2(100) NOT NULL,
REG_DT DATE NOT NULL,
REGR_NO NUMBER(10) NULL,
USE_YN VARCHAR(3) CONSTRAINT CHECK_USE CHECK (USE_YN IN ('YES','NO')), #CHECK 제약조건
CONSTRAINT PRODUCT_PK_CON PRIMARY KEY (PROD_ID), #기본키 제약조건
CONSTRAINT STORAGE_CON FOREIGN KEY(STORAGE_FK) REFERENCES STORAGE(STORAGE_ID) ON DELETE CASCADE, #외래키
CONSTRAINT CHECK_REGR_NO CHECK(REGR_NO > 0)); #CHECK 제약조건
테이블 복사
#오라클
#기존 테이블을 통해 새로운 테이블 생성
CREATE TABLE 테이블명
AS SELECT 칼럼1, 칼럼2, 칼럼N FROM 기존_테이블명;
#예시
CREATE TABLE PRODUCT_2
AS SELECT PROD_ID, PROD_NM FROM PRODUCT;
#SQL Server
SELECT * INTO 테이블명 FROM 기존_테이블명;
#예시
SELECT PROD_ID, PROD_NM INTO PRODUCT_2 FROM PRODUCT;
인덱스 생성
#인덱스 생성
CREATE INDEX 인덱스명 ON 테이블(칼럼);
#예시
CREATE INDEX IDX_NAME ON PRODUCT(PROD_NM);
ALTER
칼럼 추가
#칼럼 추가 (ADD)
ALTER TABLE PRODUCT ADD
(COLUMN1 VARCHAR(15) DEFAULT '123' NOT NULL,
COLUMN2 NUMBER(5,2));
#칼럼 삭제 (1개 : DROP COLUMN 칼럼명)
ALTER TABLE PRODUCT DROP COLUMN COLUMN1;
#칼럼 삭제 (여러개 : DROP (칼럼명1, 칼럼명2, 칼럼명N))
ALTER TABLE PRODUCT DROP (COLUMN2, COLUMN3);
#제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
#예시
ALTER TABLE PRODUCT DROP CONSTRAINT PRODUCT_PK;
#칼럼 수정 (MODIFY)
#오라클
ALTER TABLE PRODUCT MODIFY
(COLUMN1 VARCHAR(10) DEFAULT 'ABC' NOT NULL,
COLUMN2 NUMBER(7,2));
#SQL Server (여러개 칼럼 한번에 변경 불가능)
ALTER TABLE PRODUCT ALTER COLUMN
칼럼1 VARCHAR(10) NOT NULL;
#SQL Server (DEFAULT 제약조건 추가)
ALTER TABLE PRODUCT
ADD CONSTRAINT DF_COL1 DEFAULT 'A' FOR COLUMN1;
RENAME
#RENAME
#칼럼명 변경 (오라클) (COLUMN1 -> COLUMN1_TMP)
ALTER TABLE PRODUCT RENAME COLUMN COLUMN1 TO COLUMN1_TMP;
#테이블 명 변경
RENAME PRODUCT TO PRODUCT_NEW;
DROP
#테이블 삭제
DROP TABLE PRODUCT;
TRUNCATE
#테이블 구조는 그대로, 테이블 데이터 전체 삭제
TRUNCATE TABLE PRODUCT;
제약조건
Delete(/Modify) Action
#기본형식
CONSTARINT 제약조건명 REFERENCES Master(참조칼럼)
ON [DELETE/UPDATE] [CASCADE/SET NULL/SET DEFAULT/RESTRICT/NO ACTION];
- Cascade : Master 삭제 시, Child도 같이 삭제
- Set Null : Master 삭제 시, Child 해당 필드 Null
- Set Default : Master 삭제 시, Child 해당 필드 Default 값으로 설정
- Restrict : Child 테이블에 PK 값이 없는 경우만 Master 값 삭제 허용
ex) Master_PK = '001' 삭제할 때, Child_FK = '001'이 없을 경우에만 삭제 가능 - No Action : 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음.
Insert Action
CONSTRAINT 제약조건명 REFERENCES Master(참조칼럼)
ON INSERT [AUTOMATIC/SET NULL/SET DEFAULT/DEPENDENT/NO ACTION];
- Automatic : Master 테이블에 PK가 없는 경우, Master PK 생성 후 Child 입력
- Set Null : Master 테이블에 PK가 없는 경우, Child 외래키를 Null 값으로 처리
- Set Default : Master 테이블에 PK가 없는 경우, Child 외래키를 Default 값으로 처리
- Restrict : Master 테이블에 PK가 존재할 때만 Child 입력 허용
ex) Master_PK = '001'이 있을 때만, Child_FK = '001' 입력 허용 - No Action : 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음.
중요
- TRUNCATE, DROP 명령어는 로그를 남기지 않는다.
따라서 로그를 남기며, 데이터를 삭제하기 위해서는 DELETE FROM 테이블명; 을 이용 - NULL
1) 모르는 값
2) 값의 부재
3) NULL과의 모든 비교 (IS NULL 제외)는 알 수 없음 (Unknown)을 반환
4) 공백문자 or 0을 의미하지는 않는다. 아스키코드 (NULL : 00, 공백 : 32, 숫자0 : 48)
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 2과목 2장 SQL 활용 (0) | 2023.09.01 |
---|---|
[SQLD] 2과목 SQL 기본 정리 + 오답노트_1 (0) | 2023.08.31 |
[SQLD] 1과목 2장 5~6절 (0) | 2023.08.28 |
[SQLD] 1과목 2장 4절 (0) | 2023.08.27 |
[SQLD] 1과목 2장 1~3절 (0) | 2023.08.26 |