《SQL必知必會》筆記四 18 19課

2022-10-08 19:51:18 字數 2931 閱讀 7023

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建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...