반응형

뷰의 개념과 종류
| 뷰의 개념 뷰는 데이터베이스에 들어있는 진짜 테이블을 바탕으로 맏느 가상 테이블 이다. 진짜 데이터가 저장되어 있는것은 아니지만, 사용자 눈에는 일반 테이블과 똑같이 보인다 뷰의 종류 1. 단순 뷰: 가징 기본이 되는 뷰 구조: 오직 하나의 테이블에서만 데이터를 가져와서 만듦 특징: 뷰를 통해서 데이터를 넣거나(insert), 수정하거나(update), 지우는(delete) 작업이 가능함 * 뷰에서 데이터를 바꾸면 원본 테이블의 데이터도 함께 바뀜 용도: 원본 테이블의 특정 컬럼(열) 만 골라서 보여주고 싶을때 사용 2. 복합 뷰: 여러 가지 기능이 섞인 복잡한 뷰 구조: 두 개 이상의 테이블을 합치거나(Join), 함수를 사용해 계산된 값(수식)을 포함함 특징: 여러 데이터를 섞어 놓았기 때문에, 뷰를 통해 원본 데이터를 수정(DML) 하는데 제한이 많음 * 보통 읽기 전용으로 많이 씀 용도: 여러 테이블에 흩어진 데이터를 하나로 묶어서 한 번에 확인하고 싶을 때 사용 |
✅ 한눈에 비교하기
| 구분 | 단순 뷰 (Simple View) | 복합 뷰 (Complex View) |
| 사용한 테이블 수 | 1개 | 2개 이상 |
| 함수/수식 사용 | 안 함 | 포함될 수 있음 |
| 데이터 수정(DML) | 가능 | 대부분 불가능 |
뷰 명령어와 설명
| CREATE [OR REPLACE] [FORCE] VIEW 뷰_이름 (컬럼_이름, ...) -- 뷰를 새로 만들겠다는 기본 명령어 * OR REPLACE: 기존 것을 지우고 다시 만듦 * FORCE: 기반인 되는 테이블이 아직 없어도 일단 뷰를 강제로 만듦 컬럼 이름: 뷰에서 사용할 이름들을 직정 정할 수 있음. 안 적으면 원본 테이블의 이름을 그대로 가져옴 AS (불러올 데이터를 뽑는 SELECT 문장) [WITH CHECK OPTION] -- 뷰의 조건에 맞는 데이터만 입력하거나 수정할 수 있게 함 * 예시: 나이가 20 세인 뷰라면, 이 뷰를 통해서는 19세 이하의 데이터를 넣지 못하게 막는 것 [WITH READ ONLY]; -- 읽기 전용. 데이터를 넣거나, 지우거나, 바꾸는 행동(DML)을 아예 못하고, 오직 조회(SELECT)만 가능함 |
뷰 삭제와 확인하기
| 뷰 삭제하는 명령어 DROP VIEW 뷰 이름; 뷰 확인하는 명령어 SELECT view_name, text FROM user_views; * view_name은 뷰의 이름, text는 뷰를 만들 때 사용한 SELECT문(쿼리)를 보여준다 * 뷰 권한은 함부로 주지 않는다. 뷰 생성시 GRANT create VIEW TO 사용자_이름; 로 권한 할당 한다 |
실습 하기
| CREATE VIEW ma_result (과목번호, 과목명, 학과, 기말고사평균) -- ma_result 라는 이름의 뷰를 만듦 AS SELECT c.cno, cname, major, ROUND(AVG(result)) -- 학번, 과목명, 학과, 점수평균(반올림) 선택 FROM student s, course c, score r -- 학생(s), 과목(c), 성적(r) 3개 테이블 사용 WHERE s.sno=r.sno AND r.cno=c.cno -- 학생 테이블과 성적 테이블을 학번으로 연결(Join) AND cname='유기화학' -- 과목명이 '유기화학'이 데이터만 필터링 GROUP BY c.cno, cname, major; -- 과목번호, 이름, 학과별로 그룹화하여 평균 계산 |
인라인 뷰(Inline View)
| SELECT 컬럼명 FROM ( -- 여기에 있는 SELECT 문장이 먼저 실행되어 -- 임시로 '가짜 테이블'을 만든다 (이것이 인라인 뷰) SELECT 컬럼1, 컬럼2 FROM 실제테이블 WHERE 조건 ) 별명 -- 이 가짜 테이블의 이름을 지어줘야 한다 (필수) WHERE 조건; 보통 FROM 뒤에는 데이터를 꺼내올 테이블 이름이 온다. 하지만 인라인 뷰는 테이블 이름 대신 괄호() 안에 SELECT 문장을 직접 넣어서 테이블처럼 사용하는것을 말함 **쿼리 안에 들어있는 쿼리** 라고 이해하면 됨 |
인라인 뷰 실습 하기
| 각 부서별 최소 급여자를 검색 한다 SELECT eno, ename, d.dno, sal, msal FROM emp e, (SELECT dno, MIN(sal) msal FROM emp GROUP BY dno) d -- [인라인 뷰] WHERE e.dno = d.dno -- 조인 조건 AND sal = msal; -- 필터 조건 1. 가장 먼저 괄호 안(인라인 뷰)를 실행 한다 - emp 테이블에서 부서번호(dno)별로 그룹을 묶어 가장 낮은 급여((MIN(sal)))을 찾는다 - 이 결과물에 d 라는 임시 이름을 붙여 가상 테이블로 만든다 * 해당 명령어까지 실행한 게 위의 사진이다 2. 메인 테이블(e)과 가상 테이블(d)을 합친다(Join) - e.dno=d.dno 조건을 통해 같은 부서끼리 옆으로 붙인다 3. 사원의 실제 급여(sal)가 최소 급여(msal)와 일치하는 사람만 남긴다 단계별 설명 (더 자세한 프로세스) ![]() 1단계: 인라인 뷰(가짜 테이블) 만들기 컴퓨터는 괄호 () 안의 내용을 가장 먼저 처리 한다 (SELECT dno, MIN(sal) msal FROM emp GROUP BY dno) d * (SELECT DNO ~): d(가상 테이블) 1.emp 테이블을 부서별(GROUP BY dno)로 묶고, 그중에서 제일 작은 월급(MIN(sal))을 찾는다 2. 이 때 계산된 결과(MIN(sal))에 msal 이라는 별명을 부여한다 3. 위 사진처럼 부서별 최소 월급 리스트가 메모리에 잠시 만들어진다 ![]() 2단계: 원본 테이블과 합치기(join) 진짜 사원 정보가 있는 원본 테이블(e)과 방금 만든 리스트(d)를 나란히 세운다 (FROM emp e, ... d) (WHERE e.dno = d.dno) 사원 테이블의 부서 번호(e.dno)와 리스트(d)의 부서 번호(d.dno)가 같은 것끼리 옆으로 붙인다 ![]() 3단계: 진짜 최소 급여자인지 비교하기 AND sal = msal 사원의 실제 월급(sal)과 아까 옆에 붙여둔 쪽지의 숫자(msal)가 똑같은지 비교한다 A사원: 내 월급 3,000원, 우리 부서 꼴찌 월급 800원 -> 탈락(다름) B사원: 내 월급 800원, 우리 부서 꼴찌 월급 800원 -> 합격(똑같음) ![]() 4단계: 최종 결과 출력 합격한 사람들의 정보만 화면에 뿌려준다 |
'Infra & Security Eng > Database Engineering' 카테고리의 다른 글
| 시퀀스 개념, 용도, 생성, 수정, 삭제, 확인 명령어, 게시판 테이블 생성 실습 (0) | 2026.02.12 |
|---|---|
| 인라인 뷰 Top-N 분석과 RANK 개념과 실습 (0) | 2026.02.12 |
| SQL 인덱스의 정의, 종류, 특징, 생성, 삭제, 외래키 관련 정리 (0) | 2026.02.11 |
| SQL 테이블 지우고 명령어로 확인하는 프로세스 (0) | 2026.02.11 |
| 제약 조건 관리 추가 삭제와 비활성화 명령어와 해설 (0) | 2026.02.10 |



