sql必知必会(第四版) 学习笔记二 视图
本書用到的幾個(gè)表的建表sql語句如下:
--銷售產(chǎn)品供應(yīng)商 CREATE TABLE Vendors (vend_id varchar(20) not null,vend_name varchar(50) not null,vend_address varchar(100),vend_city varchar(100),vend_state varchar(100), vend_zip varchar(20),vend_country varchar(100),PRIMARY KEY(vend_id), ) go--產(chǎn)品表 CREATE TABLE Products(prod_id varchar(20) not null,vend_id varchar(20) not null,prod_name varchar(100) not null,prod_price float,prod_desc varchar(200),PRIMARY KEY(prod_id),FOREIGN KEY(vend_id) REFERENCES Vendors(vend_id) ) go --顧客表 CREATE TABLE Customers(cust_id varchar(20),cust_name varchar(100),cust_address varchar(100),cust_city varchar(100),cust_state varchar(100),cust_country varchar(100),cust_contact varchar(100),cust_email varchar(100),PRIMARY KEY(cust_id) ) go --訂單表 CREATE TABLE Orders(order_num varchar(20),order_date date,cust_id varchar(20),PRIMARY KEY(order_num),FOREIGN KEY(cust_id) REFERENCES Customers(cust_id) ) go --OrderItems表 存儲(chǔ)每個(gè)訂單中的實(shí)際物品 CREATE TABLE OrderItems(order_num varchar(20),order_item varchar(20),prod_id varchar(20),quantity int,item_price float,FOREIGN KEY(order_num) REFERENCES Orders(order_num),FOREIGN KEY(prod_id) REFERENCES Products(prod_id) )?
--視圖 /*1 視圖是虛擬的表,只包含使用時(shí)動(dòng)態(tài)檢索數(shù)據(jù)的查詢2 視圖中包含的數(shù)據(jù)是從其他表中檢索出來的,當(dāng)這些表中數(shù)據(jù)改變時(shí)視圖中數(shù)據(jù)也將返回改變過得數(shù)據(jù)3 在特定條件下也可以通過視圖的修改影響基表數(shù)據(jù)*/--通過聯(lián)合查詢 來查詢訂購(gòu)了某種產(chǎn)品的顧客信息 select cust_name,cust_address,cust_contact from Customers,Orders,OrderItems where OrderItems.order_num = Orders.order_num and Customers.cust_id = Orders.cust_id and prod_id = 001;--上面的話我們可以通過修改prod_id號(hào),查詢產(chǎn)品所訂購(gòu)者的顧客信息,但是每次都這么寫就略繁瑣了 --如果我們把上面所需要的列數(shù)據(jù)寫到一個(gè)視圖中 然后在視圖中進(jìn)行相關(guān)查詢 就簡(jiǎn)便了很多 go create view ProductCustomer as select cust_name,cust_address,cust_contact,prod_id from Customers,Orders,OrderItems where OrderItems.order_num = Orders.order_num and Customers.cust_id = Orders.cust_id--上面創(chuàng)建的視圖中就包含了,cust_name,cust_address,cust_contact,prod_id 所對(duì)應(yīng)的一張視圖 --可以查詢視圖得到想要的結(jié)果 和上面效果一樣select cust_name,cust_address,cust_contact from ProductCustomer where prod_id = 001--這種情況修改涉及到了兩個(gè)表 不能進(jìn)行更新 update ProductCustomer2 set cust_name = '張三(修正5)',order_date='1999-1-1' where cust_name = '張三(修正4)'--涉及到一張表 所以可以 update Customers set cust_name = '張三(修正2)',cust_address = '皇家計(jì)量大學(xué)院' where cust_name = '張三(修正)' 可更新視圖
只要滿足下列條件,即可通過視圖修改基礎(chǔ)基表的數(shù)據(jù):
任何修改(包括 UPDATE、INSERT 和 DELETE 語句)都只能引用一個(gè)基表的列。
視圖中被修改的列必須直接引用表列中的基礎(chǔ)數(shù)據(jù)。不能通過任何其他方式對(duì)這些列進(jìn)行派生,如通過以下方式:
聚合函數(shù):AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。
計(jì)算。不能從使用其他列的表達(dá)式中計(jì)算該列。使用集合運(yùn)算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列將計(jì)入計(jì)算結(jié)果,且不可更新。
被修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影響。
上述限制適用于視圖的 FROM 子句中的任何子查詢,就像其應(yīng)用于視圖本身一樣。通常情況下,數(shù)據(jù)庫(kù)引擎 必須能夠明確跟蹤從視圖定義到一個(gè)基表的修改。
我對(duì)視圖的一點(diǎn)理解:
???? 通過視圖我們可以把幾張表中相關(guān)的有用信息提取到一張表(視圖)中,雖然視圖在數(shù)據(jù)庫(kù)中不存在,是虛擬的表,但是我們可以通過查找視圖獲得我們想查找的數(shù)據(jù),簡(jiǎn)化了復(fù)雜的SQL操作。
CSDN有篇比較好的博客講視圖的,連接如下:
http://blog.csdn.net/jbhou/article/details/3176262
from:?http://www.cnblogs.com/KingsWang/p/3392576.html
總結(jié)
以上是生活随笔為你收集整理的sql必知必会(第四版) 学习笔记二 视图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql必知必会(第四版) 学习笔记一
- 下一篇: MySQL索引知识总结