4.1 檢視
mysql 從版本 5 起開始支援檢視
/*理解檢視
*//*
在下例中,檢索其他產品(或多個產品)的相同資料,必須修改最後的where 子句。
*/select
cust_name, cust_contact
from
customers, orders, orderitems
where customers.cust_id =
orders.cust_id
and orderitems.order_num =
orders.order_num
and prod_id =
'rgan01';
/*假如可以把整個查詢包裝成乙個名為 productcustomers 的虛擬表,則可以如下輕鬆地檢索出相同的資料
*/select
cust_name, cust_contact
from
productcustomers
where prod_id =
'rgan01
';
為什麼使用檢視?
重用 sql 語句。
簡化複雜的 sql 操作。在編寫查詢後,可以方便地重用它而不必知道其基本查詢細節。
使用表的一部分而不是整個表。
保護資料。可以授予使用者訪問表的特定部分的許可權,而不是整個表的訪問許可權。
更改資料格式和表示。檢視可返回與底層表的表示和格式不同的資料。
建立檢視之後,可以用與表基本相同的方式使用它們。可以對檢視執行select 操作,過濾和排序資料,將檢視聯結到其他檢視或表,甚至新增和更新資料。
重要的是,要知道檢視僅僅是用來檢視儲存在別處資料的一種設施。檢視本身不包含資料,因此返回的資料是從其他表中檢索出來的。
關於檢視建立和使用的一些最常見的規則和限制:
與表一樣,檢視必須唯一命名(不能給檢視取與別的檢視或表相同的名字)
對於可以建立的檢視數目沒有限制。
建立檢視,必須具有足夠的訪問許可權。這些許可權通常由資料庫管理人員授予。
檢視可以巢狀,即可以利用從其他檢視中檢索資料的查詢來構造檢視。所允許的巢狀層數在不同的 dbms 中有所不同(巢狀檢視可能會嚴重降低查詢的效能,因此在產品環境中使用之前,應該對其進行全面測試)。
許多 dbms 禁止在檢視查詢中使用 order by 子句。
有些 dbms 要求對返回的所有列進行命名,如果列是計算字段,則需要使用別名。
檢視不能索引,也不能有關聯的觸發器或預設值。
有些 dbms 把檢視作為唯讀的查詢,這表示可以從檢視檢索資料,但不能將資料寫回底層表。詳情請參閱具體的 dbms 文件。
有些 dbms 允許建立這樣的檢視,它不能進行導致行不再屬於檢視的插入或更新。例如有乙個檢視,只檢索帶有電子郵件位址的顧客。如果更新某個顧客,刪除他的電子郵件位址,將使該顧客不再屬於檢視。這是預設行為,而且是允許的,但有的 dbms 可能會防止這種情況發生。
下面給出幾個使用檢視的例子:
/*建立檢視create view,刪除檢視使用drop view
*/create
view productcustomers as
select
cust_name, cust_contact, prod_id
from
customers, orders, orderitems
where customers.cust_id =
orders.cust_id
and orderitems.order_num =
orders.order_num;
/*使用檢視
*/select
cust_name, cust_contact
from
productcustomers
where prod_id =
'rgan01
';
/*初始語句
*/select
rtrim(vend_name) +'(
'+rtrim(vend_country) +')
'asvend_title
from
vendors
order
byvend_name;
/*設為檢視
*/create
view vendorlocations as
select
rtrim(vend_name) +'(
'+rtrim(vend_country) +')
'asvend_title
from
vendors;
/*使用檢視
*/select
*from vendorlocations;
/*用檢視過濾沒有電子郵件位址的顧客
*/create
view customeremaillist as
select
cust_id, cust_name, cust_email
from
customers
where cust_email is
notnull;/*
使用檢視
*/select
*from customeremaillist;
總結:
檢視為虛擬的表。它們包含的不是資料而是根據需要檢索資料的查詢。
檢視提供了一種封裝 select 語句的層次,可用來簡化資料處理,重新格式化或保護基礎資料。
4.2 儲存過程
SQL必知必會(2) 2 6課
參考 單列,多列,所有列 select id select id,age select from user 多條sql語句必須以 分隔。sql語句不區分大小寫,select和select是相通的,一般關鍵字大寫,表名 列名小寫,不過表名,列名和值可能有所不同 依賴於具體點dbms及其如何配置 處理s...
《sql必知必會》筆記
資料庫 儲存有組織的資料的容器 通常是乙個檔案或一組檔案 注意誤用混淆 資料庫軟體被稱為dbms,資料庫是通過dbms建立和操縱的容器 模式 關於資料庫和表的布局及特性的資訊。主鍵 一列或一組列,其值能夠唯一標識表中的每一行。多條sql語句必須以 分隔。sql語句不區分大小寫,select和sele...
SQL必知必會
資料庫 儲存有組織的資料的容器。資料庫管理系統 dbms 資料庫軟體,資料庫是通過dbms建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...