DB/명령프롬프트 - mysql

[MySQL] 뷰 view 생성, 수정, 삭제

congs 2023. 3. 30. 12:02

뷰 view

: 데이터베이스에 존재하는 일종의 가상 테이블

 

- 가상테이블

  • 실체가 없고(실제 데이터를 저장하고 있지 않음),
  • 필요한 내용만 꺼내서 보는 테이블
  • 물리적으로 존재하지 않음 = 보여주기만 가능 
  • view는 한번 생성하면 변경이 안됨  (update, delete 등 X) => 새로운 뷰로 대체(replace) 해야함! 
  • index를 가질 수 없음

 

뷰 view 생성

  • 여러필드에서 가져오는 경우) 중복제거 distinct는 하는 것이 좋음
    • 중복제거를 하지 않는 경우 조건에 맞는 값이 칼럼별로 나와 여러번 출력
1. 하나의 필드에서 가져와 생성
create view 뷰이름 as

select 칼럼명 from 테이블명
where 조건 ;

2. 여러 필드에서 가져와 생성
create view 뷰이름 as 
select a.칼럼, b.칼럼
from table_a as a, table_b as b // 알리야스와 as는 선택! 
where 조건 ;
--1. 하나의 테이블에서 가져오는 경우
-- 주소가 서울인 친구들의 이름만 뷰로 생성

create view view_name as
select name from student
where addr = '서울' ;

--2. 두개의 테이블에서 가져오는 경우
-- 1학기 수업을 듣는 학생의 이름과 학번으로 뷰로 생성
mysql> create view 1term_view as
    -> select s.st_name, s.st_num
    -> from student as s, course as c
    -> where c.co_term = 1;
Query OK, 0 rows affected (0.00 sec)

 

뷰 view 삭제

drop 뷰의이름 ;

 

뷰 view 조회

-- 뷰 출력
select * from 뷰의이름 ;
-- 전체 테이블의 속성도 함께 출력
show full tables; 
-- 속성이 뷰인 테이블 출력
show full table in 데이터베이스명 where table_type like "VIEW" ;

 

뷰 view 전체 수정 / 없다면 생성

1.view drop으로 지우고 새로 create 생성하기

2. 기존의 뷰가 있다면 수정 / 없다면 생성하기 (= 덮어쓰기)
 create or replace view 뷰이름 as  
 select 칼럼명                                         
 from 테이블명                                       

 where 조건 ;                                          
-- 2. 생성되어 있던 뷰에 설정을 추가
-- 1term_view에 중복제거를 추가

mysql> create or replace view 1term_view as
    -> select distinct s.st_name, s.st_num
    -> from student as s, course as c
    -> where c.co_term = 1;
Query OK, 0 rows affected (0.00 sec)

 

뷰 view 칼럼명만 변경 (덮어씌우기)

  • 기존의 뷰가 있다면 삭제하지 않고 새로운 구조의 뷰로 생성
  • select 뒤에 뷰의 모든 사용 칼럼을 적어야함 = 적지 않는 경우 사라짐 (덮어쓰기 같은 느낌)
  • 칼럼명1 as 새로운 칼럼1의 칼럼명 => 칼럼1의 칼럼명이 변경
  • from 해당 테이블명
create or replace view 뷰이름 as           
select 칼럼1 as 새로운칼럼명1, 칼럼2, 칼럼3 as 새로운 칼럼명3...  (칼럼2는 이름변경X)
from 테이블명