《SQL必知必會》16 18章筆記

2021-07-13 19:53:33 字數 4969 閱讀 6839

update的使用方式:

e.g:

update customers 

set cust_email = '[email protected]'

where cust_id = '1000000005';

update語句總是以要更新的表名開始。set命令用來將新值賦給被更新的列,update語句以where子句結束,它告訴dbms更新哪一行。沒有where將會更新所有行,這不是我們所希望的。

更新多個列:

update customers 

set cust_contact = 'sam roberts',

cust_email = '[email protected]'

where cust_id = '1000000006';

要刪除某個列的值,可設定它為null,如下進行:

update customers 

set cust_email = null

where cust_id = '1000000005';

從乙個表中刪除資料,使用delete語句。有兩種刪除的方式:

下面語句從customers表刪除一行:

delete

from customers

where cust_id = '100000006';

更新和刪除的指導原則

一般有兩種建立表的方法:

利用create table建立表,必須給出下列資訊

下例是本書建立products表的例子

create

table products

( prod_id char(10) not

null,

vend_id char(10) not

null,

prod_name char(254) not

null,

prod_price decimal(8,2) not

null,

prod_desc varchar(1000) null

);

每個表列要麼是null列,要麼是not null列,這種狀態在建立時由表的定義規定。

create

table orders

( order_num integer

notnull ,

order_date datetime not

null ,

cust_id char(10) not

null

);

這裡每一列的定義都有not null。這就會組織沒有插入值的列。如果插入沒有值的列,將返回錯誤,且插入失敗。

create

table orderitems

( order_num integer

notnull ,

order_item integer

notnull ,

prod_id char(10) not

null ,

quantity integer

notnull , default

1, item_price decimal(8,2) not

null

);

alter table用來更改表結構,必須給出下面的資訊:

例如:

alter

table vendors

add vend_phone char(20);

這條語句給vendors增加乙個名為vend_phone的列,其資料型別是char。

更改或者刪除列、增加約束或增加鍵,這些操作也使用類似的語法:

alter

table vendors

drop

column vend_phone

複雜的表結構更改一般需要手動刪除過程,它涉及以下步驟:

用新的列布局建立乙個新錶

使用insert select語句從舊表複製資料到新錶。有必要的話可以使用轉換函式和計算字段;

檢驗包含所需資料的新錶

重新命名舊表

用舊表原來的名字來命名新錶

根據需要,重新建立觸發器、儲存過程、索引和外來鍵

droptable custcopy;
檢視是虛擬的表。與包含資料的表不一樣,檢視只包含使用時動態檢索資料的查詢。

如果我們需要查詢訂購了某種產品的顧客。我們可以這麼做

select cust_num,cust_contact

from customers,orders,orderitems

where customers.cust_id = orders.cust_id

and orderitems.order_num = orders.order_num

and prod_id = 'rgan01'

任何需要使用這個資料的人是需要理解相關表的結構,知道如何建立查詢和對錶進行聯結。檢索其他產品或者多個產品的資料必須要修改最後的where子句。

現在,加入可以把整個查詢包裝成乙個名為productcustomers的虛擬表,則可以如下輕鬆地檢索出相同的資料:

select cust_name, cust_contact 

from productcustomers

where prod_id = 'rgan01';

這就是檢視的作用。productcustomers是乙個檢視,它不包含任何列或資料,包含的是乙個查詢。

18.1.1為什麼使用檢視

18.1.2檢視的規則和限制

一些常見的規則和限制

檢視用create view來建立,與create table一樣,只能建立不存在的檢視。

刪除檢視 drop view viewname。

18.2.1利用檢視簡化複雜的聯結

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;

這條語句建立了乙個名為productcustomers的檢視,它聯結了三個表,返回已訂購了任意產品的所有顧客的列表。如果執行select * from productcustomers,將列出訂購了任意商品的顧客。

檢索訂購了產品rgan01的顧客,可如下進行:

select cust_name,cust_contact

from productcustomers

where prod_id = 'rgan01'

18.2.2用檢視重新格式化檢索出的資料
select rtrim(vend_name)||'('||

rtrim(vend_country)||')'

as vend_title

from vendors

order

by vend_name;

現在,假設經常需要這個格式的結果。我們不必每次需要時執行這種拼接,而是建立乙個檢視,使用它時即可。

create

view vendorlocation as

select rtrim(vend_name)||'('||

rtrim(vend_country)||')'

as vend_title

from vendors

要檢索資料,建立所有郵件的標籤,可如下進行:

select *

from vendorlocations;

18.2.3用檢視過濾不想要的資料

可以定義customeremaillist檢視,過濾沒有電子郵件位址的顧客。為此可以使用下面語句

create

view customeremaillist as

select cust_id,cust_name,cust_email

from customers

where cust_email is

notnull;

18.2.4使用檢視與計算字段

檢索某個訂單中的物品,並計算每種物品的總**:

select prod_id,

quantity,

item_price,

quantity*item_price as expanded_price

from orderitems

where order_num = 20008;

要將其轉換為乙個檢視,可以如下進行

create

view orderitemexpanded_price

select order_num,

prod_id,

quantity,

item_price,

quantity*item_price as expanded_price

from orderitems

利用檢視來檢索訂單20008的詳細內容就可以如下進行:

select *

from orderitemexpanded

where order_num=20008;

可以看到,檢視非常容易建立,而且很好使用。

sql必知必會筆記(1 3章)

資料庫 儲存有組織的資料的容器 通常是乙個檔案或一組檔案 表 某種特定型別資料的結構化清單。模式 關於資料庫和表的布局及特性的資訊。列 表中的乙個字段。儲存著表中某部分資訊。主鍵 一列 或一組列 其值能夠唯一標識表中每個行。成為主鍵的條件 1.任意兩行都不具有相同的主鍵值 2.每個行都必須有乙個主鍵...

SQL必知必會筆記(4 6章)

過濾資料 在select語句中,from子句指定要搜尋的表,where子句指定搜尋條件,例 select prod name,prod price from products where prod price 3.49 該例從products表中檢索出prod price 3.49的兩列prod n...

《sql必知必會》筆記

資料庫 儲存有組織的資料的容器 通常是乙個檔案或一組檔案 注意誤用混淆 資料庫軟體被稱為dbms,資料庫是通過dbms建立和操縱的容器 模式 關於資料庫和表的布局及特性的資訊。主鍵 一列或一組列,其值能夠唯一標識表中的每一行。多條sql語句必須以 分隔。sql語句不區分大小寫,select和sele...