CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • 뷰 사용시 장단점
  • view 삽입, 갱신 연산 제약 예시
  • 뷰 문법
  • 뷰 정의문
  • 뷰 삭제문
  • 단순 뷰와 복합 뷰
  1. database

뷰 (View)


  • 물리적인 테이블을 근거한 논리적인 가상 테이블이다.

  • 테이블에는 데이터가 있지만 뷰에는 데이터가 없고 SQL만 저장되어 있다.

  • 조인문 사용의 최소화로 사용상의 편의성을 최대화 한다.

뷰 사용시 장단점

  • 장점

    • 논리적 데이터 독립성을 제공한다.

    • 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원한다.

    • 복잡하고 긴 쿼리문의 접근을 단순화시킨다.

    • 접근 제어를 통한 자동 보안을 제공한다.

  • 단점

    • 독립적인 인덱스를 가질 수 없다.

    • ALTER VIEW 문을 사용할 수 없다. 즉, 뷰의 정의를 변경할 수 없다.

    • 뷰로 구성된 내용에 대한 삽입, 갱신, 연산에 제약이 따른다.

      • view의 정의에 포함되지 않은 컬럼중에 기본 테이블의 컬럼이 NOT NULL 제약 조건이 지정되어 있는 경우 INSERT 문 사용이 불가하다.

      • view의 정의에 포함되있지 않은 컬럼의 값을 변경할 수 없다.

view 삽입, 갱신 연산 제약 예시

CREATE TABLE 고객 (
    고객ID INT PRIMARY KEY,
    이름 VARCHAR(100),
    주소 VARCHAR(200),
    등록일자 DATE NOT NULL
);

👆와 같은 테이블이 있고 이 테이블을 참조하는

CREATE VIEW 서울고객 AS
SELECT 고객ID, 이름, 주소
FROM 고객
WHERE 주소 LIKE '%서울%';

이런 view가 있다고 가정할 때 등록일자 column은 not null 조건이 포함되어 있기 때문에 위 view를 사용해서 insert 문은 사용할 수 없고 또한 서울고객 view를 사용해서 등록일자 column을 변경할 수 없다.

뷰 문법

뷰 정의문

--문법--
CREATE VIEW 뷰이름[(속성이름[,속성이름])]AS SELECT문;

--고객 테이블에서 주소가 서울시인 고객들의 성명과 전화번호를 서울고객이라는 뷰로 만들어라--
CREATE VIEW 서울고객(성명, 전화번호)
AS SELECT 성명 전화번호
   FROM 고객
   WHERE 주소 = '서울시';

뷰 삭제문

  • 뷰는 재정의 할 수 없으므로 필요한 경우 삭제한 후 재생성해야 한다.

  • 뷰를 삭제해도 기본 테이블의 구조나 데이터에는 전혀 영향을 주지 않는다.

--문법--
DROP VIEW 뷰이름 RESTRICT or CASCADE

--서울고객이라는 뷰를 삭제해라--
DROP VIEW 서울고객 RESTRICT;
  • RESTRICT: 뷰를 다른 곳에서 참조하고 있으면 삭제하지 않는다.

  • CASCADE: 뷰를 참조하는 다른 뷰나 제약조건까지 모두 삭제한다.

Restrict 예시

CREATE VIEW 서울고객 AS
SELECT 고객ID, 이름, 주소
FROM 고객
WHERE 주소 LIKE '%서울%';

다음과 같은 뷰가 있다고 가정하고

CREATE VIEW 서울고객정보 AS
SELECT 이름, 주소
FROM 서울고객
WHERE 이름 LIKE '김%';

다음처럼 서울고객이라는 view를 참조하는 view가 있을 때 RESTRICT 옵션을 걸면 삭제되지 않는다.

단순 뷰와 복합 뷰

단순 뷰
복합 뷰

하나의 테이블로 생성

여러 개의 테이블로 생성

그룹 함수의 사용이 불가능

그룹 함수의 사용이 가능

DISTINCT 사용이 불가능

DISTINCT 사용이 가능

DML 사용이 가능

DML 사용이 불가능

단순 뷰에서 DML 명령어 사용이 불가능한 경우

  • 뷰 정의에 포함되지 않은 컬럼중에 기본 테이블의 컬럼이 NOT NULL 제약 조건이 지정되어 있는 경우 INSERT 문 사용이 불가하다.

  • 뷰에 대한 INSERT 문은 기본 테이블에 NULL 값을 입력하는 형태가 되기 때문이다.

  • DISTINCT를 포함한 경우에도 DML 명령 사용이 불가하다.


ref

PreviousKeyNext인덱스

Last updated 1 year ago

가상 테이블인 뷰
단순 뷰와 복합 뷰
[DB기초] 뷰(View)란 무엇인가? + 간단한 예제