SlideShare a Scribd company logo
1 of 17
Download to read offline
VIEW(SQL)
2015.08.24
이인 / In Lee
TODO
• View 에 대한 개념 이해하기
• View는 생성 및 조회 방법에 대해 알아보기
• View를 이용한 데이터의 삽입, 삭제, 갱신의 어려움에 대해
알아보기.
Definition
In database theory, a view is the result set of a stored query on the data,
which the database users can query just as they would in a persistent
database collection object. This pre-established query command is kept in the
database dictionary. Unlike ordinary base tables in a relational database, a
view does not form part of the physical schema: as a result set, it is a virtual
table computed or collated dynamically from data in the database when
access to that view is requested. Changes applied to the data in a relevant
underlying table are reflected in the data shown in subsequent invocations of
the view.
- Wikipedia, “VIew(SQL)”, https://en.wikipedia.org/wiki/View_%28SQL%29, 2015.08.17
Definition
• 가상 테이블(Virtual Table)
• 기존 생성된 테이블들의 데이터들을 조합하여 하나의 테이블로 출력
• 일반 테이블과는 달리, 물리적으로 생성되지 않음
• 데이터베이스는 View를 정의한 Query만 가지고 있음
• 본래, 데이터를 조회하기 위한 용도로 사용
• But, 표준이 변경되어 View에 직접 삽입/갱신/삭제가 가능하게 되었음
Pros and Cons
• 단순화
• JOIN이 필요한 경우, 테이블들을 JOIN 한 VIEW 를 미리 정의하여 VIEW
를 생성하여 사용할 수 있음
• VIEW 정의 시 사용한 테이블에 삽입/갱신/삭제 연산이 발생하면 VIEW
에서도 반영
• 보안
• View 에 나타난 데이터만 접근 가능하기 때문에 나타나지 않는 데이터
는 사용할 수 없음
• 또한, View 정의 시 Column(Field) 이름 변경이 가능하여 실제 물리적 테이블
과 다른 이름을 가질 수 있음
Pros and Cons
• Index를 가질 수 없음
• View는 Virtual Table, 즉, 실제 데이터가 존재하는 테이블이 아니기 때
문에 Index를 가질 수 없음.
• 단, MSSQL, Oracle 에서는 Index를 지원하는 View type이 있음.

(MSSQL: Indexed View / Oracle: Materialized View)
• 한번 정의한 View 는 변경할 수 없음
• 삭제 후 다시 정의해야 함
• View에 데이터 삽입, 갱신, 삭제에 많은 제약이 따름
• View 구성에 따라 달라짐
View Types
• 단일뷰(Single Table View / Single View)
• 1개의 테이블을 이용해 View를 구성한 경우
• 일반적인 테이블과 같이 삽입/갱신/삭제 가능
• 복합뷰(Multiple Table View / Complex View)
• 2개 이상의 테이블을 이용해 VIew를 구성한 경우
• 삽입/갱신/삭제에 제약조건 존재
• INNER JOIN 사용 시: 삽입/갱신/삭제 가능하나 제약조건 존재
• OUTER JOIN / UNION 사용 시: 삽입 불가, 갱신/삭제 가능.
- MySQL의 경우, View Algorithm이 merge로 설정되어 있어야 함
View Types
• 복합뷰(Multiple Table View / Complex View)
• INNER JOIN 사용 시
• 삽입(Insert): 같은 테이블에 있는 Column 끼리만 가능
• 갱신(Update): 같은 테이블에 있는 Column 끼리만 가능
• 삭제(Delete): 삭제 불가
• OUTER JOIN 사용 시
• 삽입(Insert): 불가
• 갱신(Update): 같은 테이블에 있는 Column 끼리만 가능
• 삭제(Delete): 삭제 불가
Example Tables
순번 이름 팀 번호
1 권혁 1993
2 이범호 2001
3 필 2001
4 박병호 2010
5 양준혁 NULL
순번 팀 번호 팀명
1 1993 한화
2 1999 두산
3 2001 기아
4 2010 넥센
baseball_player baseball_team
A B
CREATE VIEW
• CREATE VIEW 구문 이용
CREATE VIEW view_kbo_info AS
SELECT player.id, player.name AS player_name, player.team_no, team.name AS team_name
FROM baseball_player AS player
INNER JOIN baseball_team AS team ON player.team_no = team.team_no
id player_name team_no team_name
1 권혁 1993 한화
2 이범호 2001 기아
3 필 2001 기아
4 박병호 2010 넥센
view_kbo_info
View 테스트: MySQL 5.5.43 / ubuntu 14.01
CREATE VIEW
• WITH CHECK OPTION
• View에 의해 접근 가능한 행(ROW)만이 입력되거나 변경될 수 있음
• View의 WHERE 절에 명시한 조건을 따름
• WITH READ ONLY
• 생성한 View는 오직 읽기만 가능(Read-Only): Oracle에서 지원
• 삽입, 삭제 불가
SELECT VIEW
SELECT *
FROM view_kbo_info
WHERE team_no = 2001;
id player_name team_no team_name
2 이범호 2001 기아
3 필 2001 기아
view_kbo_info
• 가상 테이블도 테이블의 한 종류이기 때문에, 일반 테이블 조
회하는 방법과 동일
View 테스트: MySQL 5.5.43 / ubuntu 14.01
INSERT VIEW
• INNER JOIN 일 경우, 제한적으로 삽입 가능
• OUTER JOIN일 경우, 삽입 불가
• 삽입할 컬럼이 같은 테이블로 구성되어 있을 경우에만 가능
INSERT INTO view_kbo_info(id, player_name, team_no) VALUES (6, '유희관', 1999)
INSERT INTO view_kbo_info(id, player_name, team_no, team_name) VALUES (7, '서건창', 2010, '넥센')
id player_name team_no team_name
1 권혁 1993 한화
2 이범호 2001 기아
3 필 2001 기아
4 박병호 2010 넥센
6 유희관 1999 두산
view_kbo_info
=> 오류. {id, player_name, team_no}, {team_name} column은
각각 다른 테이블에 속해있기 때문에 삽입 불가.
View 테스트: MySQL 5.5.43 / ubuntu 14.01
Update View
• INNER JOIN, OUTER JOIN 적용된 View에서 가능
UPDATE view_kbo_info SET team_name='해태' WHERE team_no=2001
id player_name team_no team_name
1 권혁 1993 한화
2 이범호 2001 해태
3 필 2001 해태
4 박병호 2010 넥센
6 유희관 1999 두산
view_kbo_info
UPDATE view_kbo_info SET team_no=1993, team_name='한화' WHERE id=2
=> 오류. {id, player_name, team_no}, {team_name} column은 각각 다른 테이블에 속해있음.
즉, UPDATE시 다른 테이블에 있는 값을 동시에 업데이트 하려 했기 때문에 오류 발생.
View 테스트: MySQL 5.5.43 / ubuntu 14.01
DELETE VIEW
• INNER JOIN, OUTER JOIN 모두 삭제 불가
• JOIN 연산으로 결합되어 VIEW 가 구성되어 있기 때문에, 어떤 테이블
의 항목을 삭제할 지 알 수 없음.
View 테스트: MySQL 5.5.43 / ubuntu 14.01
Conclusion
• View를 효율적으로 사용하면 Query 단순화가 가능
• 공통으로 사용하는 복잡한 Query의 중복 사용 횟수 단축 가능
• View는 되도록이면 데이터 조회 시에만 사용
• View에 삽입, 갱신, 삭제는 많은 제약(Restricts)이 따르기 때문에

View를 생성하는데 사용한 Table 에 직접 수행
• 갱신 결과는 View에 곧바로 반영됨
References
1. Wikipedia, "View(SQL)", https://en.wikipedia.org/wiki/View_%28SQL%29, 2015.08.21
2. MySQL, "D.4 Restrictions on Views", https://dev.mysql.com/doc/refman/5.0/en/view-
restrictions.html, 2015.08.22
3. DBGuide.net, "모델링의 이해", http://www.dbguide.net/db.db?
cmd=view&boardUid=148404&boardConfigUid=9&categoryUid=216&boardIdx=132&boardStep=1,
2015.08.22
4. MySQL, "19.5.3 Updatable and Insertable Views", https://dev.mysql.com/doc/refman/5.7/en/view-
updatability.html, 2015.08.22
5. MySQL, "13.1.17 CREATE VIEW Syntax", https://dev.mysql.com/doc/refman/5.7/en/create-
view.html, 2015.08.22
6. MySQL Korea, "19.2. CREATE VIEW신텍스", http://www.mysqlkorea.com/sub.html?
mcode=manual&scode=01&m_no=21113&cat1=19&cat2=571&cat3=0&lang=k, 2015.08.22
7. MySQL, "20.5.4 The View WITH CHECK OPTION Clause", https://dev.mysql.com/doc/refman/5.6/
en/view-check-option.html, 2015.08.22

More Related Content

Viewers also liked

Functional Testing made easy with SWTBot for Developers and Testers
Functional Testing made easy with SWTBot for Developers and TestersFunctional Testing made easy with SWTBot for Developers and Testers
Functional Testing made easy with SWTBot for Developers and TestersAurélien Pupier
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターAkihiro Ehara
 
Electronics Technician
Electronics TechnicianElectronics Technician
Electronics TechnicianRobert Cargill
 
Arte y ciencia de la predicacion
Arte y ciencia de la predicacionArte y ciencia de la predicacion
Arte y ciencia de la predicacionArgenis Barrero
 
Foreign trade in the Barcelona Area 2015
Foreign trade in the Barcelona Area 2015Foreign trade in the Barcelona Area 2015
Foreign trade in the Barcelona Area 2015Barcelona Activa
 
Revista Econòmica de Catalunya nº 64: Economia de Conocimiento y Territorio
Revista Econòmica de Catalunya nº 64: Economia de Conocimiento y TerritorioRevista Econòmica de Catalunya nº 64: Economia de Conocimiento y Territorio
Revista Econòmica de Catalunya nº 64: Economia de Conocimiento y TerritorioBarcelona Activa
 
Java Performance Engineer's Survival Guide
Java Performance Engineer's Survival GuideJava Performance Engineer's Survival Guide
Java Performance Engineer's Survival GuideMonica Beckwith
 
PMO View Interactive Dashboard
PMO View Interactive DashboardPMO View Interactive Dashboard
PMO View Interactive DashboardMatt Angerer
 

Viewers also liked (12)

Functional Testing made easy with SWTBot for Developers and Testers
Functional Testing made easy with SWTBot for Developers and TestersFunctional Testing made easy with SWTBot for Developers and Testers
Functional Testing made easy with SWTBot for Developers and Testers
 
ICND1
ICND1ICND1
ICND1
 
Python Math Concepts Book
Python Math Concepts BookPython Math Concepts Book
Python Math Concepts Book
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint Onlineアクセスモニター
 
Electronics Technician
Electronics TechnicianElectronics Technician
Electronics Technician
 
Arte y ciencia de la predicacion
Arte y ciencia de la predicacionArte y ciencia de la predicacion
Arte y ciencia de la predicacion
 
Foreign trade in the Barcelona Area 2015
Foreign trade in the Barcelona Area 2015Foreign trade in the Barcelona Area 2015
Foreign trade in the Barcelona Area 2015
 
Revista Econòmica de Catalunya nº 64: Economia de Conocimiento y Territorio
Revista Econòmica de Catalunya nº 64: Economia de Conocimiento y TerritorioRevista Econòmica de Catalunya nº 64: Economia de Conocimiento y Territorio
Revista Econòmica de Catalunya nº 64: Economia de Conocimiento y Territorio
 
Java Performance Engineer's Survival Guide
Java Performance Engineer's Survival GuideJava Performance Engineer's Survival Guide
Java Performance Engineer's Survival Guide
 
PMO View Interactive Dashboard
PMO View Interactive DashboardPMO View Interactive Dashboard
PMO View Interactive Dashboard
 
Xandra Solmoro CV
Xandra Solmoro CVXandra Solmoro CV
Xandra Solmoro CV
 
Analisis del valor ganado
Analisis del valor ganadoAnalisis del valor ganado
Analisis del valor ganado
 

View(sql)

  • 2. TODO • View 에 대한 개념 이해하기 • View는 생성 및 조회 방법에 대해 알아보기 • View를 이용한 데이터의 삽입, 삭제, 갱신의 어려움에 대해 알아보기.
  • 3. Definition In database theory, a view is the result set of a stored query on the data, which the database users can query just as they would in a persistent database collection object. This pre-established query command is kept in the database dictionary. Unlike ordinary base tables in a relational database, a view does not form part of the physical schema: as a result set, it is a virtual table computed or collated dynamically from data in the database when access to that view is requested. Changes applied to the data in a relevant underlying table are reflected in the data shown in subsequent invocations of the view. - Wikipedia, “VIew(SQL)”, https://en.wikipedia.org/wiki/View_%28SQL%29, 2015.08.17
  • 4. Definition • 가상 테이블(Virtual Table) • 기존 생성된 테이블들의 데이터들을 조합하여 하나의 테이블로 출력 • 일반 테이블과는 달리, 물리적으로 생성되지 않음 • 데이터베이스는 View를 정의한 Query만 가지고 있음 • 본래, 데이터를 조회하기 위한 용도로 사용 • But, 표준이 변경되어 View에 직접 삽입/갱신/삭제가 가능하게 되었음
  • 5. Pros and Cons • 단순화 • JOIN이 필요한 경우, 테이블들을 JOIN 한 VIEW 를 미리 정의하여 VIEW 를 생성하여 사용할 수 있음 • VIEW 정의 시 사용한 테이블에 삽입/갱신/삭제 연산이 발생하면 VIEW 에서도 반영 • 보안 • View 에 나타난 데이터만 접근 가능하기 때문에 나타나지 않는 데이터 는 사용할 수 없음 • 또한, View 정의 시 Column(Field) 이름 변경이 가능하여 실제 물리적 테이블 과 다른 이름을 가질 수 있음
  • 6. Pros and Cons • Index를 가질 수 없음 • View는 Virtual Table, 즉, 실제 데이터가 존재하는 테이블이 아니기 때 문에 Index를 가질 수 없음. • 단, MSSQL, Oracle 에서는 Index를 지원하는 View type이 있음.
 (MSSQL: Indexed View / Oracle: Materialized View) • 한번 정의한 View 는 변경할 수 없음 • 삭제 후 다시 정의해야 함 • View에 데이터 삽입, 갱신, 삭제에 많은 제약이 따름 • View 구성에 따라 달라짐
  • 7. View Types • 단일뷰(Single Table View / Single View) • 1개의 테이블을 이용해 View를 구성한 경우 • 일반적인 테이블과 같이 삽입/갱신/삭제 가능 • 복합뷰(Multiple Table View / Complex View) • 2개 이상의 테이블을 이용해 VIew를 구성한 경우 • 삽입/갱신/삭제에 제약조건 존재 • INNER JOIN 사용 시: 삽입/갱신/삭제 가능하나 제약조건 존재 • OUTER JOIN / UNION 사용 시: 삽입 불가, 갱신/삭제 가능. - MySQL의 경우, View Algorithm이 merge로 설정되어 있어야 함
  • 8. View Types • 복합뷰(Multiple Table View / Complex View) • INNER JOIN 사용 시 • 삽입(Insert): 같은 테이블에 있는 Column 끼리만 가능 • 갱신(Update): 같은 테이블에 있는 Column 끼리만 가능 • 삭제(Delete): 삭제 불가 • OUTER JOIN 사용 시 • 삽입(Insert): 불가 • 갱신(Update): 같은 테이블에 있는 Column 끼리만 가능 • 삭제(Delete): 삭제 불가
  • 9. Example Tables 순번 이름 팀 번호 1 권혁 1993 2 이범호 2001 3 필 2001 4 박병호 2010 5 양준혁 NULL 순번 팀 번호 팀명 1 1993 한화 2 1999 두산 3 2001 기아 4 2010 넥센 baseball_player baseball_team A B
  • 10. CREATE VIEW • CREATE VIEW 구문 이용 CREATE VIEW view_kbo_info AS SELECT player.id, player.name AS player_name, player.team_no, team.name AS team_name FROM baseball_player AS player INNER JOIN baseball_team AS team ON player.team_no = team.team_no id player_name team_no team_name 1 권혁 1993 한화 2 이범호 2001 기아 3 필 2001 기아 4 박병호 2010 넥센 view_kbo_info View 테스트: MySQL 5.5.43 / ubuntu 14.01
  • 11. CREATE VIEW • WITH CHECK OPTION • View에 의해 접근 가능한 행(ROW)만이 입력되거나 변경될 수 있음 • View의 WHERE 절에 명시한 조건을 따름 • WITH READ ONLY • 생성한 View는 오직 읽기만 가능(Read-Only): Oracle에서 지원 • 삽입, 삭제 불가
  • 12. SELECT VIEW SELECT * FROM view_kbo_info WHERE team_no = 2001; id player_name team_no team_name 2 이범호 2001 기아 3 필 2001 기아 view_kbo_info • 가상 테이블도 테이블의 한 종류이기 때문에, 일반 테이블 조 회하는 방법과 동일 View 테스트: MySQL 5.5.43 / ubuntu 14.01
  • 13. INSERT VIEW • INNER JOIN 일 경우, 제한적으로 삽입 가능 • OUTER JOIN일 경우, 삽입 불가 • 삽입할 컬럼이 같은 테이블로 구성되어 있을 경우에만 가능 INSERT INTO view_kbo_info(id, player_name, team_no) VALUES (6, '유희관', 1999) INSERT INTO view_kbo_info(id, player_name, team_no, team_name) VALUES (7, '서건창', 2010, '넥센') id player_name team_no team_name 1 권혁 1993 한화 2 이범호 2001 기아 3 필 2001 기아 4 박병호 2010 넥센 6 유희관 1999 두산 view_kbo_info => 오류. {id, player_name, team_no}, {team_name} column은 각각 다른 테이블에 속해있기 때문에 삽입 불가. View 테스트: MySQL 5.5.43 / ubuntu 14.01
  • 14. Update View • INNER JOIN, OUTER JOIN 적용된 View에서 가능 UPDATE view_kbo_info SET team_name='해태' WHERE team_no=2001 id player_name team_no team_name 1 권혁 1993 한화 2 이범호 2001 해태 3 필 2001 해태 4 박병호 2010 넥센 6 유희관 1999 두산 view_kbo_info UPDATE view_kbo_info SET team_no=1993, team_name='한화' WHERE id=2 => 오류. {id, player_name, team_no}, {team_name} column은 각각 다른 테이블에 속해있음. 즉, UPDATE시 다른 테이블에 있는 값을 동시에 업데이트 하려 했기 때문에 오류 발생. View 테스트: MySQL 5.5.43 / ubuntu 14.01
  • 15. DELETE VIEW • INNER JOIN, OUTER JOIN 모두 삭제 불가 • JOIN 연산으로 결합되어 VIEW 가 구성되어 있기 때문에, 어떤 테이블 의 항목을 삭제할 지 알 수 없음. View 테스트: MySQL 5.5.43 / ubuntu 14.01
  • 16. Conclusion • View를 효율적으로 사용하면 Query 단순화가 가능 • 공통으로 사용하는 복잡한 Query의 중복 사용 횟수 단축 가능 • View는 되도록이면 데이터 조회 시에만 사용 • View에 삽입, 갱신, 삭제는 많은 제약(Restricts)이 따르기 때문에
 View를 생성하는데 사용한 Table 에 직접 수행 • 갱신 결과는 View에 곧바로 반영됨
  • 17. References 1. Wikipedia, "View(SQL)", https://en.wikipedia.org/wiki/View_%28SQL%29, 2015.08.21 2. MySQL, "D.4 Restrictions on Views", https://dev.mysql.com/doc/refman/5.0/en/view- restrictions.html, 2015.08.22 3. DBGuide.net, "모델링의 이해", http://www.dbguide.net/db.db? cmd=view&boardUid=148404&boardConfigUid=9&categoryUid=216&boardIdx=132&boardStep=1, 2015.08.22 4. MySQL, "19.5.3 Updatable and Insertable Views", https://dev.mysql.com/doc/refman/5.7/en/view- updatability.html, 2015.08.22 5. MySQL, "13.1.17 CREATE VIEW Syntax", https://dev.mysql.com/doc/refman/5.7/en/create- view.html, 2015.08.22 6. MySQL Korea, "19.2. CREATE VIEW신텍스", http://www.mysqlkorea.com/sub.html? mcode=manual&scode=01&m_no=21113&cat1=19&cat2=571&cat3=0&lang=k, 2015.08.22 7. MySQL, "20.5.4 The View WITH CHECK OPTION Clause", https://dev.mysql.com/doc/refman/5.6/ en/view-check-option.html, 2015.08.22