뷰(View)
뷰(View)는 데이터베이스에서 특정 쿼리의 결과를 마치 하나의 테이블처럼 사용할 수 있도록 만들어진 가상의 테이블입니다. 뷰는 실제 데이터를 저장하지 않고, 기존 테이블의 데이터에서 추출된 결과를 저장하는 쿼리로 구성됩니다. 뷰를 통해 테이블의 복잡한 데이터를 쉽게 조회하고, 특정 사용자에게 필요한 정보만 제한적으로 제공할 수 있습니다.
뷰의 특징
- 가상 테이블
- 특정 쿼리의 결과를 테이블처럼 사용
- 보안 및 접근 제한
[기본구조]
CREATE VIEW 뷰이름 AS
SELECT 열1, 열2, ...
FROM 테이블명
WHERE 조건;
- 데이터베이스 내 뷰 확인
-- 테이블의 유형을 확인하는 명령 ( 뷰와 테이블 구분 가능 )
SHOW FULL TABLES;
예제 : 부서 번호가 20인 직원 정보만 조회할 수 있도록 별칭을 설정한 뷰
CREATE VIEW emp_vu_20 AS
SELECT empno AS no, ename AS name, mgr, job
FROM emp
WHERE deptno = 20;
+------+-------+------+---------+
| no | name | mgr | job |
+------+-------+------+---------+
| 7369 | SMITH | 7902 | CLERK |
| 7566 | JONES | 7839 | MANAGER |
| 7788 | SCOTT | 7566 | ANALYST |
| 7876 | ADAMS | 7788 | CLERK |
| 7902 | FORD | 7566 | ANALYST |
+------+-------+------+---------+
-- empno → no: 직원 번호를 의미하며, 열 이름을 no로 지정하여 간단하게 표현.
-- ename → name: 직원 이름을 의미하며, 열 이름을 name으로 지정하여 이해하기 쉽게 표현.
실습 : 사원번호, 사원이름, 담당업무, 연봉 정보, 호봉을 조회할 수 있는 emp_salgrade 뷰를 생성
CREATE VIEW emp_salgrade AS
SELECT
e.empno,
e.ename,
e.job,
(e.sal * 12 + IFNULL(e.comm, 0)) AS annsal,
s.grade
FROM emp e
INNER JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal;
SELECT * FROM emp_salgrade;
+-------+--------+-----------+----------+-------+
| empno | ename | job | annsal | grade |
+-------+--------+-----------+----------+-------+
| 7369 | SMITH | CLERK | 9600.00 | 1 |
| 7499 | ALLEN | SALESMAN | 19500.00 | 3 |
| 7521 | WARD | SALESMAN | 15500.00 | 2 |
| 7566 | JONES | MANAGER | 35700.00 | 4 |
| 7654 | MARTIN | SALESMAN | 16400.00 | 2 |
| 7698 | BLAKE | MANAGER | 34200.00 | 4 |
| 7782 | CLARK | MANAGER | 29400.00 | 4 |
| 7788 | SCOTT | ANALYST | 36000.00 | 4 |
| 7839 | KING | PRESIDENT | 60000.00 | 5 |
| 7844 | TURNER | SALESMAN | 18000.00 | 3 |
| 7876 | ADAMS | CLERK | 13200.00 | 1 |
| 7900 | JAMES | CLERK | 11400.00 | 1 |
| 7902 | FORD | ANALYST | 36000.00 | 4 |
| 7934 | MILLER | CLERK | 15600.00 | 2 |
+-------+--------+-----------+----------+-------+
- 이 뷰는 emp 테이블과 salgrade 테이블을 조인하여, 사원번호, 사원이름, 담당업무, 연봉, 호봉 정보를 조회할 수 있게 설정되었습니다.
[뷰 정의 확인하기]
- 현재 데이터베이스의 모든 뷰 목록 확인
SHOW FULL TABLES WHERE Table_type = 'VIEW';
- 특정 데이터베이스의 모든 뷰 정보 확인
SELECT *
FROM information_schema.views
WHERE table_schema = '데이터베이스이름';
-- 예시
SELECT TABLE_NAME AS view_name,
VIEW_DEFINITION AS view_definition
FROM information_schema.views
WHERE table_schema = 'sample';
- 특정 뷰의 생성 쿼리 확인
SHOW CREATE VIEW 뷰이름;
인라인 뷰
서브쿼리를 이용해 임시로 생성한 가상의 테이블을 말하며, 주로 SELECT 문 내에서 사용되는 일회성 뷰. 인라인 뷰는 데이터베이스에 영구적으로 저장되지 않으며, 특정 쿼리에서만 일시적으로 사용됩니다.
- 데이터 그룹화
- 집계 함수 활용
- 조건부 데이터 생성
- 예시
SELECT e.empno, e.ename, d.deptno, d.dname
FROM (SELECT * FROM emp WHERE deptno IN (10, 20)) e --인라인 뷰
INNER JOIN dept d
ON e.deptno = d.deptno;
[CREATE OR REPLACE]
CREATE OR REPLACE VIEW emp_sal AS
SELECT empno, ename, job, sal * 12 + IFNULL(comm, 0) AS annsal
FROM emp;
- emp_sal이라는 뷰를 생성하거나, 이미 존재한다면 기존 뷰를 새 정의로 교체합니다.
- 이를 통해 기존 뷰가 있을 경우 DROP 없이도 수정 가능합니다.
- CREATE OR REPLACE VIEW를 통해 뷰를 재정의할 수 있으므로, emp 테이블 구조나 연봉 계산 방식이 변경되면 뷰를 쉽게 수정할 수 있습니다.
'Backend > SQL' 카테고리의 다른 글
| [SQL] DCL(Data Control Language) (0) | 2024.10.29 |
|---|---|
| [SQL] 데이터베이스 사용자 (1) | 2024.10.29 |
| [SQL] 제약조건(Constraints) (3) | 2024.10.29 |
| [SQL] 참조키 : 기본키, 외래키 (0) | 2024.10.29 |
| [SQL] DDL(Data Definition Language) (0) | 2024.10.28 |