차례:
비디오: SQL Tutorial - Full course for beginners 2024
때때로 SQL의 CUSTOMER 테이블에서 특정 정보를 검색하려고합니다. 모든 것을 보지 않고 특정 열과 행만보고 싶을 것입니다. 당신이 필요로하는 것은 견해입니다.
A 보기 는 가상 테이블입니다. 대부분의 구현에서 뷰에는 독립적 인 물리적 존재가 없습니다. 뷰의 정의는 데이터베이스의 메타 데이터에만 존재하지만 데이터는 뷰를 파생시킨 테이블에서 가져옵니다. 뷰의 데이터는 물리적으로 복제되지 않습니다.
단일 테이블보기
원하는 정보가 단일 테이블에있는 경우 데이터의 단일 테이블보기를 만들 수 있습니다. 예를 들어, 뉴 햄프셔 주에 살고있는 모든 고객의 이름과 전화 번호를보고 싶다고 가정 해보십시오. 원하는 데이터 만 포함하는 CUSTOMER 테이블에서 뷰를 작성할 수 있습니다. 다음 SQL 문은이보기를 작성합니다.
고객 선택으로 NH_CUST보기. 이름, 고객. 성, 고객. 고객의 전화 번호. 상태 = 'NH';
SQL 구현에서 모든 테이블 참조가 FROM 절의 테이블 참조와 동일하다고 가정하면 입력 작업을 줄여 동일한 작업을 수행 할 수 있습니다. 시스템이 합당한 기본 가정을하는 경우, 다음 행으로 명령문을 줄일 수 있습니다.
NH_CUST보기로 이름, 성, 전화 번호를 고객에게 알려주십시오. 상태 = 'NH';
두 번째 버전은 쓰기 및 읽기가 더 쉽지만 ALTER TABLE 명령을 사용하면 더 쉽게 손상 될 수 있습니다. 이러한 혼란은 JOIN이없는이 간단한 경우에는 문제가되지 않지만 JOIN을 사용한 뷰는 완전한 이름을 사용할 때 더욱 강력합니다.
다중 테이블보기
자주 질문에 대답하기 위해 두 개 이상의 테이블에서 데이터를 가져와야합니다. 예를 들어, 스포츠 용품점에서 일한다고 가정 해보십시오. 작년에 개장 한 이래로 스키 장비를 구입 한 모든 고객에게 프로모션 우편물을 보내고 싶다고 가정 해보십시오.
CUSTOMER 표, PRODUCT 표, INVOICE 표 및 INVOICE_LINE 표의 정보가 필요합니다. 필요한 데이터를 보여주는 다중 테이블 뷰를 생성 할 수 있습니다. 뷰를 사용할 때마다 뷰를 마지막으로 사용한 이후 기본 테이블에서 발생한 모든 변경 사항이 반영됩니다.
이 스포츠 용품점의 데이터베이스에는 CUSTOMER, PRODUCT, INVOICE 및 INVOICE_LINE 테이블 네 개가 포함되어 있습니다.
데이터 유형 | 제약 조건 | 고객 | 고객 ID |
---|---|---|---|
정수 | NOT NULL | 이름 | CHAR (15) |
성 < CHAR (20) | CHAR (2) | ||
우편 번호 | CHAR (20) | > CHAR (10) | |
전화 | 제품 제품 ID 999 INTEGER | ||
NOT NULL | 이름 | ||
CHAR (25) | 설명 > CHAR (30) | ||
범주 999 CHAR (15) 999 VendorID 999 INTEGER 999 VendorName 999 CHAR (30) 999 INVOICE 999 InvoiceNumber 999 INTEGER 999 (9, 2) | FormOfPayment | ||
(9,2) | INTEGER | ||
NOT NULL | INTEGER | INTEGER | INTEGER |
INTEGER | INTEGER | ||
INTEGER | > 수량 | ||
INTEGER | SalePrice | ||
숫자 (9, 2) | 일부 열에는 NOT NULL 제약 조건이 포함됩니다.이 열은 해당 테이블 또는 열의 기본 키로서 값을 포함해야한다고 결정합니다. 테이블의 기본 키는 각 행을 고유하게 식별해야합니다. 이를 수행하기 위해 기본 키는 모든 행에 널 (NULL)이 아닌 값을 포함해야합니다. | ||
표는 공통적으로 가지고있는 열을 통해 서로 관련되어 있습니다. 다음 목록은 이러한 관계를 설명합니다. | CUSTOMER 테이블은 INVOICE 테이블에 대해 | ||
일대 다 관계 | 를가집니다. 한 고객이 여러 번 구매하여 여러 인보이스를 생성 할 수 있습니다. 그러나 각 인보이스는 하나의 고객 만 취급합니다. | INVOICE 테이블은 INVOICE_LINE 테이블과 일대 다 관계를 유지합니다. 송장에는 여러 줄이있을 수 있지만 각 줄은 하나의 송장에만 표시됩니다. | PRODUCT 테이블은 또한 INVOICE_LINE 테이블과 일대 다 관계를 유지합니다. 제품이 하나 이상의 송장에 두 줄 이상 나타날 수 있습니다. 그러나 각 라인은 하나의 제품만을 취급합니다. |
CUSTOMER 테이블은 일반적인 CustomerID 열에 의해 INVOICE 테이블에 연결됩니다. INVOICE 테이블은 일반적인 InvoiceNumber 열에 의해 INVOICE_LINE 테이블에 연결됩니다. PRODUCT 테이블은 일반적인 ProductID 열에 의해 INVOICE_LINE 테이블에 연결됩니다. 이 링크는이 데이터베이스를 | 관계형 | ||
데이터베이스로 만듭니다. | 스키 장비를 구입 한 고객에 대한 정보를 얻으려면 CUSTOMER 테이블에서 FirstName, LastName, Street, City, State 및 Zipcode가 필요합니다. PRODUCT 테이블의 카테고리. INVOICE 테이블의 InvoiceNumber; INVOICE_LINE 테이블의 LineNumber. 다음 문을 사용하여 단계별로 원하는보기를 만들 수 있습니다. | ||
CREATE VIEW SKI_CUST1 AS SELECT 성, 성,시,도, 주, 우편 번호, 송장 번호 고객 조인 INVOICE USING (CustomerID); CREATE VIEW SKI_CUST2 AS SELECT 성, 성,시,도, 주, 우편 번호, ProductID부터 SKI_CUST1에서 JOIN INVOICE_LINE USING (InvoiceNumber); CREATE VIEW SKI_CUST3 AS SELECT 성, 성,시,도, 주, 우편 번호, 범주로부터 SKI_CUST2 가입 제품 사용 (ProductID); CREATE VIEW SKI_CUST를 SELECT DISTINCT FirstName, LastName, Street, City, State, Zipcode에서 SKI_CUST3 위치 CATEGORY = 'Ski'; | CREATE VIEW 문은 JOIN 연산자를 사용하여 여러 테이블의 데이터를 결합합니다. | ||
다음은 네 가지 CREATE VIEW 문에 대한 요약입니다. | 첫 번째 명령문은 CUSTOMER 테이블의 열과 INVOICE 테이블의 열을 결합하여 SKI_CUST1 뷰를 생성합니다. | ||
두 번째 명령문은 SKI_CUST1 뷰를 생성하기 위해 SKI_CUST1과 INVOICE_LINE 테이블의 열을 결합합니다. | 세 번째 명령문은 SKI_CUST2 뷰를 생성하기 위해 SKI_CUST2와 PRODUCT 테이블의 열을 결합합니다. | ||
네 번째 문은 Ski 카테고리가없는 모든 행을 필터링합니다. 결과는 Ski 카테고리에서 적어도 하나의 제품을 구입 한 모든 고객의 이름과 주소가 포함 된보기 (SKI_CUST)입니다. | 네 번째 CREATE VIEW의 SELECT 절에있는 DISTINCT 키워드는 일부 고객이 여러 번 스키 항목을 구입 한 경우에도 각 고객마다 하나의 항목 만 갖도록합니다. |