English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 SQL을 사용하여 뷰를 생성, 업데이트, 제거하는 방법을 배울 것입니다.
뷰는 데이터베이스에 저장된 정의가 있는 가상 테이블입니다. 그러나 테이블과 달리, 뷰는 실제로 데이터를 포함하지 않습니다. 대신, 일반적인 복잡한 쿼리를 데이터베이스에 저장하는 방법을 제공합니다. 그러나, 다음과 같이 사용할 수 있습니다.SQL SELECT 문장뷰 데이터에 접근하는 방법은 일반 테이블이나 기본 테이블과 같습니다.
사용자가 데이터베이스 전체 테이블에 대한 접근 권한을 직접 부여하는 대신 뷰를 통해 데이터에 접근할 수 있게 하여, 뷰는 보안 메커니즘으로 사용될 수 있습니다.
CREATE VIEW 문장을 사용하여 뷰를 생성합니다.
CREATE VIEW view_name AS select_statement;
이를 명확히 이해하기 위해 아래를 보도록 하겠습니다.employees와departments表。
+--------+--------------+--------+---------+ | emp_id | emp_name | salary | dept_id | +--------+--------------+--------+---------+ | 1 | Ethan Hunt | 5000 | 4 | | 2 | Tony Montana | 6500 | 1 | | 3 | Sarah Connor | 8000 | 5 | | 4 | Rick Deckard | 7200 | 3 | | 5 | Martin Blank | 5600 | NULL | +--------+--------------+--------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
표: employees | 표: departments |
예를 들어, 근무자의 ID와 이름, 그리고 그들의 부서 이름을 검색하려면 다음과 같이 실행해야 합니다:왼쪽 결합다음과 같은 작업을 수행합니다:
SELECT t1.emp_id, t1.emp_name, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id;
위의 쿼리를 실행한 후, 다음과 같은 출력을 얻을 수 있습니다:
+--------+--------------+-----------------+ | emp_id | emp_name | dept_name | +--------+--------------+-----------------+ | 1 | Ethan Hunt | Human Resources | | 2 | Tony Montana | Administration | | 3 | Sarah Connor | Sales | | 4 | Rick Deckard | Finance | | 5 | Martin Blank | NULL | +--------+--------------+-----------------+
하지만, 이 기록에 접근할 때마다 항상 전체 쿼리를 다시 입력해야 합니다. 이러한 작업을 자주 수행하면 매우 불편하고 번거롭습니다.
이 경우, 쿼리 결과를 더 쉽게 접근할 수 있는 뷰를 생성할 수 있습니다. 다음과 같이 사용할 수 있습니다:
CREATE VIEW emp_dept_view AS SELECT t1.emp_id, t1.emp_name, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id;
이제, emp_dept_view 뷰를 사용하여 동일한 기록에 접근할 수 있습니다. 다음과 같이 사용할 수 있습니다:
SELECT * FROM emp_dept_view;
보시다시피, 뷰를 통해 얼마나 많은 시간과 노력을 절약할 수 있는지 알 수 있습니다.
알림:뷰는 항상 최신 데이터를 표시합니다! 뷰를 쿼리할 때마다, 데이터베이스 엔진은 뷰와 연관된 SQL 쿼리를 실행하여 데이터를 다시 생성합니다.
주의:MySQL에서는 뷰 정의에서 다음과 같이 지정할 수도 있습니다.ORDER BY절. 하지만, SQL Server에서는 ORDER BY 절을 포함한 뷰 정의는, 다음과 같이 unless 조건을 만족하지 않으면 포함할 수 없습니다:SELECT문장의 선택 목록에도 있습니다.TOP절.
MySQL에서, 기존 뷰를 업데이트하거나 대체하려면, 해당 뷰를 삭제하고 새로운 뷰를 생성하거나, CREATE VIEW 문장의 OR REPLACE 절만 사용할 수 있습니다. 다음과 같이 사용할 수 있습니다:
CREATE OR REPLACE VIEW view_name AS select_statement;
주의:CREATE VIEW 문장에서 OR REPLACE 절을 사용할 때, 해당 뷰가 존재하지 않으면 새로운 뷰를 생성하며, 존재하면 기존 뷰를 대체합니다.
아래의 SQL 문장은 기존 뷰를 대체하거나 변경합니다.emp_dept_view뷰 정의는 새로운 열 salary를 추가하는 방법으로 합니다.
-- MySQL 데이터베이스 문법 CREATE OR REPLACE VIEW emp_dept_view AS SELECT t1.emp_id, t1.emp_name, t1.salary, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id;
뷰를 업데이트한 후, 다음과 같은 문장을 실행하면:
SELECT * FROM emp_dept_view ORDER BY emp_id;
결과 출력에서 다른 열을 볼 수 있습니다salary아래와 같이 표시됩니다:
+--------+--------------+--------+-----------------+ | emp_id | emp_name | salary | dept_name | +--------+--------------+--------+-----------------+ | 1 | Ethan Hunt | 5000 | Human Resources | | 2 | Tony Montana | 6500 | Administration | | 3 | Sarah Connor | 8000 | Sales | | 4 | Rick Deckard | 7200 | Finance | | 5 | Martin Blank | 5600 | NULL | +--------+--------------+--------+-----------------+
주의: SQL Server는 OR REPLACE 문장을 지원하지 않기 때문에, 뷰를 대체하려면 해당 뷰를 지우고 스트레치에서 새로운 뷰를 생성할 수 있습니다.
이론적으로, 다음의 것 외에 모든 것을 뷰를 통해 데이터를 업데이트할 수 있습니다.SELECT문장 외에도 뷰에서 실행할 수 있습니다INSERT,UPDATE와DELETE하지만, 모든 뷰가 업데이트 가능하지 않습니다. 즉, 기본 소스 테이블의 데이터를 수정할 수 있습니다. 업데이트 가능성에 대해 제한이 있습니다.
일반적으로, 다음의 어떤 내용도 포함된 뷰는 업데이트할 수 없습니다:
DISTINCT, GROUP BY 또는 HAVING 문장.
AVG(), COUNT(), SUM(), MIN(), MAX()와 같은 집계 함수.
UNION, UNION ALL, CROSS JOIN, EXCEPT 또는 INTERSECT 연산자.
WHERE 문장에서 서브 쿼리가 FROM 문장에서의 테이블을 참조합니다.
인 직원의 급여를 업데이트할 것입니다.
다음 문장은 emp_id가1의 직원의 급여(salary)를 설정합니다.
UPDATE emp_dept_view SET salary = '6000' WHERE emp_id = 1;
주의:입력 가능성을 실현하기 위해, 이 뷰는 기본 테이블에서 기본 값을 가지지 않는 모든 열을 포함해야 합니다. 또한, 업데이트 가능성을 실현하기 위해, 뷰의 각 수정 가능 열은 원본 테이블의 수정 가능 열과 일치해야 합니다.
또한, 더 이상 필요하지 않은 뷰를 제거하려면 DROP VIEW 문을 사용할 수 있습니다. 다음과 같은 문법을 참조하세요:
DROP VIEW view_name;
다음 명령어는 데이터베이스에서 뷰를 제거합니다emp_dept_view。
DROP VIEW emp_dept_view;