kjh00n의 기록저장소
VIEW 본문
VIEW
● 가상 Table
● 여러 개의 Table(하나 Table)에서 원하는 데이터만 가져와 마치 실제 있는 Table인 것처럼 만든 가상의 Table
● 물리적으로 저장되어 있는 Table은 아니고 논리적으로 존재하는 것처럼 보이는 Table
EX) Table이 10개 있다. Table을 한 번에 출력해서 원하는 데이터를 조회하고 싶다.
→ SELECT * FROM (SELECT * FROM 1 UNION ~ );
[매번 Table 10개를 UNION으로 적을 수 없다]
- 사용하는 이유 -
1. 복잡하거나 너무 긴 SQL문을 조금 더 간단하게 입력하기 위해서 사용
2. 필요없는 정보를 처음부터 숨길 수가 있다.
3. DB의 구조(Table의 구조)가 바뀌어도 원하는 데이터를 쉽게 가져올 수 있다.
VIEW 구축
뷰 생성
● CREATE VIEW [VIEW이름] AS [SELECT 구문];
CREATE VIEW art_board_list AS SELECT b_subject,u_name,reg_date FROM art_board INNER JOIN art_member ON u_id = b_id;
art_board_list는 실제로 존재하는 Table이 아니다.
VIEW 확인
● Table 확인 명령어 동일하게 사용
VIEW 구조 변경
● ALTER VIEW [VIEW명] AS [SELECT 구문];
ALTER VIEW art_board_list AS SELECT b_no,b_subject,u_name,reg_date FROM art_board INNERE JOIN art_member ON b_id = u_id;
Table에 Data를 추가,수정하면 VIEW도 변경점이 적용될까?
Table에 새로운 데이터를 입력하면 VIEW에도 새로 입력한 데이터가 저장된다.
원본 Table을 DROP, DELETE하면 VIEW도 삭제될까?
해당 VIEW를 조회할 수 없지만 VIEW 자체는 남아있다.
3번째 데이터를 삭제해보겠다.
3번째 데이터였던 '안녕하세요'가 삭제됨
3번째 데이터를 삭제하기 전의 VIEW
3번째 데이터였던 '안녕하세요'데이터가 VIEW에서 삭제되었다.
VIEW에다가 데이터 추가하면 Table에도 적용될까?
JOIN으로 구성된 VIEW에는 INSERT를 추가할 수 없다.
원본 TABLE에 데이터를 추가하는 경우 → 실시간으로 VIEW에도 데이터가 추가된다.
VIEW에 데이터를 추가하는 경우 ↓
→ VIEW를 생성 시 복수의 TABLE로 데이터를 가져와 (JOIN, UNION을 사용해서 만듦)만들었다면 추가가 불가능하다.
→ JOIN,UNION,서브쿼리를 사용하는 경우 INSERT 불가능하다.
→ JOIN,UNION,서브쿼리를 사용하지 않은 경우에는 제약조건만 만족하다면 추가 가능하다.
VIEW의 데이터를 수정하는 경우
실시간 원본 Table의 데이터가 수정된다.
VIEW 삭제
DROP VIEW [VIEW명];
VIEW를 지워도 원본 Table의 데이터는 그대로 남아있다.
원본 Table에 데이터를 추가,수정하면 VIEW도 변경점이 적용된다.
원본 Table을 삭제하면 VIEW를 조회할 수 없지만 VIEW 자체는 남아있다.
VIEW에는 데이터를 추가할 수 없다.(JOIN,UNION,서브쿼리로 만들었다면 불가능)
VIEW에는 데이터를 수정하면 원본 Table도 변경점이 적용된다.
show tables status;
위 명령어를 입력해서 Table인지 VIEW인지를 구분한다.
show tables;
위 명령어만으로는 VIEW인지 Table인지 구분이 안된다.