쿼리 기반의 가상 테이블은 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
뷰 생성!