SQL의 뷰는 가상 테이블 역할을 하는 저장된 SQL 쿼리입니다. 일반 테이블 뷰와 달리 데이터 자체를 저장하지 않습니다. 대신 뷰에 액세스할 때마다 뷰에 정의된 SQL 쿼리를 실행하여 데이터를 동적으로 생성합니다.
하나 이상의 테이블에서 데이터를 가져와서 개발자가 다음을 수행할 수 있도록 사용자 정의된 형식으로 표시할 수 있습니다.
- 복잡한 쿼리 단순화: 복잡한 조인 및 조건을 단일 개체로 캡슐화합니다.
- 보안 강화: 특정 열이나 행에 대한 액세스를 제한합니다.
- 데이터를 유연하게 제시: 다양한 사용자에게 맞춤형 데이터 보기를 제공합니다.
우리는 예제로 이 두 개의 SQL 테이블을 사용할 것입니다.
학생 세부정보:
-- Create StudentDetails table
CREATE TABLE StudentDetails (
S_ID INT PRIMARY KEY
NAME VARCHAR(255)
ADDRESS VARCHAR(255)
);
INSERT INTO StudentDetails (S_ID NAME ADDRESS)
VALUES
(1 'Harsh' 'Kolkata')
(2 'Ashish' 'Durgapur')
(3 'Pratik' 'Delhi')
(4 'Dhanraj' 'Bihar')
(5 'Ram' 'Rajasthan');
산출:
S_ID | 이름 | 주소 |
|---|---|---|
1 | 가혹한 | 콜카타 |
2 | 아시쉬 | 두르가푸르 |
3 | 관행 | 델리 |
4 | 단라즈 | 비하르 |
5 | 숫양 | 라자스탄 |
학생 성적:
-- Create StudentMarks table
CREATE TABLE StudentMarks (
ID INT PRIMARY KEY
NAME VARCHAR(255)
Marks INT
Age INT
);
INSERT INTO StudentMarks (ID NAME Marks Age)
VALUES
(1 'Harsh' 90 19)
(2 'Suresh' 50 20)
(3 'Pratik' 80 19)
(4 'Dhanraj' 95 21)
(5 'Ram' 85 18);
산출:
ID | 이름 | 점수 | 나이 |
|---|---|---|---|
1 | 가혹한 | 90 | 19 |
2 | 수레쉬 | 50 | 20 |
3 | 관행 | 80 | 19 |
4 | 단라지 | 95 | 21 |
5 | 숫양 | 85 | 18 |
SQL에서 뷰 생성
CREATE VIEW 문을 사용하여 뷰를 생성할 수 있습니다. 뷰는 단일 테이블 또는 여러 테이블에서 생성될 수 있습니다.
통사론:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
주요 용어:
- view_name : 뷰의 이름
- 테이블_이름 : 테이블 이름
- 상태 : 행 선택 조건
예 1: 단일 테이블에서 단순 뷰 생성
예 1.1: 이 예에서는 DetailsView라는 뷰를 생성합니다. StudentDetails 테이블에서.
질문:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
이 보기에서 데이터를 검색하려면 아래 쿼리를 사용하세요.
SELECT * FROM DetailsView;산출:
이름 | 주소 |
|---|---|
가혹한 | 콜카타 |
아시쉬 | 두르가푸르 |
관행 | 델리 |
단라지 | 비하르 |
예 1.2: 여기에서는 StudentDetails 테이블에서 StudentNames라는 뷰를 만듭니다.
질문:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
이제 뷰를 다음과 같이 쿼리하면
SELECT * FROM StudentNames;
산출:
S_ID | 이름 |
|---|---|
2 | 아시쉬 |
4 | 단라지 |
1 | 가혹한 |
3 | 관행 |
5 | 숫양 아파치 |
예 2: 여러 테이블에서 뷰 생성
이 예에서는 StudentDetails 및 StudentMarks 테이블의 데이터를 결합하는 View MarksView를 만듭니다. 여러 테이블에서 뷰를 생성하려면 선택하다 성명.
질문:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
View MarksView의 데이터를 표시하려면:
SELECT * FROM MarksView;산출:
이름 | 주소 | 점수 |
|---|---|---|
가혹한 | 콜카타 | 90 |
관행 | 델리 | 80 자바 업데이트 |
단라지 | 비하르 | 95 |
숫양 | 라자스탄 | 85 |
보기 관리: 목록 업데이트 및 삭제
1. 데이터베이스의 모든 보기 나열
SHOW FULL TABLES 문을 사용하거나 information_schema 테이블을 쿼리하여 데이터베이스의 모든 뷰를 나열할 수 있습니다.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
information_schema 사용
SELECT table_name
FROM information_schema.views
WHERE table_schema = 'database_name';
OR
SELECT table_schema table_name view_definition
FROM information_schema.views
WHERE table_schema = 'database_name';
2. 보기 삭제
SQL을 사용하면 기존 보기를 삭제할 수 있습니다. 우리는 할 수 있다 삭제 또는 DROP 문을 사용하여 View를 삭제합니다.
통사론:
DROP VIEW view_name;예: 이 예에서는 View MarksView를 삭제합니다.
DROP VIEW MarksView;3. 보기 정의 업데이트
뷰 내의 기존 데이터를 업데이트하려면 업데이트 성명.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
데이터에 영향을 주지 않고 뷰 정의를 업데이트하려면 CREATE OR REPLACE VIEW 문을 사용하세요. 예를 들어Age열에MarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
메모: UPDATE 문을 사용하여 모든 뷰를 업데이트할 수 있는 것은 아닙니다.
SQL에서 뷰를 업데이트하는 규칙:
뷰를 업데이트하려면 특정 조건을 충족해야 합니다. 이 조건 중 하나라도 해당된다면 ~ 아니다 뷰를 업데이트할 수 없습니다.
- 뷰를 생성하는 데 사용되는 SELECT 문에는 GROUP BY 절이나 주문 방법 절.
- SELECT 문에는 다음이 없어야 합니다. 별개의 예어.
- 뷰에는 모두 NOT NULL 값이 있어야 합니다.
- 중첩된 쿼리나 복잡한 쿼리를 사용하여 뷰를 생성하면 안 됩니다.
- 뷰는 단일 테이블에서 생성되어야 합니다. 여러 테이블을 사용하여 뷰를 생성한 경우 뷰를 업데이트할 수 없습니다.
뷰를 사용한 고급 기술
1. 뷰를 통한 데이터 업데이트
CREATE OR REPLACE VIEW 문을 사용하여 뷰의 필드를 추가하거나 교체할 수 있습니다. MarksView 뷰를 업데이트하고 StudentMarks Table의 이 뷰에 AGE 필드를 추가하려는 경우 다음을 수행할 수 있습니다.
예:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
이제 MarksView에서 모든 데이터를 다음과 같이 가져오면:
SELECT * FROM MarksView;산출:
이름 | 주소 | 점수 | 나이 |
|---|---|---|---|
가혹한 | 콜카타 | 90 | 19 |
관행 | 델리 | 80 | 19 |
단라즈 | 비하르 | 95 | 21 |
숫양 | 라자스탄 | 85 | 18 |
테이블에서와 동일한 방식으로 뷰에 행을 삽입할 수 있습니다. 우리는 삽입 대상 뷰에 행을 삽입하는 SQL 문입니다. 아래 예에서는 위의 '단일 테이블에서 뷰 생성' 예에서 생성한 View DetailsView에 새 행을 삽입합니다.
예:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
이제 DetailsView에서 모든 데이터를 다음과 같이 가져오면
SELECT * FROM DetailsView;산출:
이름 | 주소 |
|---|---|
가혹한 | 콜카타 |
아시시 | 두르가푸르 |
관행 | 델리 |
단라지 | 비하르 |
수레쉬 | 구르가온 |
3. 뷰에서 행 삭제
뷰에서 행을 삭제하는 것도 테이블에서 행을 삭제하는 것만큼 간단합니다. SQL의 DELETE 문을 사용하여 뷰에서 행을 삭제할 수 있습니다. 또한 뷰에서 행을 삭제하면 먼저 실제 테이블에서 행이 삭제되고 변경 내용이 뷰에 반영됩니다. 이 예에서는 위의 행 삽입 예에서 방금 추가한 DetailsView 뷰에서 마지막 행을 삭제합니다.
예:
DELETE FROM DetailsView
WHERE NAME='Suresh';
이제 DetailsView에서 모든 데이터를 다음과 같이 가져오면
SELECT * FROM DetailsView;산출:
이름 | 주소 |
|---|---|
가혹한 | 콜카타 |
아시쉬 | 두르가푸르 |
관행 | 델리 |
단라지 | 비하르 |
4. WITH CHECK OPTION 절
SQL의 WITH CHECK OPTION 절은 뷰에 매우 유용한 절입니다. 업데이트 가능한 보기에 적용됩니다. CREATE VIEW 문에서 WHERE 절의 조건이 만족되지 않는 경우 데이터 수정(INSERT 또는 UPDATE 사용)을 방지하기 위해 사용됩니다.
CREATE VIEW 문에서 WITH CHECK OPTION 절을 사용한 경우 UPDATE 또는 INSERT 절이 조건을 충족하지 않으면 오류가 반환됩니다. 아래 예에서는 WITH CHECK OPTION 절을 사용하여 StudentDetails 테이블에서 View SampleView를 생성합니다.
예:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
이 뷰에서 NAME 열에 Null 값이 있는 새 행을 삽입하려고 하면 NAME 열에 대한 조건이 NOT NULL인 뷰가 생성되기 때문에 오류가 발생합니다. 예를 들어 보기가 업데이트 가능하더라도 이 보기에 대한 아래 쿼리도 유효하지 않습니다.
INSERT INTO SampleView(S_ID)퀴즈 만들기
VALUES(6);