SQL-보기 사용

뷰는 연관된 이름으로 데이터베이스에 저장된 SQL 문에 불과합니다. 뷰는 실제로 미리 정의 된 SQL 쿼리 형식의 테이블 구성입니다.

뷰는 테이블의 모든 행을 포함하거나 테이블에서 행을 선택할 수 있습니다. 뷰를 생성하기 위해 작성된 SQL 쿼리에 의존하는 하나 이상의 테이블에서 뷰를 생성 할 수 있습니다.

가상 테이블의 유형 인보기는 사용자가 다음을 수행 할 수 있도록합니다.

  • 사용자 또는 사용자 클래스가 자연 스럽거나 직관적 인 방식으로 데이터를 구조화합니다.

  • 사용자가 필요로하는 것을 정확히보고 수정할 수있는 방식으로 데이터에 대한 액세스를 제한합니다.

  • 보고서를 생성하는 데 사용할 수있는 다양한 테이블의 데이터를 요약합니다.

보기 만들기

데이터베이스보기는 CREATE VIEW성명서. 보기는 단일 테이블, 여러 테이블 또는 다른보기에서 만들 수 있습니다.

보기를 만들려면 사용자에게 특정 구현에 따라 적절한 시스템 권한이 있어야합니다.

기본 CREATE VIEW 구문은 다음과 같습니다-

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

일반 SQL SELECT 쿼리에서 사용하는 것과 유사한 방식으로 SELECT 문에 여러 테이블을 포함 할 수 있습니다.

다음 레코드가있는 CUSTOMERS 테이블을 고려하십시오.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

다음은 CUSTOMERS 테이블에서보기를 작성하는 예입니다. 이보기는 CUSTOMERS 테이블에서 고객 이름과 나이를 갖는 데 사용됩니다.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

이제 실제 테이블을 쿼리하는 것과 비슷한 방식으로 CUSTOMERS_VIEW를 쿼리 할 수 ​​있습니다. 다음은 동일한 예입니다.

SQL > SELECT * FROM CUSTOMERS_VIEW;

그러면 다음과 같은 결과가 생성됩니다.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

WITH CHECK 옵션

WITH CHECK OPTION은 CREATE VIEW 문 옵션입니다. WITH CHECK OPTION의 목적은 모든 UPDATE 및 INSERT가 뷰 정의의 조건을 충족하는지 확인하는 것입니다.

조건을 만족하지 않으면 UPDATE 또는 INSERT가 오류를 반환합니다.

다음 코드 블록에는 WITH CHECK OPTION을 사용하여 동일한 뷰 CUSTOMERS_VIEW를 만드는 예제가 있습니다.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

이 경우 WITH CHECK OPTION은 뷰가 AGE 열에 NULL 값이없는 데이터에 의해 정의되기 때문에 뷰의 AGE 열에있는 모든 NULL 값의 입력을 거부해야합니다.

보기 업데이트

보기는 아래에 주어진 특정 조건에서 업데이트 될 수 있습니다-

  • SELECT 절은 키워드 DISTINCT를 포함 할 수 없습니다.

  • SELECT 절에는 요약 함수가 포함될 수 없습니다.

  • SELECT 절에는 집합 함수가 포함될 수 없습니다.

  • SELECT 절에는 집합 연산자가 포함될 수 없습니다.

  • SELECT 절에는 ORDER BY 절이 포함될 수 없습니다.

  • FROM 절은 여러 테이블을 포함 할 수 없습니다.

  • WHERE 절에는 하위 쿼리가 포함될 수 없습니다.

  • 쿼리에 GROUP BY 또는 HAVING이 포함될 수 없습니다.

  • 계산 된 열은 업데이트 할 수 없습니다.

  • INSERT 쿼리가 작동하려면 기본 테이블의 모든 NOT NULL 열이 뷰에 포함되어야합니다.

따라서보기가 위에서 언급 한 모든 규칙을 충족하면 해당보기를 업데이트 할 수 있습니다. 다음 코드 블록에는 Ramesh의 나이를 업데이트하는 예제가 있습니다.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

이것은 궁극적으로 기본 테이블 CUSTOMERS를 업데이트하고 동일한 내용이 뷰 자체에 반영됩니다. 이제 기본 테이블을 쿼리하면 SELECT 문이 다음 결과를 생성합니다.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

뷰에 행 삽입

데이터 행을 뷰에 삽입 할 수 있습니다. UPDATE 명령에 적용되는 동일한 규칙이 INSERT 명령에도 적용됩니다.

여기서는이 뷰에 NOT NULL 열을 모두 포함하지 않았기 때문에 CUSTOMERS_VIEW에 행을 삽입 할 수 없습니다. 그렇지 않으면 테이블에 삽입하는 것과 유사한 방식으로 뷰에 행을 삽입 할 수 있습니다.

보기로 행 삭제

보기에서 데이터 행을 삭제할 수 있습니다. UPDATE 및 INSERT 명령에 적용되는 동일한 규칙이 DELETE 명령에 적용됩니다.

다음은 AGE = 22 인 레코드를 삭제하는 예입니다.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

이것은 궁극적으로 기본 테이블 CUSTOMERS에서 행을 삭제하고 동일한 내용이 뷰 자체에 반영됩니다. 이제 기본 테이블을 쿼리하면 SELECT 문이 다음 결과를 생성합니다.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

뷰 삭제

분명히 뷰가있는 곳에서 더 이상 필요하지 않은 경우 뷰를 삭제할 수있는 방법이 필요합니다. 구문은 매우 간단하며 아래에 나와 있습니다.

DROP VIEW view_name;

다음은 CUSTOMERS 테이블에서 CUSTOMERS_VIEW를 삭제하는 예입니다.

DROP VIEW CUSTOMERS_VIEW;