目次
第1章 懂得SQL
第2章 檢索數(shù)據(jù)
第3章 排序檢索數(shù)據(jù)
第4章 過濾數(shù)據(jù)
第5章 高等數(shù)據(jù)過濾
第6章 用通配符進行過濾
第7章 創(chuàng)建策畫字段
第8章 應(yīng)用數(shù)據(jù)處理懲罰函數(shù)
第9章 匯總數(shù)據(jù)
第10章 分組數(shù)據(jù)
第11章 應(yīng)用子查詢
第12章 聯(lián)絡(luò)表
第13章 創(chuàng)建高等聯(lián)絡(luò)
第14章 組合查詢
第15章 插進數(shù)據(jù)
第16章 更新和刪除數(shù)據(jù)
第17章 創(chuàng)建和操縱表
第18章 應(yīng)用視圖
第19章 應(yīng)用存儲過程
第20章 經(jīng)管實務(wù)處理懲罰
第21章 應(yīng)用游標(biāo)
第22章 懂得高等SQL特點
第2章 檢索數(shù)據(jù)
第3章 排序檢索數(shù)據(jù)
第4章 過濾數(shù)據(jù)
第5章 高等數(shù)據(jù)過濾
第6章 用通配符進行過濾
第7章 創(chuàng)建策畫字段
第8章 應(yīng)用數(shù)據(jù)處理懲罰函數(shù)
第9章 匯總數(shù)據(jù)
第10章 分組數(shù)據(jù)
第11章 應(yīng)用子查詢
第12章 聯(lián)絡(luò)表
第13章 創(chuàng)建高等聯(lián)絡(luò)
第14章 組合查詢
第15章 插進數(shù)據(jù)
第16章 更新和刪除數(shù)據(jù)
第17章 創(chuàng)建和操縱表
第18章 應(yīng)用視圖
第19章 應(yīng)用存儲過程
第20章 經(jīng)管實務(wù)處理懲罰
第21章 應(yīng)用游標(biāo)
第22章 懂得高等SQL特點
第1章 懂得SQL
1. 數(shù)據(jù)庫(database)保存有組織的數(shù)據(jù)的容器(一個/一組文件)。
2. 表(table)某種特定類型的布局化清單。
3. 模式(schema)關(guān)于數(shù)據(jù)庫和表的安排及特點的信息。
4. 列(colomn)表中的一個字段。所有表都由一個或多個列構(gòu)成。在語句中可以使用列編號代替列名(1列開始)
5. 行(row)表中的一個記錄。i=0,1,2,4,。。。
6. 主鍵(primary key)一列(或一組列),其值可以或許獨一標(biāo)識表中每個行。
①隨便率性兩行都不具有雷同的主鍵值;
②每個行都必須具有一個主鍵值(主鍵列不容許NULL值);
③主鍵列中的值不容許批改或更新;
④主鍵值不克不及重用(若是某行從表中刪除,它主鍵不克不及賦賜與后的新行)。
7. SQL(Structured Query Language,布局化查詢語句)是一門專門用來與數(shù)據(jù)庫通信的說話。
第2章 檢索數(shù)據(jù)
1. SELECCT語句用處是從一個或多個表中檢索信息。
2. 關(guān)鍵字(Keyword)作為SQL構(gòu)成項目組的保存字,不克不及用作表或列的名字。
3. 檢索列:SELECT列名 FROM 表名;
4. SQL關(guān)鍵字不分大小寫,建議關(guān)鍵字大寫。停止語句用分號;
第3章 排序檢索數(shù)據(jù)
1. 子句(clause)SQL語句由子句構(gòu)成,凡是由一個關(guān)鍵字加上所供給的數(shù)據(jù)構(gòu)成。
2. 可用ORDER BY子句明白地排序用SELECT語句檢索出的數(shù)據(jù)。應(yīng)包管ORDER BY子句是SELECT語句中最后一條句。
3. 按列名排序:ORDER BY列名,列名;(按多個列排序)之間用豆號隔開
4. 按各地位排序:ORDER BY 2,3;按SELECT中第2、3個列名排序。列序號代替列名
5. 進行降序排序,DESC關(guān)鍵字只應(yīng)用到直接位于其前面的列名。ORDER BY prod_price DESC, prod_name;
第4章 過濾數(shù)據(jù)
1. 只檢索所需數(shù)據(jù)須要制訂搜刮前提(search criteria),也稱過濾前提(filter condition)。
2. 數(shù)據(jù)按照WHERE子句中指定的搜刮前提進行過濾,WHERE子句在表名(FROM子句)之后給出。必須接著表名
3. WHERE子句操縱符:
<>(不便是)
!=(不便是)
=(便是)
<(小于)
<=(小于便是)
!<(不小于)
>(大于)
>=(大于便是)
!>(不大于)
BETWEEN … AND …(指定值間)
IS NULL(為NULL值)
4. 限制前提中呈現(xiàn)字符或字符串,須要單引號括起來,如:""HELLO""
5. 局限檢索例:WHERE prod_price BETWEEN 5 AND 10;
6. NULL無值(no value),差別于0、空字符、空格。
7. 搜檢NULL值列例:WHERE prod_price IS NULL;
第5章 高等數(shù)據(jù)過濾
1. 更強過濾把握,給出多個WHERE子句,這些子句以兩種體式格式應(yīng)用,即以AND子句體式格式或OR子句體式格式應(yīng)用。
2. 為了經(jīng)由過程不止一個列進行過濾,可應(yīng)用AND操縱符給WHERE子句附加前提。WHERE vend_id = ""DLL01"" AND prod_price <= 4;
3. OR用于WHERE子句中,用來默示檢索匹配隨便率性給定前提的行。WHERE vend_id = ""DLL01"" OR vend_id = ""BRS01"";
4. AND操縱符的優(yōu)先級高于OR,為避免前提匹配錯誤或歧義,都應(yīng)當(dāng)應(yīng)用圓括號明白地分組操縱符。
5. IN操縱符用來指定前提局限,局限中的每個前提都可以進行匹配。IN取合法值得有逗號分隔的清單,全都在圓括號中。功能與OR相當(dāng)。WHERE vend_id IN(""DLL01"",""BRS01"")
長處:
①應(yīng)用長的合法選項清單時,IN操縱符的語法更清楚、直不雅。
②在用IN時,策畫次序更輕易經(jīng)管(操縱符更少)。
③IN操縱符一般比OR操縱符清單履行更快。
④IN最大長處是可包含其他SELECT語句,使得更能動態(tài)地建樹WHERE子句。in (select.........)
6. NOT操縱符有且只有一個功能,那就是否定它之后所跟的任何前提。WHERE NOT vend_id = ""DLL01""
第6章 用通配符進行過濾
1. 通配符(wildcard)用來匹配值的一項目組的特別字符。
2. 搜刮模式(Search Pattern):由字面值、通配符或者兩者組合構(gòu)成的搜刮前提。
3. 為在搜刮句子中應(yīng)用通配符,必須應(yīng)用LIKE操縱符,以指導(dǎo)DBMS,后跟的搜刮模式哄騙通配符匹配而不是直接相等匹配進行斗勁。
4. 通配符搜刮只能用于文本字段(串),非文本數(shù)據(jù)類型字段不克不及應(yīng)用通配符搜刮。
5. 百分號通配符(%)可匹配任何字符呈現(xiàn)隨便率性次數(shù)。(在MS Access中符號為*) WHERE prod_name LIKE ""Fish%"";
6. 下劃線通配符(_)只匹配一個字符。(MS Access中符號為?)
7. 方括號通配符([])用來指定一個字符集,必須匹配指定地位(即通配符地位)的一個字符。僅少數(shù)DBMS支撐:MS Access、MS SQL和Sybase Adaptive Server。此通配符可以用前綴字符^(脫字號)來否定。(MS Access用!)
8. 應(yīng)用通配符技能:
①不要過分應(yīng)用通配符。能不消盡量不消。
②除非須要。不然通配符勿用于搜刮模式開端處。(會導(dǎo)致機能降落) 盡量不用:like "%........."
③重視正確放置通配符地位。
第7章 創(chuàng)建策畫字段
1. 字段(field)根蒂根基上與列(column)的意思雷同,?;Q應(yīng)用,不過數(shù)據(jù)庫一般稱為“列”,而術(shù)語“字段”凡是用在策畫字段的連接上。
2. 拼接(concatenate)將值聯(lián)絡(luò)到一路構(gòu)成單個值,可用加號(+)或兩個豎杠(||)默示,這依附于具體的DBMS。
3. TRIM函數(shù)(大多半DBMS支撐),RTRIM()往掉落串右邊空格、LTRIM()往掉落串左邊空格以及TRIM()往掉落串閣下兩邊的空格。
4. 一個不決名的列不克不及用于客戶機應(yīng)用中,因為客戶機沒有辦法引用它。須用列別號(alias)解決,但前臺綁定好象不行!?。?!
5. 列別號(alias)是一個字段或值的調(diào)換名,應(yīng)用AS關(guān)鍵字付與:
SELECT RTRIM(vend_name) || ""("" || RTRIM(vend_country) || "")"" AS vend_title
6. 策畫字段用處:字符串拼接、算術(shù)策畫。
7. 策畫字段履行算術(shù)運算示例:
SELECT prod_id,
quantity,
Item_price,
quantity*item_price AS expanded_price
FROM …
WHERE...
第8章 應(yīng)用數(shù)據(jù)處理懲罰函數(shù)
1. SQL支撐哄騙函數(shù)來處理懲罰數(shù)據(jù),不合的DBMS函數(shù)名與功能有所差別,難以移植。
2. 大多半SQL實現(xiàn)支撐一下類型的函數(shù):
①用于處理懲罰文本串(如刪除、填充值,轉(zhuǎn)換值為大/小寫)的文本函數(shù)。
②用于在數(shù)值數(shù)據(jù)長進行算術(shù)操縱的數(shù)值函數(shù)。
③用于處理懲罰日期和時候值并從這些值中提取特定成分的日期和時候的函數(shù)。
④返回DBMS正應(yīng)用的特別信息(如返回用戶登錄信息)的體系函數(shù)。
第9章 匯總數(shù)據(jù)
1. 湊集函數(shù)(aggregate function)運行在行組上,策畫和返回單個值的函數(shù)。(獲得的是匯總信息而非實際數(shù)據(jù)本身)
①AVG()返回某列均勻值
②COUNT()返回列行數(shù)
③MAX()返回某列最大值
④MIN()返回某列最小值
⑤SUM()返回某列值之和
2. AVG()經(jīng)由過程對對表中行數(shù)計數(shù)并策畫特定列值之和,獲得列均勻值。
3. COUNT()斷定表中行數(shù)的數(shù)量或合適特定前提的行的數(shù)量。
①應(yīng)用COUNT(*)對表中行的數(shù)量進行計數(shù),不管表列中包含的是空值(NULL)還長短空值。
②應(yīng)用COUNT(column)對特定列中具有值的進行計數(shù),忽視NULL。
4. 哄騙標(biāo)準(zhǔn)的算術(shù)操縱符,所有湊集函數(shù)都可用來履行多個列上策畫。
5. 湊集不合值
①對所有的行履行策畫,指定ALL參數(shù)或不給參數(shù)。(ALL為默認(rèn))
②只包含不合的值,指定DISTINCT函數(shù)。
6. SELECT語句可包含多個湊集函數(shù)。(組合聚合函數(shù))
第10章 分組數(shù)據(jù)
1. 分組容許把數(shù)據(jù)分為多個邏輯組,以便能對每個組進行湊集策畫。
2. GROUP BY子句指導(dǎo)DBMS分組數(shù)據(jù)。一些該子句首要規(guī)定:
①~子句可以包含多個標(biāo)列
②若是在G~子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組結(jié)束處進行匯總。
③GROUP BY子句列出的每個列都必須是檢索列或有效的表達式(但不克不及是湊集函數(shù))。如在SELECT頂用表達式,則需在GROUP BY子句指定雷同表達式。不克不及應(yīng)用別號。
④大多半SQL實現(xiàn)不容許G~B~列帶有長度可變數(shù)據(jù)類型(文本或備注)。
⑤除湊集策畫語句外,SELECT語句中每個列都必須在GROUP BY子句中給出。
⑥如分組列中具有NULL值,則NULL將作為一個分組返回。如列中有很多行NULL值,它們將分為一組。
⑦G~B~子句必須在WHERE子句之后,ORDER BY子句之前。
3. HAVING用于過濾分組(可以庖代WHERE過濾行),WHERE用于過濾行(不克不及在GROUP BY后過濾分組)。
4. WHERE在數(shù)據(jù)分組進步行過濾,HAVING在數(shù)據(jù)分組掉隊行過濾。不指定GROUP BY,多半DBMD將兩者一律對待。杰出習(xí)慣:應(yīng)僅在與GROUP BY子句結(jié)應(yīng)時才用HAVING,而WHERE子句用于標(biāo)準(zhǔn)的行級過濾。
5. 應(yīng)用ORDER BY對GROUP BY分組數(shù)據(jù)排序。
6. SELECT子句次序:(括號內(nèi)布爾值默示是否必須應(yīng)用)
SELECT(是)→FROM(僅在從表選擇數(shù)據(jù)時)→WHERE(否)→GROUP BY(僅在按組策畫湊集時)→HAVING(否)→ORDER BY(否)
第11章 應(yīng)用子查詢
1. SQL容許創(chuàng)建子查詢(Subquery),即:嵌套在其他查詢中的查詢。
2. 作為子查詢的SELECT語句只能查詢單個列。
3. 應(yīng)用子查詢的另一個辦法是創(chuàng)建策畫字段。
第12章 聯(lián)絡(luò)表
1. 關(guān)系表的設(shè)計是要包管把信息分化成多個表,一類數(shù)據(jù)一個表。各個表經(jīng)由過程某些常用的值(即關(guān)系設(shè)計中的關(guān)系(relational))彼此接洽關(guān)系。
2. 可伸縮性(Scale)能適應(yīng)絡(luò)續(xù)增長的工作量而不掉敗。設(shè)計杰出的數(shù)據(jù)庫或應(yīng)用法度稱之為可伸縮性好(scale well)。
3. 聯(lián)絡(luò)是一種機制,用來在一條SELECT語句中接洽關(guān)系表,是以稱之為聯(lián)絡(luò)。應(yīng)用特別的語法,可以聯(lián)絡(luò)多個表返回一組輸出,聯(lián)絡(luò)在運行時接洽關(guān)系表中正確的行。
4. 聯(lián)絡(luò)的創(chuàng)建:規(guī)定要聯(lián)絡(luò)的所有表以及它們?nèi)绾谓忧㈥P(guān)系即可。
如:SELECT vend_name, prod_name, prod_price
FROM Vendors, Products (要聯(lián)絡(luò)的表)
WHERE Vendors.vend_id = Product.vend_id;(聯(lián)絡(luò)體式格式)
5. 完全限制名(用一個句點分隔的注解和列名),在引用的列可能呈現(xiàn)二義性時,必須應(yīng)用完全限制名。
6. DBMS不克不及自行聯(lián)絡(luò),需應(yīng)用WHERE子句作過濾前提匹配聯(lián)絡(luò)。
7. 笛卡兒積(cartesian product)由沒有聯(lián)絡(luò)前提的表關(guān)系返回的成果為笛卡兒積。檢索出的行的數(shù)量將是第一個表中的行數(shù)乘以第二個表中的行數(shù)。
8. 等值聯(lián)絡(luò)(equijoin)即內(nèi)部聯(lián)絡(luò),基于兩個表之間的相等測試。
9. 創(chuàng)建聯(lián)絡(luò)的另一種語法:INNER JOIN … ON
SELECT vend_name, pro_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
(ANSI SQL規(guī)范首選INNER JOIN語法)
10. SQL對一條SELECT語句中可以聯(lián)絡(luò)的表的數(shù)量沒有限制。創(chuàng)建聯(lián)絡(luò)的根蒂根基規(guī)矩也雷同。起首列出所有表,然后定義表間關(guān)系。
第13章 創(chuàng)建高等聯(lián)絡(luò)
1. 應(yīng)用表別號:除了用于列名和策畫字段外,SQL還容許給表名起別號。
原因:①縮短SQL語句
②容許在單條SELECT語句中多次應(yīng)用雷同的表。
例:SELECT cust_name, cust_contact
FROME Customer AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.order_num AND …
2. 表別號可用于SELECT列表,WHERE、ORDER BY子句及語句的其他項目組。
3. 表別號只在查詢履行中應(yīng)用。與列別號不一樣,表別號不返回到客戶機。列別號可以嗎?
4. 自聯(lián)絡(luò):應(yīng)用表別號多次引用同一個表。凡是作為外部語句用來調(diào)換雷同表中檢索數(shù)據(jù)的應(yīng)用子查詢語句。
5. 天然聯(lián)絡(luò):打消多次呈現(xiàn),使每個列值返回一次。(反復(fù)列不返回)
6. 外部聯(lián)絡(luò):聯(lián)絡(luò)包含了那些在相干表中沒有接洽關(guān)系行的行。
例1:
SELECT Customers.cust_id, Orders.Order_num
FROM Customer LEFT OUTER JOIN Orders
ON Customers.cust_id = Order.cust_id;
(LEFT或RIGHT關(guān)鍵字指定包含其所有行的表。(OUTER JOIN)
例2:
SELECT Customers.cust_id, Orders.order_num
FROM Customers, Orders
WHERE Customers.cust_id *= Orders.cust_id
(在Oracle頂用“(+)”庖代例子中的*
7. 全部外部聯(lián)絡(luò)關(guān)鍵字: FULL、OUTER、JOIN
8. 可在聯(lián)絡(luò)中應(yīng)用湊集函數(shù)。
9. 關(guān)于聯(lián)絡(luò)應(yīng)用的要點
①重視所應(yīng)用的聯(lián)絡(luò)類型
②各DBMS支撐語法盡不雷同,應(yīng)查看具體文檔
③包管應(yīng)用正確的聯(lián)絡(luò)前提。
④應(yīng)當(dāng)老是供給聯(lián)絡(luò)前提,不然會獲得笛卡兒積。
⑤分別測試每個聯(lián)絡(luò)。
第14章 組合查詢
1. 復(fù)合查詢(compound query)或并(union):履行多個查詢(SELECT語句)并將成果作為單個查詢成果集返回。
應(yīng)用景象:
①在單個查詢中從不合的表類似返回布局?jǐn)?shù)據(jù)。
②對單個表履行多個查詢,按單個查詢返回數(shù)據(jù)。
2. 復(fù)合查詢操縱符UNION,放置于兩條SELECT語句之間即可。
3. UNION應(yīng)用規(guī)矩:
①UNION必須由兩條或兩條以上的SELECT語句構(gòu)成,語句間用UNION分隔。
②UNION中的每個查詢必須包含雷同的列、表達式或湊集函數(shù)。
③列數(shù)據(jù)類型必須兼容:類型不必完全雷同,但必須是DBMS可以隱含地轉(zhuǎn)換的類型。
4. UNION從查詢成果集中主動往除了反復(fù)的行。
應(yīng)用UNION ALL庖代UNION,則返回所有匹配行。
5. 對組合查詢成果排序,用ORDER BY放在最后一條SELECT語句之后,只能用一個ORDER BY。
6. 其他類型的UNION:
①EXCEPT:檢索第一個表中存在,第二個表不存在的行。
②INTERSECT:檢索兩個表中都存在的行。
第15章 插進數(shù)據(jù)
1. INSERT語句,用來插進(或添加)行到數(shù)據(jù)庫表的。
體式格式:
①插進完全的行
②插進行的一項目組
③插進某些查詢的成果(應(yīng)用INSERT需DBMS定安然權(quán)限)
2. 插進完全的行:
◇不安然體式格式:
INSERT INTO Customers
VALUES( ""10000006""
""ToyLand""
""123 Any Street"",
""New York"",
NULL,
NuLL);
◇安然體式格式:
INSERT INTO Customers (
Cust_id,
Cust_name,
Cust_address)
VALUES(
""10000006"",
""Toy Land"",
""123 Any Street"");
3. 插進項目組行,在INSERT中給出要參加列的名字,并供給值(如上安然體式格式)。
省略的列必須滿足一下某個前提:
①該列定義為容許NULL值(無值或空值)。
②在表定義中給出默認(rèn)值。這默示若是不給出值,將應(yīng)用默認(rèn)值。
4. 插進檢索出的數(shù)據(jù),應(yīng)用INSERT...SELECT...語法。
INSERT INTO Customers (
Cust_id,
Cust_contact)
SELECT Cust_id,
Cust_contact
FROM CustNew;
5. 將一個表的內(nèi)容復(fù)制到一個全新的表(在運行中創(chuàng)建的表),可以應(yīng)用SELECT INTO語句。
6. INSERT SELECT與SELECT INTO首要差別:前者導(dǎo)出數(shù)據(jù),而后者導(dǎo)進表。
7. SELECT INTO用法:
◇例子1
SELECT *
INTO CustCopy
FORM Customers;
◇例子2
CREATE TABLE CustCopy AS
SELECT *
FROM Customers;(MySQL與Oracle用法)
8. SELECT INTO應(yīng)用須知:
①任何SELECT選項和子句都可以應(yīng)用,包含WHERE和GROUP BY。
②可以用聯(lián)絡(luò)從多個表插進數(shù)據(jù)。
③不管從幾許個表中檢索數(shù)據(jù),數(shù)據(jù)都只能插進單個表中。
第16章 更新和刪除數(shù)據(jù)
1. 為了更新(批改)表中的數(shù)據(jù),可以應(yīng)用UPDATE語句。
兩種體式格式:
①更新表定行
②更新表中所有行
2. UPDATE語句應(yīng)用:
①要更新的表
②列名和他們的新值
③斷定更新行過濾前提
UPDATE Customers
SET cust_email = ""kim@thetoystore.com"",
cust_contact = ""Sam Roberts"" (也可以用于刪除某個列值,設(shè)為NULL)
WHERE cust_id = ""1000006"";
3. 為了從一個表中刪除(drop)數(shù)據(jù),應(yīng)用DELETE語句。
兩種體式格式:
①從表中刪除特定的行
②從表中刪除所有行
4. DELETE應(yīng)用:(刪除行而非表本身)
DELETE FROM Customers
WHERE cust_id = ""1000006"";
5. 若要刪除表中所有行,應(yīng)用TRUNCATE TABLE更快(不記錄Data變革)
6. DELETE刪除整行而不是刪除列。要刪除指定的列,請應(yīng)用UPDATE語句。
7. 更新和刪除的領(lǐng)導(dǎo)原則:
①除非斷定籌算更新和刪除每一行,不然盡對不要應(yīng)用不帶WHERE子句的UPDATE或DELETE語句
②包管每個表都有主鍵,盡可能像WHERE子句那樣應(yīng)用它(可以指定各主鍵、多個值或值的局限)。
③在對UPDATE或DELETE語句應(yīng)用WHERE子句前,應(yīng)當(dāng)先用SELECT進行測試,包管它過濾的是正確的記錄,以防止編寫的WHERE子句不正確。
④應(yīng)用強迫實驗引用完全性的數(shù)據(jù)庫,如許DBMS將不容許刪除具有與其他表相接洽關(guān)系的數(shù)據(jù)的行。
⑤有的DBMS容許數(shù)據(jù)庫經(jīng)管員施加束縛,以防止不帶WHERE子句的UPDATE或DELETE。
8. SQL沒有撤銷(undo)按鈕,須警惕應(yīng)用UPDATE和DELETE。
第17章 創(chuàng)建和操縱表
1. 兩種創(chuàng)建表的辦法:
①多半DBMS都具有交互式創(chuàng)建和經(jīng)管表的對象
②表也可以直接用SQL語句來把持。
2. 哄騙CREATE TALBE創(chuàng)建表,必須給出下列信息:
①新表的名字,在關(guān)鍵字CREATE TABLE之后給出;
②表列的名字和定義,用逗號分隔;
③有的DBMS還請求指定表的地位。
CREATE TABLE Products
(
prod_id CHAR(10) Not NULL,
prod_desc VARCHAR(1000) NULL,
quantity INTEGER NOT NULL DEFAULT 1
);
3. 每個表的列或者是NULL列,或者是NOT NULL列,這種狀況在創(chuàng)建時由表的定義規(guī)定。
4. NOT NULL會阻攔插進沒有值的列。若是試圖插進沒有值的列,將返回錯誤,且插進掉敗。
5. 主鍵是其獨一標(biāo)識表中每一行的列,其列必為NOT NULL列。
6. SQL容許指定默認(rèn)值,在插進行時若是不給出值,DBMS將主動采取默認(rèn)值。默認(rèn)值在CREATE TABLE語句的列定義頂用關(guān)鍵字DEFAULT指定。
7. 為更新表定義,可應(yīng)用ALTER TABLE語句。各DBMS容許更新內(nèi)容差別大,應(yīng)推敲下面幾點:
①一般來說在表中包含數(shù)據(jù)時不要對其進行更新。應(yīng)在設(shè)計表是做充沛推敲。
②所有DBMS都容許給現(xiàn)有的表增長列,不過對所增長列的數(shù)據(jù)類型(以及NULL和DEFAULT的應(yīng)用)有所限制。
③很多DBMS不容許刪除或更改表中的列。
④很多DBMS對已經(jīng)填稀有據(jù)的列的更改有限制,對未填稀有據(jù)的列幾乎沒有限制。
⑤多半DBMS容許重定名表中的列。
8. 為應(yīng)用ALTER TABLE更改表布局,必須給出下面的信息:
①在ALTER TABLE之后給出要更改的表名
②所做更改的列表
◇例子1
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
◇例子2
ALTER TABLE Vendors
DROP COLUMN vend_phone;
9. 錯雜的表布局一般須要手動刪除過程,涉及步調(diào):
①用新的列布局創(chuàng)建一個新表
②應(yīng)用INSERT SELECT語句從舊表復(fù)制數(shù)據(jù)到新表。若是有須要可應(yīng)用轉(zhuǎn)換函數(shù)和策畫字段。
③查驗包含所需數(shù)據(jù)的新表;
④重定名舊表(若是斷定,可以刪除它);
⑤用舊表本來的名字重定名新表;
⑥按照須要,從頭創(chuàng)建觸發(fā)器、存儲過程、索引和外鍵。
10. 刪除表(刪除全部表而不是其內(nèi)容):應(yīng)用DROP TABLE語句:
DROP TABLE CustCopy;
11. 重定名表,DB2、MySQL、Oracle和PostgreSQL用Rename語句;SQL Server、Sybase用s p_rename語句。
第18章 應(yīng)用視圖
1. 視圖是虛擬的表。與包含數(shù)據(jù)的表不一樣,視圖只包含應(yīng)用時動態(tài)檢索數(shù)據(jù)的查詢。
2. 應(yīng)用視圖的原因:
①重用SQL語句
②簡化錯雜的SQL操縱。在編寫查詢后,可便利地重用它而不必知道它的根蒂根基查詢細節(jié)。
③應(yīng)用表的構(gòu)成項目組而不是全部表。
④保護數(shù)據(jù)??梢越o用戶授予表的特定項目組的接見權(quán)限而不是全部表的接見權(quán)限。
⑤更改數(shù)據(jù)格局和默示。視圖可返回與底層表的默示和格局不合的數(shù)據(jù)。
3. 視圖僅僅是用來查看存儲在別處的一種舉措措施,其本身不包含數(shù)據(jù),是以他們返回的數(shù)據(jù)是從其他表中檢索出來的。
4. 視圖的規(guī)矩和限制:
①與表一樣,視圖必須獨必然名。
②對于可以創(chuàng)建的視圖數(shù)量沒有限制。
③為了創(chuàng)建視圖,必須具有足夠的接見權(quán)限。這些限制凡是由數(shù)據(jù)庫經(jīng)管員授予。
④視圖可以嵌套,即:可以哄騙從其他視圖中檢索數(shù)據(jù)的查詢來機關(guān)一個視圖。
⑤很多DBMS禁止視圖查詢中應(yīng)用ORDER BY子句。
⑥有的DMBS請求定名返回的所有列,若是是策畫字段,則需用別號。
⑦視圖不克不及索引,也不克不及有接洽關(guān)系的觸發(fā)器或默認(rèn)值。
⑧有的DBMS把視圖作為只讀的查詢。
⑨有的DBMS容許創(chuàng)建如許的視圖,它不容許進行導(dǎo)致行不在屬于視圖的插進和更新。
5. 視圖用CREATE VIEW語句創(chuàng)建,用DROP刪除、覆蓋或更新。
6. 視圖最常見應(yīng)用之一是隱躲錯雜的SQL,這凡是涉及聯(lián)絡(luò)。
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;
7. 視圖的另一常見用處是從頭格局化檢索出的數(shù)據(jù)。
CREATE VIEW VendLocation AS
SELECT RTRIM(vend_name) + ""("" + RTRIM(vend_country) + "")"" AS vend_title
FROM Vendors;
8. 用視圖過濾不想要的數(shù)據(jù),用WHERE子句于視圖創(chuàng)建中。
9. 視圖對于簡化策畫字段的應(yīng)用希罕有效。
CREATE VIEW OrderItemsExpanded AS
SELECT order_num, prod_id, quantity, item_price, quantity * item_price AS expanded_price
FROM OrderItems;
第19章 應(yīng)用存儲過程
1. 存儲過程:為今后的應(yīng)用而保存的一條或多條SQL語句的湊集。
2. 應(yīng)用存儲過程的原因:
①經(jīng)由過程把處理懲罰封裝在輕易應(yīng)用的單位中,簡化錯雜的操縱。
②因為不請求反復(fù)建樹一系列處理懲罰步調(diào),而防止錯誤包管了數(shù)據(jù)一致性。
③簡化對變革的經(jīng)管,安然性。
④存儲過程凡是以編譯過的情勢存儲,進步了機能。
△綜上所述,長處:簡單、安然、高機能
△毛病如下:
①不合DBMS中存儲過程語法有所不合。
②存儲過程的編寫比根蒂根基SQL語句錯雜,須要更高的技能、經(jīng)驗。
3. 用exacute履行存儲過程,它接管存儲過程名和須要傳遞給它的任何參數(shù)。
4. 對于不合DBMS,可能有以下存儲過程的履行選擇:
①參數(shù)可選,具有不供給參數(shù)時的默認(rèn)值。
②不按次序給出參數(shù),以“參數(shù)二值”的體式格式給出參數(shù)。
③輸出參數(shù),容許在存儲過程在正履行的應(yīng)用法度中更新所用的參數(shù)。
④用SELECT語句檢索數(shù)據(jù)。
⑤返回代碼,容許存儲過程返回一個值到正在履行的應(yīng)用法度。
5. SQL中進行注釋的標(biāo)準(zhǔn)體式格式是在句首放置-- (連個連字符)。
第20章 經(jīng)管實務(wù)處理懲罰
1. 事務(wù)經(jīng)管(transaction processing)可以用來保護數(shù)據(jù)庫的完全性,它包管成批的SQL操縱要么完全履行,要么完全不履行。
術(shù)語:事務(wù)(transaction)指一組SQL語句;
回退(rollback)指撤銷指定SQL語句的過程;
提交(commit)指將未存儲的SQL語句成果寫進數(shù)據(jù)庫表;
保存點(save point)指事務(wù)處理懲罰中設(shè)置的姑且占位符(placeholder),你可以對它公布回退(重視與回退全部事務(wù)處理懲罰不合)。
2. 事務(wù)處理懲罰可回退INSERT、UPDATE和DELETE,不克不及回退SELECT、CREATE和DROP操縱。
3. 各DBMS有不合辦法標(biāo)識事務(wù)處理懲罰塊。
◇SQL Server:
BEGIN TRANSACTION
…
COMMIT TRANSACTION
◇MySQL
START TAANSACTION
…
◇PostgreSQL
BEGIN;
…
4. SQL的ROLLBACK號令用往返退(撤銷)SQL語句:
DELETE FROM Orders; ROLLBACK;
5. 一般的SQL語句都是直接針對數(shù)據(jù)庫表履行和編寫的。這就是所謂的隱含提交(implicit commit),即提交(寫或保存)操縱是主動進行的。
6. 在事務(wù)處理懲罰塊中,提交不會隱含地進行。但不合DBMS做法不一。
SQL Server:
BEGIN TRANSATION
DELETE OrderItems WHERE order_num = 12345
DELETE Orders WHERE order_num = 12345
COMMIT TRANSACTION
7. 應(yīng)用保存點,支撐回退項目組事務(wù)處理懲罰,必須能在事務(wù)處理懲罰塊中合適的地位放置占位符。如需回退,可退至某占位符。
SAVEPOINT l;
(在SQL Server和Sybase中)
SAVE TRANSACTION l;
...
ROLLBACK TRANSACTION l;
8. 保存點越多越好,如許就能按本身的意愿靈活地進行回退。
第21章 應(yīng)用游標(biāo)
1. 成果集(result set)SQL查詢所檢索出的成果。
2. 游標(biāo)(cursor)是一個存儲在DBMS辦事器上的數(shù)據(jù)查詢,它不是一條SELECT語句,而是被該語句檢索出來的成果集。
3. 不合DBMS支撐不合游標(biāo)選項和特點。常見選項和特點:
①可以或許標(biāo)識表記標(biāo)幟游標(biāo)為只讀,使數(shù)據(jù)能讀取,但不克不及更新和刪除。
②能把握可以履行的定向操縱(向前、向后、第一、最后、盡對地位、相對地位等)。
③能標(biāo)識表記標(biāo)幟某些列為可編輯的,某些列為不成編輯的。
④規(guī)定局限,使游標(biāo)對創(chuàng)建它的特定懇求(如存儲過程)或?qū)λ袘┣罂山右姟?/font>
⑤指導(dǎo)DBMS對檢索出的數(shù)據(jù)(而不是指表中活動數(shù)據(jù))做復(fù)制,使在游標(biāo)打開和接見時代數(shù)據(jù)不變更。
4. 應(yīng)用游標(biāo)涉及步調(diào)
①在可以或許應(yīng)用游標(biāo)前,必須聲明(定義)它。
②一旦聲明后,必須打開游標(biāo)以供應(yīng)用。用前面定義的SELECT語句,把實際數(shù)據(jù)檢索出來。
③對于填稀有據(jù)的游標(biāo),按照須要取出(檢索)各行。
④在停止游標(biāo)應(yīng)用時,必須封閉游標(biāo),可能的話,開釋游標(biāo)。
5. 游標(biāo)用DECLARE語句創(chuàng)建,這條語句在不合DBMS中有所不合。
◇DB2、SQL Server、Sybase中
DECLARE CustCursor CURSOR
FOR
SELECT * FROM Customers
WHERE cust_email IS NULL
◇Oracle、Postgre SQL中
DECLARE CURSOR CustCursor
IS
SELECT * FROM Customers
WHERE cust_email IS NULL
6. 用OPEN CURSOR語句打開游標(biāo)履行查詢,存儲搜檢出的數(shù)據(jù)以供瀏覽和遷移轉(zhuǎn)變。
7. 用FETCH語句接見游標(biāo)數(shù)據(jù)。指出要檢索的行,從何處檢索它們以及將它們放于何處(如變量名)。
8. 游標(biāo)在應(yīng)用完畢時須要封閉,項目組DBMS請求明白開釋游標(biāo)所占資料(CLOSE語句)。
第22章 懂得高等SQL特點
1. 束縛(constraint)經(jīng)管如何插進或處理懲罰數(shù)據(jù)庫數(shù)據(jù)的規(guī)矩。
2. 主鍵是一種特別的束縛,表中的一個(組)列的值獨一標(biāo)識表中的行。
①隨便率性兩行的主鍵值都不雷同
②每行都具有一個主鍵值(即列中不容許NULL值)
③包含主鍵值的列不批改或更新
④主鍵值不可以重用。若是從表中刪除某一行,其主鍵不分派給新行。
創(chuàng)建主鍵:
CREATE TABLE Vendors
(
vend_id CHAR(10) NOT NULL PRIMARY KEY,
vend_name CHAR(50) NOT NULL
);
------------------
ALERT TABLE Vendors
ADD CTRAINT PRIMARY KEY(vend_id);
3. 外鍵是表中的一個列,其值必須在另一表的主鍵中列出。用于接洽關(guān)系其他表,包管引用完全性。
例子:
CREATE TABLE Orders
(
Order_num INTEGER NOT NULL PRIMARY KEY,
Order_date DATETIME NOT NULL,
Cust_id CHAR(10) NOT NULL REFERENCES Customers(cust_id)
);
或
ALTER TABLE Customers
ADD CTRAINT
FOREIGN KEY(cust_id) REFERENCES Customers(cust_id)
4. 獨一束縛用來包管一個列(或一組列)中的數(shù)據(jù)獨一。差別于主鍵:
①表可包含多個獨一束縛,但每個表只容許一個主鍵。
②獨一束縛列可包含NULL值。
③獨一束縛列可批改或更新。
④獨一束縛列的值可反復(fù)應(yīng)用。
⑤與主鍵不合,獨一束縛不克不及用來定義外鍵。
5. 獨一束縛可以用UNIQUE關(guān)鍵字在表定義中定義,也可用零丁的CTRAINT定義。
6. 搜檢束縛用來包管一個列(或一組列)中的數(shù)據(jù)滿足一組指定的前提。
①搜檢最小或最大
②指定局限
③只容許特定的值
△數(shù)據(jù)類型限制了列中可保存的數(shù)據(jù)類型。搜檢束縛在數(shù)據(jù)類型內(nèi)又進一步的限制。
例1:
CREATE TABLE OrderItems
(
Order_num INTEGER NOT NULL,
Quantity INTEGER NOT NULL CHECK(quantity > 0)
);
例2:
ADD CTRAINT CHECK(gender LIKE ""[MF]"")
7. 索引用來排序數(shù)據(jù)以加快搜刮和排序操縱的速度。
①索引改良檢索操縱的機能,但降落數(shù)據(jù)插進、批改和刪除的機能。
②索引數(shù)據(jù)可能要占用多量的存儲空間。
③并非所稀有據(jù)都合適于索引(如獨一性不好的數(shù)據(jù))。
④索引用于數(shù)據(jù)過濾和數(shù)據(jù)排序。
⑤可以在索引中定義多個列。
△索引用CREATE INDEX語句創(chuàng)建(不合DBMS語法差別大)
CREATE INDEX pro_name_ind
ON PRODUCTS(prod_name);
8. 觸發(fā)器是特別的存儲過程,它在特定的數(shù)據(jù)庫活動產(chǎn)生時主動履行??膳c特定表上的INSERT、UPDATE和DELETE操縱相接洽關(guān)系。
◇觸發(fā)器內(nèi)代碼具有以下數(shù)據(jù)接見權(quán):
①INSERT操縱中的所有新數(shù)據(jù);
②UPDATE操縱中的所有新數(shù)據(jù)和舊數(shù)據(jù);
③DELETE操縱中刪除的數(shù)據(jù)。
◇觸發(fā)器一些常見用處:
①對峙數(shù)據(jù)一致。
②基于某個表的變革在其他表上履行活動。
③進行額外的驗證并按照須要回退數(shù)據(jù)。
④策畫策畫列的值或更新時候戳。
例子(SQL Sever版):
CREATE TRIGGER customer_state
ON Customers
FOR INSERT,UPDATE
AS
UPDATE Customers
SET cust_state = Upper(cust_state)
WHERE Customers.cust = ed.cust_id;
◇束縛比觸發(fā)器快,應(yīng)當(dāng)盡量應(yīng)用束縛。
9. 數(shù)據(jù)庫安然性經(jīng)由過程SQL的GRANT和REVOKE語句經(jīng)管。
須要保護的某些操縱:
①對數(shù)據(jù)庫經(jīng)管功能(創(chuàng)建表、更改或刪除已存在的表等)的接見;
②對特定命據(jù)庫或表的接見;
③接見的類型(只讀、對特定列的接見等);
④僅經(jīng)由過程視圖或存儲過程對表進行接見;
⑤創(chuàng)建多層次的安然辦法,從而允很多種基于登錄的接見和把握。
⑥限制經(jīng)管用戶賬戶的才能。