blog

데이터베이스 스키마 뷰 사용

뷰 뷰는 쿼리에 의해 내용이 정의되지만 실제 데이터를 저장하지 않는 가상 테이블입니다. 뷰는 하나 이상의 기본 테이블에서 생성됩니다. 특성: 가상: 뷰는 데이터 자체를 포함하지 않...

Oct 25, 2025 · 6 min. read
シェア

보기 뷰는 쿼리에 의해 내용이 정의되지만 실제 데이터는 저장되지 않는 가상 테이블입니다. 뷰는 하나 이상의 기본 테이블에서 생성됩니다.

기능.

  1. 가상: 뷰는 데이터 자체를 포함하지 않고 뷰에 액세스할 때마다 동적으로 실행되는 쿼리만 보유합니다.

  2. 동적: 뷰에 표시되는 데이터는 기본 테이블에서 실시간으로 검색됩니다. 따라서 기준 테이블의 데이터가 변경되면 뷰에 표시되는 데이터도 변경됩니다.

  3. 보안: 뷰를 사용하면 기본 테이블의 특정 데이터에 대한 사용자 액세스를 제한하여 데이터베이스 보안을 강화할 수 있습니다.

  4. 단순성: 뷰는 복잡한 SQL 작업을 간소화합니다. 사용자는 복잡한 기본 테이블을 직접 쿼리할 필요 없이 뷰를 쿼리할 수 있습니다.

  5. 논리적 독립성: 사용자는 데이터가 기본 테이블에 어떻게 저장되는지 신경 쓰지 않고 뷰를 사용할 수 있습니다.

I. 보기 정의 및 삭제

뷰 만들기

뷰는 하나 이상의 기본 테이블에서 데이터를 추출하여 가상 테이블을 형성하기 위해 만들어집니다. 뷰는 실제 데이터를 저장하는 대신 SQL 쿼리를 정의로 보유합니다. 이렇게 하면 뷰를 쿼리할 때마다 해당 쿼리가 실행되어 데이터를 생성합니다.

보기를 만드는 기본 구문은 다음과 같습니다:

CREATE VIEW< > [(< >[, >]... )]
AS<SELECT >
[WITH CHECK OPTION];
  • <보기 이름>: 만들려는 보기의 이름입니다.
  • <열 이름1>, <열 이름2>, ... 뷰의 열 이름(선택 사항). 생략하면 뷰의 열 이름이 SELECT 문에 지정된 열 이름이 됩니다.
  • <SELECT 문>: 뷰에 대한 쿼리를 정의합니다.
  • WITH 체크 옵션: 모든 뷰 수정이 뷰의 SELECT 문의 조건을 준수하도록 하는 선택적 문입니다.

행 및 열 하위 집합 보기

뷰가 단일 기본 테이블에서 파생되고 기본 테이블의 일부 행과 열만 제거되고 코드는 유지되는 경우 이러한 유형의 뷰를 행 및 열 뷰의 하위 집합이라고 합니다.

0701 클래스의 학생에 대한 보기를 만들고 작업을 수정하고 삽입할 때 컴퓨터 과학과의 학생만 보기에 포함되도록 합니다.

CREATE VIEW CS_S
AS
SELECT Sno, Sname, Sage
FROM S
WHERE Sclass ='CS0701'
WITH CHECK OPTION;

뷰에서 파생된 뷰

기존 보기를 기반으로 새 보기를 생성합니다. 예를 들어 CS_S 보기를 기반으로 코스 03을 수강한 학생에 대한 정보가 포함된 새 보기를 생성합니다:

CREATE VIEW CS_S1(Sno, Sname, Grade) AS
SELECT S.Sno, Sname, Grade
FROM CS_S, SC
WHERE CS_S.Sno = SC.Sno AND SCo = '03';

가상 열이 있는 뷰

뷰를 정의할 때 애플리케이션의 필요에 따라 일부 파생된 속성 열을 설정할 수 있습니다. 이러한 파생된 속성 열은 기본 테이블에 실제로 존재하지 않기 때문에 가상 열이라고도 합니다. 가상 열이 있는 뷰를 표현식이 있는 뷰라고도 합니다.

학생의 출생 연도를 반영하는 보기를 정의합니다.

CREATE VIEW BS(Sno,Sname,Sbirth)
AS
SELECT Sno, Sname,2011 - Sage
FROM S:

BS 뷰는 표현식이 있는 뷰입니다. 뷰에서 출생 연도의 값이 계산됩니다.

집합 함수가 있는 뷰

그룹화된 보기라고 하는 집합 함수 및 GROUP BY 절을 사용하여 쿼리로 보기를 정의할 수도 있습니다.

학생의 학생 번호와 성적 평균이 포함된 보기를 정의합니다.

CREATE VIEW S_G(Sno, Gavg)
	AS
		SELECT Sno,AVG(Grade)
		FROM SC
		GROUP BY Sno;

뷰 삭제

형식.

DROP VIEW < >;

뷰가 삭제되면 뷰의 정의는 데이터 사전에서 삭제되지만 뷰에서 파생된 다른 뷰 정의는 여전히 데이터 사전에 있지만 더 이상 유효하지 않아 계속 사용할 수 없으므로 하나씩 삭제해야 합니다.

DROP VIEW CS_S1;
DROP VIEW CS_S;

.쿼리 뷰

뷰를 쿼리할 때는 기본 테이블을 쿼리하는 것처럼 작업할 수 있습니다. 다음은 뷰 쿼리에 대한 자세한 설명입니다:

뷰 쿼리의 기본 작업

예를 들어, 컴퓨터 과학 0701 수업에서 20세 미만인 학생을 찾습니다:

SELECT Sno,Sage FROM CS_S WHERE Sage < 20;

뷰 쿼리의 내부 메커니즘

  • 유효성 검사: 데이터베이스 관리 시스템은 먼저 쿼리 중인 테이블 또는 뷰가 존재하는지 확인합니다.
  • 정의: DBMS는 데이터 사전에서 뷰 정의를 가져와서 사용자 쿼리와 함께 뷰 정의의 하위 쿼리를 기본 테이블에 대한 쿼리로 변환합니다.

예를 들어, 위의 뷰 쿼리는 실제로는 기본 테이블에 대한 쿼리로 변환됩니다:

SELECT Sno Sage FROM S WHERE Sclass ='CS0701' AND Sage < 20;

쿼리 변환에 대한 참고 사항

대부분의 경우 보기 쿼리는 직접 변환할 수 있습니다. 그러나 경우에 따라 직접 변환이 불가능하거나 문제가 발생할 수 있습니다.

  • 집합 함수로 쿼리 보기: 예를 들어, 학생 번호와 학점이 90점 이상인 학생의 학점 평균을 쿼리합니다:
SELECT *
FROM S_G
WHERE Gavg >= 90;

위의 쿼리를 하위 쿼리와 결합하여 다음 쿼리문을 작성합니다.

SELECT Sno,AVG( Grade)
FROM SC
WHERE AVG(Grade)> = 90
GROUP BY Sno;

앞서 언급했듯이 그룹화 후에는 WHERE 절에서 집합 함수를 조건식으로 사용할 수 없으므로 이 수정이 적용된 쿼리에는 구문 오류가 발생합니다. 올바른 쿼리는 다음과 같아야 합니다.

SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG( Grade)> = 90;

뷰 쿼리의 제한 사항

  • 행-열 하위 집합 뷰: 대부분의 데이터베이스 시스템은 행-열 하위 집합 뷰에 대한 쿼리를 올바르게 변환할 수 있습니다.
  • 행 및 열 하위 집합이 아닌 뷰: 행 및 열 하위 집합이 아닌 뷰의 경우 변환이 항상 가능하지 않을 수 있습니다. 이 경우 기본 테이블을 직접 쿼리하는 것이 좋습니다.

.뷰 업데이트

뷰는 실제로 데이터를 저장하지 않으므로 뷰에 대한 업데이트는 실제로 기본 테이블 데이터에 대한 업데이트입니다. WITH CHECK OPTION 사용하면 뷰 업데이트 작업이 뷰 정의의 제약 조건을 준수하도록 보장합니다.

뷰 데이터 삽입

뷰에 데이터를 삽입하는 것은 기본 테이블에 데이터를 삽입하는 것으로 해석됩니다. 예를 들어 새 학생 기록이 Accounting 0701 학생 뷰인 CS_S에 삽입됩니다:

INSERT INTO CS_S
VALUES('2007111003',' , 20);

이 작업은 기본 테이블에 삽입하는 작업으로 변환합니다:

INSERT INTO S(Sno, Sname, Sage, Sclass)
VALUES('2007111003', ' , 20, 'CS0701');

시스템은 뷰 정의와 관련된 다른 속성을 자동으로 처리합니다.

뷰 데이터 삭제

뷰에서 데이터를 삭제하는 것은 기본 테이블에서 해당 데이터를 삭제하는 것으로 변환됩니다. 예를 들어 0701 회계 수업의 학생에 대한 CS_S 보기에서 학생 번호가 2007111003 인 기록을 삭제할 수 있습니다:

DELETE FROM CS_S
WHERE Sno = '2007111003';

기본 테이블에서 삭제 작업으로 변환합니다:

DELETE FROM S
WHERE Sno = '2007111003' AND Sclass = 'CS0701';

뷰 데이터 수정

보기 데이터를 수정하는 것은 기본 테이블을 업데이트하는 것으로 변환됩니다. 예를 들어 회계 0701 수업의 학생 보기 CS_S에서 학생 번호가 2007111001 인 학생의 이름을 "Zhang Qiang"으로 변경합니다:

UPDATE CS_S
SET Sname = ' 
WHERE Sno = '2007111001';

기본 테이블에 대한 업데이트로 변환되었습니다.

UPDATE S
SET Sname = ' 
WHERE Sno = '2007111001' AND Sclass = 'CS0701';

업데이트 가능성 제한

모든 뷰를 업데이트할 수 있는 것은 아닙니다. 특히 집계 함수, 그룹화를 포함하거나 여러 기준 테이블에서 파생된 뷰에는 업데이트에 대한 고유한 명시적 기준 테이블 업데이트 대응 항목이 없을 수 있습니다. 예를 들어 그룹화 및 집계로 계산된 결과인 성적 평점 평균이 포함된 S_G 뷰는 업데이트를 위해 기준 테이블의 특정 레코드에 직접 매핑할 수 없습니다.

UPDATE S_G
SET Gavg = 90
WHERE Sno='2007111001'; /*이것은 작동하지 않습니다.*/

따라서 행이 아닌 하위 집합 뷰에 대한 업데이트는 업데이트 가능성 및 기본 테이블의 업데이트 작업에 효율적으로 매핑할 수 있는 방법을 고려해야 합니다.

Read next

2D 배열을 테이블로 렌더링하기!

우선, 다음과 같이 매우 흥미로운 2차원 배열을 얻었습니다:\n\n \n ["우이

Oct 25, 2025 · 2 min read