
View = SELECT문의 결과를 테이블처럼 사용할 수 있도록 만든 가상의 테이블
View는 실제 테이블이 아니라 SELECT 결과를 테이블처럼 사용하는 가상 테이블이다.
CREATE VIEW V_커피메뉴 AS
SELECT DRINK_ID AS 음료번호,
DRINK_NAME AS 음료이름,
PRICE AS 가격
FROM DRINK
WHERE CATEGORY = '커피';
CREATE VIEW → View 생성
AS → 뒤의 SELECT문을 View의 정의로 사용
SELECT *
FROM V_커피메뉴;
View를 만든 뒤에는 일반 테이블처럼 SELECT할 수 있음.
SELECT *
FROM V_커피메뉴
WHERE 가격 <= 3000;
PDF에서 강조하는 부분.
View에는 데이터를 복사해서 저장하는 것이 아니라 SELECT문이 저장됨.
SELECT *
FROM V_커피메뉴;
View가 DRINK를 기반으로 만들어졌다면 DRINK의 데이터가 바뀔 경우 View의 결과도 바뀜.
필요한 데이터만 View로 만들어 사용자에게 제공할 수 있음.
기본 테이블의 모든 정보를 보여주지 않고 원하는 컬럼이나 데이터만 View로 제공할 수 있음.
PDF에서는 View를 데이터 보안 측면에서 활용하고, 원하는 내용만 보여줄 수 있다고 설명함.
복잡한 SQL을 View로 미리 만들어두면:
SELECT *
FROM V_주문영수증;
처럼 간단하게 사용할 수 있음.
PDF에서도 복잡한 SQL을 미리 정의하고 이후 간단한 SQL문으로 조회할 수 있다고 설명함.
예:
CREATE VIEW V_커피메뉴 AS
SELECT DRINK_ID, DRINK_NAME, PRICE
FROM DRINK
WHERE CATEGORY = '커피';
→ DRINK의 모든 정보를 보여주지 않고 커피 메뉴만 제공
프로그램에서 복잡한 원본 테이블 구조를 직접 다루지 않고 View를 사용할 수 있음.
즉,
기본 테이블
↓
View
↓
프로그램
형태로 사용할 수 있음.
PDF에서도 View의 장점으로 데이터 독립성을 제시함.
PDF에서 나오는 핵심:
View를 사용할 때 DBMS가 View의 정의를 확인하고 기본 테이블을 조회하는 과정이 필요함.
어떤 View든 UPDATE가 되는 것은 아님.
PDF에서 제시한 대표적인 갱신 불가능 조건:
① 집계 함수 SUM, AVG
② GROUP BY
③ JOIN
④ 기본키 없음
CREATE VIEW V_지점별매출 AS
SELECT C.CAFE_LOCATION,
SUM(D.PRICE * O.QTY) AS 총매출
FROM CAFE C
JOIN DRINK D
ON C.CAFE_ID = D.CAFE_ID
JOIN ORDERS O
ON D.DRINK_ID = O.DRINK_ID
GROUP BY C.CAFE_LOCATION;
이 View에는
SUM
JOIN
GROUP BY
가 있기 때문에 갱신하기 어려움.
DROP VIEW V_커피메뉴;
View를 삭제해도 기본 테이블에는 영향을 주지 않음.
즉,
DROP VIEW
↓
View만 삭제
↓
DRINK 테이블은 그대로
데이터베이스의 구조와 객체 정보를 저장하는 메타데이터
데이터에 대한 데이터
예를 들어 실제 데이터가:
메가커피
메가리카노
2000원
이라면 메타데이터는:
DRINK라는 테이블이 존재한다.
DRINK_ID라는 컬럼이 있다.
DRINK_ID의 자료형은 NUMBER다.
같은 데이터베이스의 구조 정보임.
PDF 기준으로:
등을 저장함.
테이블, 컬럼, 데이터 타입 등의 구조 정보를 저장.
사용자마다 어떤 테이블을 조회하거나 수정할 수 있는지 관리.
DBMS가 SQL을 실행할 때 테이블 구조나 인덱스 정보를 확인해서 질의 처리에 활용.
테이블 등의 정보를 조회할 수 있음.
테이블을 만들거나 삭제하면 시스템 카탈로그도 자동으로 변경됨.
데이터베이스 구조를 관리하는 중요한 정보이기 때문에 직접 수정할 수 없음.
SELECT TABLE_NAME
FROM USER_TABLES;
USER_TABLES
→ 사용자가 만든 테이블 정보
SELECT COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
NULLABLE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'DRINK';
USER_TAB_COLUMNS
→ 테이블의 컬럼 구조 확인
| 컬럼 | 의미 |
|---|---|
COLUMN_NAME | 컬럼 이름 |
DATA_TYPE | 데이터 타입 |
DATA_LENGTH | 데이터 길이 |
NULLABLE | NULL 허용 여부 |
⚠️ TABLE_NAME = 'DRINK'처럼 테이블 이름은 대문자로 작성.
SELECT TABLE_NAME,
CONSTRAINT_NAME,
CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
ORDER BY TABLE_NAME;
USER_CONSTRAINTS
→ 제약조건 정보 확인
예:
PRIMARY KEY
FOREIGN KEY
CHECK
SELECT VIEW_NAME
FROM USER_VIEWS;
USER_VIEWS
→ 내가 만든 View 목록 확인
SELECT VIEW_NAME, TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = 'V_지점별매출';
TEXT
→ 해당 View를 만들 때 사용한 SELECT문 확인
PDF가 직접적으로 다루는 핵심은 View와 시스템 카탈로그지만, 네 수행평가 실습에서는 그걸 만들기 위해 아래 SQL 개념도 사용하고 있음.
SELECT DRINK_NAME, CATEGORY, PRICE
FROM DRINK;
→ 데이터 조회
WHERE PRICE >= 4000
→ 조건에 맞는 데이터 조회
WHERE DRINK_NAME LIKE '%라떼%'
→ 특정 문자열 검색
ORDER BY PRICE DESC;
→ 결과 정렬
JOIN DRINK D
ON C.CAFE_ID = D.CAFE_ID
→ 여러 테이블 연결
SUM()
AVG()
MAX()
MIN()
COUNT()
→ 여러 데이터를 하나의 값으로 계산
GROUP BY C.CAFE_LOCATION
→ 특정 기준으로 데이터를 그룹화
HAVING SUM(D.PRICE * O.QTY) >= 5000
→ 그룹화된 결과에 조건 적용
WHERE PRICE = (
SELECT MAX(PRICE)
FROM DRINK
);
→ SQL 안에 SQL을 넣어서 결과를 이용
시험 전에 이 구조로 머릿속에 넣으면 돼.
[VIEW]
│
├─ 정의
│ └─ SELECT 결과를 테이블처럼 사용하는 가상 테이블
│
├─ 특징
│ ├─ 실제 데이터 저장 X
│ ├─ SELECT문 저장
│ ├─ 기본 테이블 변경 → View 결과 변경
│ └─ 필요한 데이터만 보여줄 수 있음
│
├─ 장점
│ ├─ 복잡한 질의 단순화
│ ├─ 데이터 보안
│ └─ 데이터 독립성
│
├─ 단점
│ ├─ 모든 View 갱신 가능 X
│ └─ 성능 저하 가능
│
├─ 갱신 불가능
│ ├─ SUM / AVG
│ ├─ GROUP BY
│ ├─ JOIN
│ └─ 기본키 없음
│
└─ SQL
├─ CREATE VIEW
├─ SELECT FROM VIEW
└─ DROP VIEW
[시스템 카탈로그]
│
├─ 정의
│ └─ DB 구조와 객체 정보를 저장하는 메타데이터
│
├─ 저장 정보
│ ├─ 테이블
│ ├─ 컬럼
│ ├─ 데이터 타입
│ ├─ 인덱스
│ ├─ 사용자
│ └─ 권한
│
├─ 특징
│ ├─ DBMS가 자동 관리
│ └─ 사용자가 직접 수정 X
│
└─ SQL
├─ USER_TABLES
├─ USER_TAB_COLUMNS
├─ USER_CONSTRAINTS
└─ USER_VIEWS
와 엄청 기네여.. 별이 엄청 많아서 놀랐어욤ㅋㅋㅋㅋ
수행평가 보시는 구나...🤮