1. 뷰 (View)
개요
- 뷰(View)는 하나 이상의 테이블에서 파생된 가상의 테이블입니다. 데이터베이스에서 뷰는 주로 자주 사용되는 데이터 집합을 정의하여 쿼리를 단순화하는 데 사용됩니다.
- 뷰는 실제로 데이터를 저장하지 않으며, 원본 테이블의 데이터를 기반으로 실시간으로 제공됩니다.
- 뷰를 통해 데이터 접근을 통제하고 보안을 강화할 수 있습니다.
- 뷰 확인: 현재 데이터베이스에 정의된 뷰 목록을 확인하려면 다음 쿼리를 실행합니다:
SELECT * FROM USER_VIEWS;
뷰의 종류
- 단순 뷰: 한 개의 원본 테이블을 기반으로 생성된 뷰입니다.
- 복합 뷰: 두 개 이상의 원본 테이블을 조인하여 생성된 뷰입니다.
2. 단순 뷰
- 단순 뷰는 한 개의 원본 테이블에서 생성되며, 일부 DML(데이터 조작 언어) 작업이 가능합니다.
- DML 제약 사항:
- INSERT:
- 뷰에서 정의된 가상 컬럼이 있을 경우 삽입할 수 없습니다.
- 뷰가 선택하지 않은
NOT NULL
열이 기본 테이블에 존재할 경우에도 삽입이 불가합니다.
- UPDATE:
- 뷰에서 정의된 가상 컬럼이 있을 경우 수정할 수 없습니다.
ROWNUM
이 포함된 뷰도 업데이트가 불가능합니다.
- DELETE:
- 그룹 함수,
GROUP BY
절, 또는DISTINCT
키워드가 포함된 뷰에서 삭제할 수 없습니다.
- 그룹 함수,
- INSERT:
3. 복합 뷰
- 복합 뷰는 두 개 이상의 테이블을 조인하여 생성됩니다.
- 복합 뷰는 기본적으로
INSERT
,UPDATE
,DELETE
와 같은 DML 작업을 지원하지 않습니다.
4. 뷰 생성 및 옵션
뷰 생성
- 뷰를 생성하려면 다음과 같은 SQL 구문을 사용합니다:
CREATE [OR REPLACE] VIEW 뷰이름 AS 서브쿼리;
- 예시:
CREATE OR REPLACE VIEW VIEW_EMP AS ( SELECT EMPLOYEE_ID AS EMP_ID, FIRST_NAME, JOB_ID, SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = 60 );
옵션
WITH CHECK OPTION: 뷰에서 조건을 만족하는 데이터만 수정 가능하게 설정합니다.
CREATE OR REPLACE VIEW VIEW_EMP AS ( SELECT EMPLOYEE_ID AS EMP_ID FROM EMPLOYEES WHERE DEPARTMENT_ID IN (60,70,80) ) WITH CHECK OPTION;
WITH READ ONLY: 뷰를 통해 데이터 조회만 가능하고, DML 작업(삽입, 수정, 삭제)은 불가능하게 설정합니다.
CREATE OR REPLACE VIEW VIEW_EMP AS ( SELECT EMPLOYEE_ID AS EMP_ID FROM EMPLOYEES ) WITH READ ONLY;
5. 뷰 데이터 검색 및 삭제
뷰 데이터 검색
- 뷰의 데이터를 조회하는 SQL 문은 다음과 같습니다:
SELECT * FROM 뷰이름;
뷰 삭제
- 뷰를 삭제할 때는 다음과 같은 SQL 문을 사용합니다:
DROP VIEW 뷰이름;
6. 시퀀스 (Sequence)
개요
- 시퀀스는 자동으로 유일한 번호를 생성하여 주로 기본 키(
PK
) 값을 생성하는 데 사용됩니다. - 시퀀스 확인: 현재 데이터베이스에 정의된 시퀀스 목록을 확인하려면 다음 쿼리를 실행합니다:
SELECT * FROM USER_SEQUENCES;
시퀀스 생성
- 시퀀스를 생성하는 SQL 구문은 다음과 같습니다:
CREATE SEQUENCE 시퀀스이름 START WITH 시작값 INCREMENT BY 증가값 [MINVALUE 최소값] [MAXVALUE 최대값] [CYCLE NO CYCLE] [CACHE size] [NOORDER];
- 예시:
CREATE SEQUENCE DEPTS_SEQ START WITH 1 INCREMENT BY 1 MAXVALUE 10 NOCACHE NOCYCLE;
시퀀스 수정
- 시퀀스를 수정하는 SQL 문은 다음과 같습니다:
ALTER SEQUENCE 시퀀스이름 [START WITH 시작값] [INCREMENT BY 증가값] [MINVALUE 최소값] [MAXVALUE 최대값] [CYCLE NO CYCLE] [CACHE size] [NOORDER];
- 예시:
ALTER SEQUENCE DEPTS_SEQ MAXVALUE 1000;
시퀀스 조회 및 사용
- 시퀀스의 현재 값을 조회하는 SQL 문은 다음과 같습니다:
SELECT DEPTS_SEQ.CURRVAL FROM DUAL;
- 시퀀스의 다음 값을 조회하고 사용하는 방법:
SELECT DEPTS_SEQ.NEXTVAL FROM DUAL; INSERT INTO DEPTS VALUES (DEPTS_SEQ.NEXTVAL, 'EXAMPLE');
시퀀스 삭제
- 시퀀스를 삭제하는 SQL 문은 다음과 같습니다:
DROP SEQUENCE 시퀀스이름;
7. 오라클 시퀀스 작동 방식
- 시퀀스 생성:
CREATE SEQUENCE
명령을 사용하여 시퀀스를 생성합니다. 시작값, 증가값, 최대값 등을 설정할 수 있습니다. - 다음 값 가져오기:
SELECT <시퀀스이름>.NEXTVAL
쿼리를 사용하여 다음 값을 가져옵니다. 이 값은 이미 사용된 값보다 1씩 증가합니다. - 데이터 삽입: 레코드를 삽입할 때 시퀀스에서 가져온 값을 사용하여 고유한 식별자를 지정합니다.
예제:
-- customers 테이블 생성
CREATE TABLE customers (
customer_id NUMBER PRIMARY KEY,
name VARCHAR2(50),
email VARCHAR2(100)
);
-- customer_id 시퀀스 생성
CREATE SEQUENCE customer_id_seq START WITH 1 INCREMENT BY 1 NOCACHE;
-- 고객 데이터 삽입
INSERT INTO customers (customer_id, name, email)
VALUES (customer_id_seq.NEXTVAL, '홍길동', 'hong@example.com');
INSERT INTO customers (customer_id, name, email)
VALUES (customer_id_seq.NEXTVAL, '이순신', 'lee@example.com');
8. 오라클 시퀀스 주의 사항
- 시퀀스 값 충돌: 여러 사용자가 동시에 시퀀스의 다음 값을 요청할 경우 값 충돌이 발생할 수 있습니다. 이를 방지하기 위해
NOCACHE
옵션을 사용하는 것이 좋습니다. - 시퀀스 시작값 및 증가값 설정: 시작값과 증가값을 적절히 설정해야 하며, 음수 값을 사용하면 오류가 발생할 수 있습니다.
- 시퀀스 권한 관리:
CREATE SEQUENCE
권한이 있는 사용자만 시퀀스를 생성 및 수정할 수 있습니다.
9. 오라클 시퀀스 삭제 방법
- 시퀀스를 삭제할 때는
DROP SEQUENCE
명령을 사용합니다. 다음은 시퀀스를 삭제하는 예시입니다:DROP SEQUENCE customer_id_seq;
- 주의: 시퀀스를 삭제하면 생성된 값은 다시 사용할 수 없으므로, 삭제 전에 사용 여부를 꼼꼼히 확인해야 합니다.
10. 오라클 시퀀스 관련 권한
오라클 시퀀스는 다음과 같은 권한으로 제어됩니다:
- CREATE SEQUENCE: 시퀀스를 생성할 수 있는 권한입니다.
- ALTER SEQUENCE: 시퀀스를 수정할 수 있는 권한입니다.
- DROP SEQUENCE: 시퀀스를 삭제할 수 있는 권한입니다.
이 권한은 각각 CREATE SEQUENCE
, ALTER SEQUENCE
, DROP SEQUENCE
명령을 사용할 때 필요합니다.
'🗄️ Backend > SQL' 카테고리의 다른 글
SQL 권한 및 사용자 생성 가이드 (0) | 2024.10.15 |
---|---|
SQL 인덱스 개요 (0) | 2024.10.15 |
데이터베이스 제약조건의 종류와 예시 (0) | 2024.10.14 |
데이터베이스 트랜잭션 및 테이블 관리 (0) | 2024.10.14 |
SQL 서브쿼리 (Subquery)와 데이터 조작 명령어 (DML) 정리 (4) | 2024.10.14 |