이제 오라클을 공부할 때가 온것같다.
원래 UI위주 개발자지만, 사실 데이터베이스는 필수로 해야하는게 맞지만.
이상하게 오라클하고는 잘 맞지않지만
이번에 View에 대해서 알아봐야하는데,
오라클에 맞춰 조회를 해봤다.
View란?
View는 데이터를 조회하거나 구조를 정의하는 데 도움을 주는 논리적 개체
1. Simple View (단순 뷰)
- 하나의 테이블에서만 데이터를 조회하는 View입니다.
- 데이터 조작 작업(DML: Insert, Update, Delete)을 지원하며, 기본 테이블의 데이터 변경에 영향을 미칩니다.
-- 예시 테이블: EMPLOYEES
CREATE TABLE EMPLOYEES (
EMP_ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50),
DEPARTMENT_ID NUMBER,
SALARY NUMBER
);
-- 단순 뷰 생성
CREATE VIEW EMPLOYEE_SALARY_VIEW AS
SELECT EMP_ID, NAME, SALARY
FROM EMPLOYEES
WHERE SALARY > 5000;
-- 단순 뷰 조회
SELECT * FROM EMPLOYEE_SALARY_VIEW;
2. Complex View (복합 뷰)
- 여러 테이블의 조인, 함수, 그룹핑 등을 포함하는 View입니다.
- 일반적으로 DML 작업을 지원하지 않지만, 기본 테이블의 데이터 조회에 유용합니다.
- 대신 INSTEAD OF 트리거를 사용하면 복합 뷰에서도 DML 작업을 일부 지원할 수 있습니다.
- 예시 테이블: DEPARTMENTS
CREATE TABLE DEPARTMENTS (
DEPARTMENT_ID NUMBER PRIMARY KEY,
DEPARTMENT_NAME VARCHAR2(50)
);
-- 복합 뷰 생성
CREATE VIEW DEPARTMENT_SALARY_VIEW AS
SELECT D.DEPARTMENT_NAME, AVG(E.SALARY) AS AVG_SALARY
FROM EMPLOYEES E
JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY D.DEPARTMENT_NAME;
-- 복합 뷰 조회
SELECT * FROM DEPARTMENT_SALARY_VIEW;
3. Materialized View (물리적 뷰)
- 기본 테이블의 데이터를 물리적으로 저장해 성능을 개선하는 뷰입니다.
- 주기적으로 데이터를 새로고침할 수 있어 보고서 및 분석용으로 적합합니다.
- 데이터베이스에서 기본 테이블 변경 시 자동으로 동기화되도록 설정할 수 있습니다.
-- 물리적 뷰 생성
CREATE MATERIALIZED VIEW EMPLOYEE_STATS_VIEW
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT DEPARTMENT_ID, COUNT(*) AS EMP_COUNT, AVG(SALARY) AS AVG_SALARY
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
-- 물리적 뷰 조회
SELECT * FROM EMPLOYEE_STATS_VIEW;
4. Inline View (인라인 뷰)
- SQL 문 내에 일시적으로 정의된 View입니다.
- 주로 서브쿼리에서 사용되며, 별도의 오브젝트로 저장되지 않고 일회성으로 사용됩니다.
-- 인라인 뷰를 사용한 조회
SELECT DEPARTMENT_NAME, AVG_SALARY
FROM (
SELECT D.DEPARTMENT_NAME, AVG(E.SALARY) AS AVG_SALARY
FROM EMPLOYEES E
JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY D.DEPARTMENT_NAME
)
WHERE AVG_SALARY > 5000;
5. Partitioned View (파티셔닝 뷰)
- 파티션된 테이블과 연동하여 사용되는 View입니다.
- 큰 데이터셋을 분할하여 성능을 개선하는 데 유용합니다.
-- 파티션 테이블: REGION_EMPLOYEES
CREATE TABLE REGION_EMPLOYEES (
EMP_ID NUMBER,
REGION VARCHAR2(50),
SALARY NUMBER
) PARTITION BY LIST (REGION) (
PARTITION NORTH VALUES ('NORTH'),
PARTITION SOUTH VALUES ('SOUTH'),
PARTITION EAST VALUES ('EAST'),
PARTITION WEST VALUES ('WEST')
);
-- 파티셔닝 뷰 생성
CREATE VIEW REGION_SALARY_VIEW AS
SELECT REGION, SUM(SALARY) AS TOTAL_SALARY
FROM REGION_EMPLOYEES
GROUP BY REGION;
-- 파티셔닝 뷰 조회
SELECT * FROM REGION_SALARY_VIEW;
기타
- 구조 확인: DESCRIBE view_name;
- View 정의 확인: SELECT * FROM USER_VIEWS WHERE VIEW_NAME = 'VIEW_NAME';
1. USER_VIEWS
- 현재 사용자가 소유한 뷰 객체의 정의를 확인할 수 있는 뷰.
- 뷰는 데이터베이스에서 특정 쿼리를 저장한 논리적인 테이블로, 이를 통해 실제 데이터베이스 테이블을 기반으로 한 가상 테이블을 생성할 수 있습니다.
- 주요 컬럼
- VIEW_NAME: 뷰의 이름
- TEXT_LENGTH: 뷰 정의의 길이
- TEXT: 뷰의 정의를 포함한 SQL 쿼리
SELECT VIEW_NAME, TEXT_LENGTH, TEXT
FROM USER_VIEWS;
2. Dictionary View (사전 뷰)
- 데이터베이스의 메타데이터에 접근할 수 있도록 하는 뷰
- Oracle Database가 관리하는 시스템 정보와 객체에 대한 데이터를 제공합니다.
- 일반적으로 DBA_, ALL_, USER_로 시작하며, 각 접두사에 따라 조회할 수 있는 권한이 다릅니다.
주요 Dictionary View 종류
- USER_: 현재 사용자가 소유한 객체와 관련된 정보
- ALL_: 현재 사용자가 접근할 수 있는 모든 객체와 관련된 정보
- DBA_: 데이터베이스 관리자가 모든 객체와 관련된 정보를 확인할 수 있는 뷰
예시
- USER_TABLES: 현재 사용자가 소유한 테이블에 대한 정보
- ALL_TAB_COLUMNS: 모든 테이블의 컬럼 정보
- DBA_OBJECTS: 데이터베이스의 모든 객체에 대한 정보
-- 현재 사용자가 소유한 테이블 확인
SELECT TABLE_NAME, TABLESPACE_NAME, STATUS
FROM USER_TABLES;
-- 모든 테이블의 컬럼 정보 확인
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM ALL_TAB_COLUMNS;
-- 데이터베이스의 모든 객체 확인
SELECT OBJECT_NAME, OBJECT_TYPE, OWNER
FROM DBA_OBJECTS;
당분간 오라클 데이터베이스에 대해서 계속 공부해야 할것같다.
'프로그래밍&IT > MySQL, Oracle, DB 공통' 카테고리의 다른 글
[Database] 카타시안 곱 (Cartesian Product) (5) | 2024.10.31 |
---|---|
[Oracle] 인덱스 종류 그리고 인덱스를 이용하는 & 이용못하는 쿼리 (0) | 2024.10.30 |
PL/SQL 블록 구조 (0) | 2022.07.10 |
MySQL 에서 auto_increment 값 초기화 하기 (0) | 2015.02.22 |
MySQL 스토리지 엔진 (0) | 2015.01.13 |