📢 View 란 ?
가상테이블.
create view view_name as (서브쿼리로 뷰 내용 검색)
📢 실습(1)
--1학기 수업을 듣는 학생명단 1_term_view
--학번, 이름 조건 1학기 수강자 co_term = 1
--중복제거
create view 1_term_view as
select distinct st_num, st_name
from student s
join attend a on a.at_st_num = s.st_num
join course c on a.at_co_num = c.co_num
where c.co_term = 1;
mysql> select * from 1_term_view;
+------------+---------+
| st_num | st_name |
+------------+---------+
| 2020123001 | 김영철 |
| 2020123002 | 나영희 |
| 2020160001 | 강철수 |
| 2020160002 | 박철수 |
| 2020456001 | 강군 |
+------------+---------+
mysql> show tables;
+-------------------+
| Tables_in_college |
+-------------------+
| 1_term_view |
| attend |
| course |
| guide |
| professor |
| student |
| subject |
+-------------------+
show full tables; => 테이블 종류 확인가능
+-------------------+------------+
| Tables_in_college | Table_type |
+-------------------+------------+
| 1_term_view | VIEW |
| attend | BASE TABLE |
| course | BASE TABLE |
| guide | BASE TABLE |
| professor | BASE TABLE |
| student | BASE TABLE |
| subject | BASE TABLE |
+-------------------+------------+
--=> view 내용 변경(변경x) (삭제 후 재생성)
create or replace view 1_term_view as
select distinct st_num, st_name
from student s
join attend a on a.at_st_num = s.st_num
join course c on a.at_co_num = c.co_num
where c.co_term = 1;
🟢VIEW 자체의 데이터는 직접적으로 변경할 수 없음(VIEW는 기본적으로 테이블에 대한 읽기 전용)
데이터를 변경하고 싶으면 CREATE OR REPLACE VIEW 구문을 사용하여 VIEW를 재정의해야 함.
📢 실습(2)
--school DB에서 view 생성
use school;.
--1. 컴퓨터공학과 (std_major) 뷰 생성 => com_view
-- - 학번, 이름, 학과
create view com_view as
select std_num, std_name, std_major
from student
where std_major='컴퓨터공학';
mysql> select * from com_view;
+------------+----------+------------+
| std_num | std_name | std_major |
+------------+----------+------------+
| 2020160001 | 강철수 | 컴퓨터공학 |
| 2020160002 | 나영희 | 컴퓨터공학 |
| 2023160001 | 이영철 | 컴퓨터공학 |
+------------+----------+------------+
--2. A학점인 친구들 뷰 생성 a_view
-- - 학번, 이름, 학점
create view a_view as
select s.std_num, s.std_name, a.at_score
from student s
join attend a on a.at_std_num = s.std_num
where a.at_score = 'A';
mysql> select * from a_view;
+------------+----------+----------+
| std_num | std_name | at_score |
+------------+----------+----------+
| 2020160002 | 나영희 | A |
| 2023160002 | 최수지 | A |
+------------+----------+----------+
--view에도 where을 줄 수 있다.
select * from a_view
where std_num like '2020%';'백엔드 > MySQL' 카테고리의 다른 글
| MySQL Trigger(1) (3) | 2024.09.03 |
|---|---|
| MySQL LEFT JOIN 활용 (0) | 2024.09.03 |
| MySQL INDEX (0) | 2024.09.03 |
| DB 관리 및 쿼리 실습(2) (6) | 2024.09.03 |
| MySQL 외래키(FK, foreign key) 연결 테이블 삭제 순서 (0) | 2024.09.03 |