교육 (Today I Learned)/SeSAC

SeSAC 6일차 / SQL 기본(SQL 문-5)

Bay Im 2023. 7. 25. 00:24
SeSAC 6일차(2023-07-24)
SQL 기본(SQL 문-5)


데이터 조작

 

- INSERT

각 열에 대한 값이 포함된 새 행 삽입

 

기본 형태)

INSERT INTO table [(column [, column…])]

VALUES (value [, value…]);

 

 

 

- UPDATE

테이블의 데이터 변경

 

기본 형태)

UPDATE table

SET column = value [, column = value, …]

[WHERE condition];

 

 

 

- DELETE

테이블에서 행 삭제

 

ex)

DELETE FROM table_name

WHERE condition;

 

DELETE FROM table_name;

 

 

 

- TRUNCATE

테이블에서 모든 행을 제거하지만 테이블 구조는 그대로 존재한다.

 

ex)

TRUNCATE TABLE table_name;

 

 

 

 

 

Database Transactions

 

- COMMIT ROLLBACK 문의 이점

데이터 일관성 보장

데이터 변경 사항 검토

논리적으로 관련된 작업 그룹화

 

 

 

- 명시적 트랜잭션 제어문

 

- SAVEPOINT

SAVEPOINT 문을 사용하여 현재 트랜잭션에서 마커를 만든다.

ROLLBACK TO SAVEPOINT문을 사용하여 해당 마커로 롤백한다.

 

COMMIT – ROLLBACK

SAVEPOINT A – ROLLBACK to SAVEPOINT A

SAVEPOINT B – ROLLBACK to SAVEPOINT B

 

 

 

- 암시적 트랜잭션 처리

자동 커밋 발생은 DDL, DCL문이 실행되는 경우

 

- FOR UPDATE

SELECT 문에 의해 식별된 모든 행에 대해 Lock을 건다.

ROLLBACK 또는 COMMIT을 실행하는 경우에만 Lock이 해제된다.

 

 

 

 

 

DDL 문을 사용하여 테이블 생성 및 관리

 

- CREATE TABLE

테이블 이름, 열 이름, 열 데이터 형식, 열 크기 등 지정 가능

 

기본 형태)

CREATE TABLE [schema.] table

    (column datatype [DEFAULT expr][, …]);

 

 

- DEFAULT 옵션

삽입 시 열에 대한 기본 값을 지정

 

 

 

- 제약조건

테이블 레벨에서 규칙 강제 적용

테이블이 생성되는 지점이나 테이블 생성 후 시점에서 제약 조건을 만든다.

열 또는 테이블 레벨에서 제약 조건 정의

NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK 존재

 

 

 

- NOT NULL 제약 조건

열이 null 값을 포함하지 않도록 보장

 

 

 

- UNIQUE 제약 조건

열의 모든 값이 고유해야 한다. 열이 중복 값을 가질 수 없다. Null을 입력할 수 있다.

 

 

 

- PRIMARY KEY 제약 조건

각 테이블에 대해 하나의 기본 키만 만들 수 있다.

UNIQUENOT NULL 속성을 소유

 

 

 

- CHECK 제약 조건

각 행이 충족해야 하는 조건 정의

 

 

 

- FOREIGN KEY 제약 조건

열 또는 열 조합을 Foreign key로 지정하고 동일한 테이블 또는 다른 테이블의 primary key 또는 unique key와의 관계를 설정한다.

 

FOREIGN KEY: 하위 테이블의 열을 정의하는데 사용

REFERENCES: 테이블 및 상위 테이블의 열을 식별

ON DELETE CASCADE: 상위 테이블의 행이 삭제될 때 하위 테이블의 종속 행도 삭제

ON DELETE SET NULL: 상위 테이블의 행이 삭제될 때 foreign key 값이 null로 설정

 

 

 

- Subquery를 사용하여 테이블 생성

 

기본 형태)

CREATE TABLE table_name

    [(column, column…)]

AS subquery;

 

 

 

- ALTER TABLE

새 열 추가, 기존 열 정의 수정, 새 열에 대한 기본 값 정의, 열 삭제, 열 이름 바꾸기, 읽기 전용 상태로 테이블 변경 가능

 

ex)

ALTER TABLE table

ADD (column VARCHAR2(9));

 

ALTER TABLE table

MODIFY (column VARCHAR2(30));

 

ALTER TABLE table

ADD CONSTRAINT column

    FOREIGN KEY(column1)

    REFERENCES table(column2);

 

 

 

- 읽기 전용 테이블

테이블을 읽기 전용 모드로 설정하여 DDL문 또는 DML문에 의한 변경 방지

 

기본 형태)

ALTER TABLE table READ ONLY;

 

ALTER TABLE table READ WRITE;

 

 

 

- 테이블 삭제

테이블을 Recycle bin으로 이동

보류 중인 모든 트랜잭션이 커밋 된다.

PURGE 절이 지정되면 테이블 및 해당 데이터를 완전히 제거

 

기본 형태)

DROP TABLE table [PURGE];

 

 

 

 

 

기타 스키마 객체 생성

 

- (View)

뷰는 자체적으로 데이터를 갖고 있지 않지만 테이블의 데이터를 보거나 변경할 수 있는 윈도우와 같다.

 

기본 형태)

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view

[(alias[, alias]…)]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];

 

ex)

CREATE VIEW view_name

AS SELECT column1, column2, column3

FROM table_name

WHERE column4 = 80;

 

 

뷰 수정:

OR REPLACE 옵션 사용시 이미 동일한 이름의 뷰가 있는 경우에도 뷰 생성

 

ex)

CREATE OR REPLACE VIEW view_name

(column1, column2, column3, column4)

AS SELECT …

FROM table_name

WHERE column4 = 80;

 

 

뷰 제거:

뷰를 제거해도 데이터는 손실되지 않는다.

 

기본 형태)

DROP VIEW view_name;

 

 

 

- 시퀀스

정수의 고유 번호를 자동으로 생성할 수 있다.

Primary key 값을 생성하는 데 사용할 수 있다.

 

기본 형태)

CREATE SEQUENCE sequence

    [INCREMENT BY n]  => 시퀀스 번호 사이의 간격 지정

    [START WITH n]  => 생성할 첫 번째 시퀀스 번호 지정

    [{MAXVALUE n | NOMAXVALUE}]

    [{MINVALUE n | NOMINVALUE}]

    [{CYCLE | NOCYCLE}]  => 최대값이나 최소값에 도달한 후에 시퀀스를 계속 생성할지 여부 결정

    [{CACHE n | NOCACHE}];  => 서버가 메모리에 미리 할당하고 저장하는 값의 개수 지정

 

 

 

NEXTVAL CURRVAL Pseudocolumn:

NEXTVAL은 사용 가능한 다음 시퀀스 값을 반환

CURRVAL은 현재 시퀀스 값을 구한다. CURRVAL이 값을 포함하기 전에 해당 시퀀스에 대해 NEXTVAL이 실행되어야 한다.

 

ex)

INSERT INTO table(department_id, department_name, location_id)

VALUES (dept_deptid_seq.NEXTVAL, ‘Support’, 2500);

 

SELECT dept_deptid_seq.CURRVAL

FROM dual;

 

 

 

- 인덱스

포인터를 사용하여 행 검색 속도를 높일 수 있는 스키마 객체

인덱스를 생성하면 일부 쿼리 성능 향상

 

기본 형태)

CREATE [UNIQUE] [BITMAP] INDEX index

ON table (column[, column]…);