SQL必知必會 14~18章

注:這一系列的文章是《SQL必知必會》第四版的讀書筆記搀菩。

14.組合查詢

利用UNION操作符將多條SELECT語句組合成一個結果集呕臂。

14.1 組合查詢

主要有兩種情況需要使用組合查詢:

(1)在一個查詢中從不同的表返回結構數(shù)據

(2)對一個表執(zhí)行多個查詢,按一個查詢返回數(shù)據

14.2 創(chuàng)建組合查詢

14.2.1 使用UNION

給出每條SELECT語句肪跋,在各條語句之間放上關鍵字UNION歧蒋。

輸入:

SELECT cust_name,cust_contact,cust_email

FROM Customers

WHERE cust_state IN ('IL','IN','MI')

UNION

SELECT cust_name,cust_contact,cust_email

FROM Customers

WHERE cust_name='Fun4All';

14.2.2 UNION規(guī)則

(1)UNION必須由兩條及以上的SELECT語句組成,語句之間用關鍵字UNION分隔州既。

(2)UNION中的每個查詢必須包含相同的列谜洽、表達式或聚集函數(shù)。

(3)列數(shù)據類型必須兼容吴叶。類型不必完全相同阐虚,但必須是DBMS可以隱含轉換的類型。

14.2.3 包含或取消重復的行

UNION從查詢結果集中自動去除了重復的行晤郑。若想返回所有的匹配行敌呈,可使用UNION ALL而不是UNION。

輸入:

SELECT cust_name,cust_contact,cust_email

FROM Customers

WHERE cust_state IN ('IL','IN','MI')

UNION ALL

SELECT cust_name,cust_contact,cust_email

FROM Customers

WHERE cust_name='Fun4All';

14.2.4 對組合查詢結果排序

在用UNION組合查詢時造寝,只能使用一條ORDER BY子句磕洪,必須位于最后一條SELECT語句之后。

輸入:

SELECT cust_name,cust_contact,cust_email

FROM Customers

WHERE cust_state IN ('IL','IN','MI')

UNION

SELECT cust_name,cust_contact,cust_email

FROM Customers

WHERE cust_name='Fun4All'

ORDER BY cust_name,cust_contact;

15.插入數(shù)據

利用SQL的INSERT語句將數(shù)據插入表中诫龙。

15.1 數(shù)據插入

15.1.1 插入完整的行

輸入:

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email)

VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);

使用列的列表更加安全析显。

15.1.2 插入部分行

輸入:

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)

VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111');

如果表的定義允許,可以在INSERT操作中省略某些列签赃。省略的列必須滿足以下某個條件:

(1)該列定義為允許NULL值

(2)在表定義中給出默認值谷异。

15.1.3 插入檢索出的數(shù)據

輸入:

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)

SELECT?cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country

FROM CustNew;

15.2 從一個表復制到另一個表

以MySQL為例。

輸入:

CREATE TABLE CustCopy AS

SELECT * FROM Customers;

16.更新和刪除數(shù)據

利用UPDATE和DELETE語句進一步操作表數(shù)據锦聊。

16.1 更新數(shù)據

有兩種使用UPDATE的方式:

(1)更新表中的特定行

(2)更新表中的所有行

要注意WHERE子句歹嘹,避免錯誤的更新表中的所有行。

輸入:

UPDATE Customers

SET cust_contact='Sam Roberts',cust_email='sam@toyland.com'

WHERE cust_id='1000000006';

刪除某個列的值孔庭,可設置它為NULL尺上。

輸入:

UPDATE Customers

SET cust_email=NULL

WHERE cust_id='1000000005';

16.2 刪除數(shù)據

有兩種使用DELETE的方式:

(1)從表中刪除特定的行

(2)從表中刪除所有行

同樣要注意WHERE子句,避免誤刪除所有行圆到。

輸入:

DELETE FROM Customers

WHERE cust_id='1000000006';

DELETE刪除整行怎抛,而不是刪除列。DELETE能刪除表中的所有行芽淡,但是DELETE不刪除表本身马绝。

16.3 更新和刪除的指導原則

(1)除非確實打算更新或刪除每一行,否則絕對不要使用不帶WHERE子句的UPDATE或DELETE語句挣菲。

(2)保證每個表都有主鍵富稻。

(3)在UPDATE或DELETE語句使用WHERE子句前掷邦,應該先用SELECT進行測試,保證它過濾的是正確的記錄唉窃,以防編寫的WHERE子句不正確耙饰。

(4)使用強制實施引用完整性的數(shù)據庫纹笼,這樣DBMS將不允許刪除其數(shù)據與其他表相關聯(lián)的行纹份。

(5)如果DBMS允許數(shù)據庫管理員施加約束,防止執(zhí)行不帶WHERE子句的UPDATE或DELETE語句廷痘,則應該使用它蔓涧。

17.創(chuàng)建和操縱表

創(chuàng)建、更改和刪除表的基本知識笋额。

17.1 創(chuàng)建表

一般有兩種創(chuàng)建表的方法:

(1)多數(shù)DBMS都具有交互式創(chuàng)建和管理數(shù)據庫表的工具元暴。

(2)表也可以直接用SQL語句操縱。

輸入:

CREATE TABLE Products{

? ? prod_id? ? ? ? CHAR(10)? ? ? ? NOT NULL,

????vend_id? ? ? ? CHAR(10)? ? ? ? NOT NULL,

? ? prod_name? CHAR(10)? ? ? ? NOT NULL,

? ? prod_price? ?DECIMAL(8,2)? NOT NULL,

? ? prod_desc? ?TEXT(1000)? ? ? NULL

} ;

指定默認值:

輸入:

CREATE TABLE OrderItems{

????prod_id? ? ? ? CHAR(10)? ? ? ? ?NOT NULL,

????order_num? ?INTEGER? ? ? ? ?NOT NULL,

????order_item? ?INTEGER? ? ? ? ?NOT NULL,

? ? quantity? ? ? ? INTEGER? ? ? ? ?NOT NULL? ? ? ? DEFAULT 1,

? ? item_price? ? DECIMAL(8,2)? NOT NULL

} ;

17.2 更新表

輸入:

ALTER? TABLE? Vendors

ADD? vend_phone? CHAR(20);

17.3 刪除表

輸入:

DROP TABLE CustCopy;

18.使用視圖

什么是視圖兄猩,怎么工作茉盏,什么時候使用,利用視圖簡化SQL操作枢冤。

18.1 視圖

視圖是虛擬的表鸠姨,只包含使用時動態(tài)檢索數(shù)據的查詢。

18.1.1 為什么使用視圖

(1)重用SQL語句

(2)簡化復雜的SQL操作

(3)使用表的一部分而不是整個表

(4)保護數(shù)據淹真。

(5)更改數(shù)據格式和表示讶迁。

18.1.2 視圖的規(guī)則和限制

(1)視圖必須唯一命名

(2)創(chuàng)建視圖必須具有足夠的訪問權限

(3)視圖可以嵌套。

(4)許多DBMS禁止在視圖查詢中使用ORDER BY子句核蘸。

(5)有些DBMS要求對返回的所有列進行命名巍糯。

(6)視圖不能索引,也不能有關聯(lián)的觸發(fā)器或默認值客扎。

(7)有些DBMS把視圖作為只讀的查詢祟峦。

18.2 創(chuàng)建視圖

18.2.1 利用視圖簡化復雜的聯(lián)結

輸入:

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';

18.2.2 用視圖重新格式化檢索出的數(shù)據

18.2.3 用視圖過濾不想要的數(shù)據

輸入:

CREATE VIEW CustomerEmailList AS

SELECT cust_id,cust_name,cust_email

FROM Customers

WHERE cust_email IS NOT NULL;


SELECT *

FROM CustomerEmailList;

18.2.4 使用視圖與計算字段

輸入:

CREATE VIEW OrderItemsExpanded AS

SELECT order_num,prod_id,quantity,item_price,quantity*item_price AS expanded_price

FROM OrderItems;


SELECT *

FROM OrderItemsExpanded

WHERE order_num=20008;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徙鱼,隨后出現(xiàn)的幾起案子宅楞,更是在濱河造成了極大的恐慌,老刑警劉巖疆偿,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咱筛,死亡現(xiàn)場離奇詭異,居然都是意外死亡杆故,警方通過查閱死者的電腦和手機迅箩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來处铛,“玉大人饲趋,你說我怎么就攤上這事拐揭。” “怎么了奕塑?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵堂污,是天一觀的道長。 經常有香客問我龄砰,道長盟猖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任换棚,我火速辦了婚禮式镐,結果婚禮上,老公的妹妹穿的比我還像新娘固蚤。我一直安慰自己娘汞,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布夕玩。 她就那樣靜靜地躺著你弦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燎孟。 梳的紋絲不亂的頭發(fā)上禽作,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音缤弦,去河邊找鬼领迈。 笑死,一個胖子當著我的面吹牛碍沐,可吹牛的內容都是我干的狸捅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼累提,長吁一口氣:“原來是場噩夢啊……” “哼尘喝!你這毒婦竟也來了?” 一聲冷哼從身側響起斋陪,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤朽褪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后无虚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缔赠,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年友题,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗤堰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡度宦,死狀恐怖踢匣,靈堂內的尸體忽然破棺而出告匠,到底是詐尸還是另有隱情,我是刑警寧澤离唬,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布后专,位于F島的核電站,受9級特大地震影響输莺,放射性物質發(fā)生泄漏戚哎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一模闲、第九天 我趴在偏房一處隱蔽的房頂上張望建瘫。 院中可真熱鬧崭捍,春花似錦尸折、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粒梦,卻和暖如春亮航,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匀们。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工缴淋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泄朴。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓重抖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祖灰。 傳聞我的和親對象是個殘疾皇子钟沛,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容

  • 1.表中的任何列都可以作為主鍵, 只要它滿足以下條件:任意兩行都不具有相同的主鍵值局扶;每一行都必須具有一個主鍵值( ...
    Cherryjs閱讀 656評論 0 0
  • 注:這一系列的文章是《SQL必知必會》第四版的讀書筆記恨统。 1.了解SQL 1.1 數(shù)據庫基礎 數(shù)據庫:保存有組織的...
    zuyuxia閱讀 577評論 0 0
  • 注:這一系列的文章是《SQL必知必會》第四版的讀書筆記。 7.創(chuàng)建計算字段 什么是計算字段三妈,怎么創(chuàng)建計算字段畜埋,以及...
    zuyuxia閱讀 335評論 0 0
  • 數(shù)據庫入門 數(shù)據庫: 保存有組織的數(shù)據的容器(通常是一個文件或一組文件).數(shù)據庫軟件應該稱為 DBMS(DataB...
    Mjericho閱讀 498評論 0 0
  • 寄語 在初次導入微信SDK時很多小伙伴都會遇到各種問題,在這里我記錄一下我遇到的一些問題 整理一下畴蒲,歡迎補充悠鞍!以方...
    Monster_Lai閱讀 3,240評論 0 0