2022. 7. 19. 07:44ㆍSQL
뷰 (View)
데이터베이스 개체 중 하나로 '가상의
테이블'이라고 생각하면 된다. 한 번 생성해
놓으면 테이블이라고 생각하고 사용해도 될
정도로 사용자의 입장에서 테이블과 거의
동일한 개체로 취급하기도 한다. 가장 잘
와닿는 비유로는 바로가기 아이콘이다.
뷰는 단순 뷰와 복합 뷰로 나뉘는데
단순 뷰는 하나의 테이블과 연관된 뷰를
말하고, 복합 뷰는 2개 이상의 테이블과
연관된 뷰를 말한다.
뷰의 기본 생성
USE market_db;
SELECT man_id, man_name, man_addr FROM memebers;
위와 같이 USE로 DB에 접속한 후
SELECT문을 입력하면 요청한 항목에
대한 output 테이블 형태로 나올 것이다.
그래서 가상의 '테이블'이라고 하는 것이고,
이 SELECT문이 뷰의 실체다.
기본 형식
CREATE VIEW 뷰_이름
AS
SELECT 문;
접근하는 방식 : 조건식 사용 가능
SELECT 열_이름 FROM 뷰_이름
[WHERE 조건];
그럼 뭐하고 굳이 뷰를
따로 두고 사용하나 싶긴한데
다음과 같은 이유들이 있다.
① 보안(security)에 도움이 된다.
② 복잡한 SQL을 단순하게 만들 수 있다.
뷰 갱신 (생성, 수정, 삭제)
뷰 정의 SELECT 문이 몇 가지 조건을
만족하는 경우에 뷰 갱신이 가능하다.
- SELECT 구에 DISTINCT가 포함 X
- FROM 구에 포함되는 테이블이 하나
- GROUP BY 구를 사용하고 있지 X
- HAVING 구를 사용 X
- 집약된 뷰는 갱신이 불가능하다.
뷰를 생성할 때 지정해주는 별칭엔
띄어쓰기가 포함되어도 되나 열 이름
뒤에 ' 또는 "로 묶어주고, 형식상 AS를
붙여줘야 한다. 그리고 반대로 조회할 때
열 이름에 공백이 있으면 `(백틱)으로
묶어줘야 한다. (아래 예시 참고)
# view 생성
USE market_db;
CREATE VIEW v_viewtest1
AS
SELECT B.mem_id 'Member ID'. M.mem_name AS 'Member Name', B.prod_name 'Product Name',
CONCAT(M.phone1, M.phone2) AS "Office Phone"
FROM buy B
INNER JOIN membr M
ON B.mem_id = M.mem_id;
# view 조회
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1;
# view 삭제
DROP VIEW v_viewtest1;
이 외에도 기존에 존재하던 View를
조회하거나 수정하는 것도 가능하다.
-- 기존 view 정보 확인
DESCRIVE v_viewtest2;
-- view를 만든 구문을 확인하고 싶을 때
SHOW CREATE VIEW v_viewtest2;
-- view 수정
UPDATE v_member SET addr = '부산' WHERE mem_id = 'BLK';
-- view로 데이터 입력 (권장X)
---- 단, NOT NILL 요소는 다 넣어주던가 요소의 NO NULL을 풀어주던가 해야함.(복잡해짐)
INSERT INTO v_member(mem_id, mem_name, addr) VALUES('BTS', '방탄소년단', '경기'); #---> NN값인 인원수가 입력되지 않았기 때문에 입력 안됨.
-- 좀 더 나은 버전 : view의 조건에 안 맞는 것은 입력되지 않도록(WITH CHECK OPTION).
ALTER VIEW v_hight167
AS
SELECT * FROM member WHERE height >= 167
WITH CHECK OPTION:
INSERT INTO v_height167 VALUES('TOB', '텔레토비', 4, '영국', NULL, NULL, 140, …)
뷰가 테이블을 참조하고 있어도 테이블은
삭제가 가능하다. 그렇게 되면 당연히 뷰도
다시 불러올 수 없으므로 주의하자.
그리고 마지막으로 만약 뷰가
왜 조회 안되는지 궁금할 때는
CHECK TABLE 뷰이름;
을 통해 확인할 수 있다.
++ 추가
! 뷰 위에 뷰를 겹치는 것도 가능하나
가능한 겹쳐서 사용하지 않는다.
! 뷰 정의에는 ORDER BY 구를 사용하지 않는다.
The End.
'SQL' 카테고리의 다른 글
[SQL 독학] 인덱스 내부 작동 원리와 구조, 데이터 검색 (0) | 2022.07.25 |
---|---|
[SQL 독학] 인덱스의 개념과 종류, 장단점 (0) | 2022.07.20 |
[SQL 독학] SQL 테이블 제약조건(기본키, 외래키, 고유키) (0) | 2022.06.23 |
[SQL 독학] GUI 환경에서 테이블 생성하기+SQL로 테이블 만들기 (0) | 2022.06.23 |
[SQL 독학] SQL 프로그래밍(IF문, CASE문, WHILE문, 동적SQL) (0) | 2022.06.11 |