백엔드/MySQL

MySQL VIEW 생성

짱뚱짱 2024. 9. 3. 17:53

📢 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