쿼리 기반의 가상 테이블은 create view 명령을 통하여 생성할 수 있습니다. 가상 테이블 은 SELECT 결과 조회를 가상 테이블의 이름으로 별칭을 선언합니다. 다음은 VIEW 테이 블 생성의 쿼리 문법입니다.
| 쿼리 문법 |
CREATE VIEW view_name AS SELECT column1, column2, … FROM table_name WHERE condition;
가상 테이블의 기반인 실제적인 테이블 데이터가 변경되면 VIEW의 데이터도 변경됩 니다. 또한 VIEW에서도 데이터를 변경하면 실제적인 테이블의 데이터도 변경됩니다. 조건이 설정되어 있는 VIEW도 실제적인 테이블의 데이터가 변경되었을 때 VIEW의 조 건도 자동으로 반영되어 출력됩니다.
21.1.1 쿼리 실습
products 테이블에서 판매가 활성화된 상품만 조회하여 새로운 가상 테이블을 생성합니다.
| 예제 쿼리 |
CREATE VIEW [Current Product List] AS SELECT ProductID, ProductName FROM Products WHERE enable = ‘on’;
이렇게 생성된 가상 테이블도 기존 방식과 동일한 형태로 데이터를 조회할 수 있습니다.
| 예제 쿼리 |
SELECT * FROM [Current Product List];
다음은 이 중 select를 이용하여 결과값을 조회한 후 이 결과를 가상의 테이블로 생성합니다.
| 예제 쿼리 |
CREATE VIEW [Products Average Price] AS SELECT ProductName, UnitPrice FROM Products WHERE UnitPrice > (SELECT AVG(UnitPrice) FROM Products);
이렇게 생성된 가상 테이블을 select문을 통하여 조회가 가능합니다.
| 예제 쿼리 |
SELECT * FROM [Products Average Price];
다음은 또 다른 예제입니다.
| 예제 쿼리 |
CREATE VIEW [Category Sales For 2017] AS SELECT DISTINCT CategoryName, Sum(ProductSales) AS CategorySales FROM [Product Sales for 2017] GROUP BY CategoryName;
이렇게 생성된 가상 테이블을 select문을 통하여 조회가 가능합니다.
| 예제 쿼리 |
SELECT * FROM [Category Sales For 2017];
또한 where 절을 추가하여 검색할 수도 있습니다.
| 예제 쿼리 |
SELECT * FROM [Category Sales For 2017] WHERE CategoryName = 'cpu';
21.1.2 PHP 실습
PHP 코드를 통하여 VIEW를 실습해 봅니다.
| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.
// 입력된 select 쿼리를 기반으로 view를 셍성합니다.
public function createView($view, $selectQuery)
{
if ($view) {
if ($selectQuery) {
$queryString = "CREATE VIEW $view AS $selectQuery";
// 쿼리를 전송합니다.
if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
$this->msgEcho("쿼리성공] ".$queryString);
$this->msgEcho(" 뷰 생성!");
// 객체 반환, 매서드체인
return $this;
} else {
$this->msgEcho("Error] ".$queryString);
}
} else {
$this->msgEcho("Error] 조건 select 쿼리를 입력해 주세요..");
}
} else {
$this->msgEcho("Error] 뷰 이름을 적어주세요.");
}
}
예제 파일 | view-01.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
// 뷰를 생성합니다.
$db->createView("viewtest", "select * from members");
?>
화면 출력
mysql connected!
쿼리성공] CREATE VIEW viewtest AS select * from members
뷰 생성!