第一篇:學(xué)習(xí)SQL必看
sql學(xué)習(xí)心得:SQL SERVER 2005
sql學(xué)習(xí)心得:SQL SERVER 2005學(xué)習(xí)心得
一、數(shù)據(jù)庫設(shè)計方面
1、字段類型。
varchar(max)nvarchar(max)類型的引入大大的提高了編程的效率,可以使用字符串函數(shù)對CLOB類型進(jìn)行操
作,這是一個亮點。但是這就引發(fā)了對varchar和char效率討論的老問題。到底如何分配varchar的數(shù)據(jù),是否
會出現(xiàn)大規(guī)模的碎片?是否碎片會引發(fā)效率問題?這都是需要進(jìn)一步探討的東西。varbinary(max)代替image也讓SQL Server的字段類型更加簡潔統(tǒng)一。
XML字段類型更好的解決了XML數(shù)據(jù)的操作。XQuery確實不錯,但是個人對其沒好感。(CSDN的開發(fā)者應(yīng)
該是相當(dāng)?shù)氖炝耍。?/p>
2、外鍵的級聯(lián)更能擴(kuò)展
可能大部分的同行在設(shè)計OLTP系統(tǒng)的時候都不愿意建立外鍵,都是通過程序來控制父子數(shù)據(jù)的完整性。但是
再開發(fā)調(diào)試階段和OLAP環(huán)境中,外鍵是可以建立的。新版本中加入了SET NULL 和 SET DEFAULT 屬性,能夠
提供能好的級聯(lián)設(shè)置。
3、索引附加字段
這是一個不錯的新特性。雖然索引的附加字段沒有索引鍵值效率高,但是相對映射到數(shù)據(jù)表中效率還是提高了
很多。我做過試驗,在我的實驗環(huán)境中會比映射到表中提高30%左右的效率。
4、計算字段的持久化
原來的計算字段其實和虛擬字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了計算
字段的持久化,這就提高了查詢的性能,但是會加重insert和update的負(fù)擔(dān)。OLTP慎用。OLAP可以大規(guī)模使
用。
5、分區(qū)表
分區(qū)表是個亮點!從分區(qū)表也能看出微軟要做大作強(qiáng)SQL Server的信心。資料很多,這里不詳細(xì)說。但是重點
了解的是:現(xiàn)在的SQL Server2005的表,都是默認(rèn)為分區(qū)表的。因為它要支持滑動窗口的這個特性。這種特性
對歷史數(shù)據(jù)和實時數(shù)據(jù)的處理是很有幫助的。
但是需要注意的一點,也是我使用過程中發(fā)現(xiàn)的一個問題。在建立
function->schema->table后,如果在現(xiàn)有的分區(qū)表上建立沒有顯式聲明的聚集索引時,分區(qū)表會自動變?yōu)榉欠謪^(qū)表。這一點很讓我納悶。如果你覺得我的非分區(qū)索引無法對起子分區(qū),你可以提醒我一下呀!沒有任何的提醒,直接就變成了非分區(qū)表。不知道這算不算一個bug。
大家也可以試試。
分區(qū)表效率問題肯定是大家關(guān)心的問題。在我的試驗中,如果按照分區(qū)字段進(jìn)行的查詢(過濾)效率會高于未
分區(qū)表的相同語句。但是如果按照非分區(qū)字段進(jìn)行查詢,效率會低于未分區(qū)表的相同語句。但是隨著數(shù)據(jù)量的增大,這種成本差距會逐漸減小,趨于相等。(500萬數(shù)量級只相差10%左右)
6、CLR類型
微軟對CLR作了大篇幅的宣傳,這是因為數(shù)據(jù)庫產(chǎn)品終于融入.net體系中。最開始我們也是狂喜,感覺對象數(shù)
據(jù)庫的一些概念可以實現(xiàn)了。但是作了些試驗,發(fā)現(xiàn)使用CLR的存儲過程或函數(shù)在達(dá)到一定的閥值的時候,系
統(tǒng)性能會呈指數(shù)級下滑!這是非常危險的!只使用幾個可能沒有問題,當(dāng)一旦大規(guī)模使用會造成嚴(yán)重的系統(tǒng)性
能問題!
其實可以做一下類比,Oracle等數(shù)據(jù)庫產(chǎn)品老早就支持了java編程,而且提供了java池參數(shù)作為用戶配置接口
。但是現(xiàn)在有哪些系統(tǒng)大批使用了java存儲過程?!連Oracle自己的應(yīng)用都不用為什么?!還不是性能有問題
!否則面向?qū)ο蟮臄?shù)據(jù)庫早就實現(xiàn)了!
建議使用CLR的地方一般是和應(yīng)用的復(fù)雜程度或操作系統(tǒng)環(huán)境有很高的耦合度的場景。如你想構(gòu)建復(fù)雜的算法,并且用到了大量的指針和高級數(shù)據(jù)模型?;蛘呤且筒僮飨到y(tǒng)進(jìn)行Socket通訊的場景。否則建議慎重!
7、索引視圖
索引視圖2k就有。但是2005對其效率作了一些改進(jìn)但是schema.viewname的作用域真是太限制了它的應(yīng)用面
。還有一大堆的環(huán)境參數(shù)和種種限制都讓人對它有點卻步。
8、語句和事務(wù)快照
語句級快照和事務(wù)級快照終于為SQL Server的并發(fā)性能帶來了突破。個人感覺語句級快照大家應(yīng)該應(yīng)用。事務(wù)
級快照,如果是高并發(fā)系統(tǒng)還要慎用。如果一個用戶總是被提示修改不成功要求重試時,會殺人的!
9、數(shù)據(jù)庫快照
原理很簡單,對要求長時間計算某一時間點的報表生成和防用戶操作錯誤很有幫助。但是比起Oracle10g的閃
回技術(shù)還是細(xì)粒度不夠。可惜!
10、Mirror
Mirror可以算是SQL Server的Data guard了。但是能不能被大伙用起來就不知道了。
二、開發(fā)方面
1、Ranking函數(shù)集
其中最有名的應(yīng)該是row_number了。這個終于解決了用臨時表生成序列號的歷史,而且SQL Server2005的row_number比Oracle的更先進(jìn)。因為它把Order by集成到了一起,不用像Oracle那樣還要用子查詢進(jìn)行封裝
。但是大家注意一點。如下面的例子:
select ROW_NUMBER()OVER(order by aa)
from tbl
order by bb
會先執(zhí)行aa的排序,然后再進(jìn)行bb的排序。
可能有的朋友會抱怨集成的order by,其實如果使用ranking函數(shù),Order by是少不了的。如果擔(dān)心Order
by會影響效率,可以為order by的字段建立聚集索引,查詢計劃會忽略order by 操作(因為本來就是排序的嘛)。
2、top
可以動態(tài)傳入?yún)?shù),省卻了動態(tài)SQL的拼寫。
3、Apply
對遞歸類的樹遍歷很有幫助。
4、CTE
個人感覺這個真是太棒了!閱讀清晰,非常有時代感。
5、try/catch
代替了原來VB式的錯誤判斷。比Oracle高級不少。
6、pivot/unpivot
個人感覺沒有case直觀。而且默認(rèn)的第三字段(還可能更多)作為group by字段很容易造成新手的錯誤。
三、DBA管理方面
1、數(shù)據(jù)庫級觸發(fā)器
記得在最開始使用2k的時候就要用到這個功能,可惜2k沒有,現(xiàn)在有了作解決方案的朋友會很高興吧。
2、多加的系統(tǒng)視圖和實時系統(tǒng)信息
這些東西對DBA挑優(yōu)非常有幫助,但是感覺粒度還是不太細(xì)。
3、優(yōu)化器的改進(jìn)
一直以來個人感覺SQL Server的優(yōu)化器要比Oracle的聰明。SQL2005的更是比2k聰明了不少。(有次作試驗
發(fā)現(xiàn)有的語句在200萬級時還比50萬級的相同語句要快show_text的一些提示沒有找到解釋。一直在奇怪。)
4、profiler的新事件觀察
這一點很好的加強(qiáng)了profiler的功能。但是提到profiler提醒大家注意一點。windows2003要安裝sp1補(bǔ)丁才能
啟動profiler。否則點擊沒有反應(yīng)。
5、sqlcmd
習(xí)慣敲命令行的朋友可能會爽一些。但是功能有限。適合機(jī)器跑不動SQL Server Management Studio的朋友
使用。
四、遺憾
1、登陸的控制
始終遺憾SQL Server的登陸無法分配CPU/內(nèi)存占用等指標(biāo)數(shù)。如果你的SQL Server給別人分配了一個只可以
讀幾個表的權(quán)限,而這個家伙瘋狂的死循環(huán)進(jìn)行連接查詢,會給你的系統(tǒng)帶來很大的負(fù)擔(dān)。而SQL Server如果
能像Oracle一樣可以為登陸分配如:5%的cpu,10%的內(nèi)存。就可以解決這個漏洞。
2、數(shù)據(jù)庫物理框架沒有變動
undo和redo都放在數(shù)據(jù)庫得transaction中,個人感覺是個敗筆。如果說我們在設(shè)計數(shù)據(jù)庫的時候考慮分多個
數(shù)據(jù)庫,可能能在一定程度上避免I/O效率問題。但是同樣會為索引視圖等應(yīng)用帶來麻煩??纯葱屑壓褪聞?wù)級的快照數(shù)據(jù)放在tempdb中,就能感覺到目前架構(gòu)的尷尬。
3、還是沒有邏輯備份
備份方面可能還是一個老大難的問題。不能單獨備份幾個表總是感覺不爽。靈活備份的問題不知道什么時候才
能解決。
4、SSIS(DTS)太復(fù)雜了
SQL Server的異構(gòu)移植功能個人感覺最好了。(如果對比過SQL Server的鏈接服務(wù)器和Oracle的透明網(wǎng)關(guān)的朋友會發(fā)現(xiàn)SQL Server的sp_addlinkedserver(openquery)異構(gòu)數(shù)據(jù)庫系列比Oracle真是強(qiáng)太多了。)
以前的DTS輕盈簡單。但是現(xiàn)在的SSIS雖然功能強(qiáng)大了很多,但是總是讓人感覺太麻煩。
第二篇:sql語句學(xué)習(xí)
一、選擇題
1、SQL語言是()語言?!⊿QL特點)(易)
A)層次數(shù)據(jù)庫 B)網(wǎng)絡(luò)數(shù)據(jù)庫 C)關(guān)系數(shù)據(jù)庫D)非數(shù)據(jù)庫
答案:C2、SQL語言具有兩種使用方式,分別稱為交互式SQL和()。
——(SQL語言使用方式)(易)
A)提示式SQLB)多用戶SQLC)嵌入式SQLD)解釋式SQL
答案:C
3-4-5()包括數(shù)據(jù)庫模式定義和數(shù)據(jù)庫存儲結(jié)構(gòu)與存取方法定義。()實現(xiàn)對DB的操作,包括查詢、插入、刪除、修改數(shù)據(jù)庫中的數(shù)據(jù)。()用于數(shù)據(jù)保護(hù),包括數(shù)據(jù)的安全性,完整性,并發(fā)控制和恢復(fù)等?!〝?shù)據(jù)庫語言DDLDMLDCL)(中)
A)數(shù)據(jù)控制子語言 B)數(shù)據(jù)定義子語言 C)數(shù)據(jù)操縱子語言 D)數(shù)據(jù)庫語言
答案:B C A
6-7-8-9-
10、下列SQL語句中,實現(xiàn)數(shù)據(jù)檢索的語句是(),修改表結(jié)構(gòu)的是(),修改屬性值的是(),刪除表結(jié)構(gòu)的是(),刪除表記錄的是()。
——(DROP TABLE, ALTER TABLE,UPDATE, DELETE,SELECT 語句)(易)
A)SELECTB)DROPC)UPDATED)ALTERE)DELETE
答案:A D C B E
二、用關(guān)系代數(shù)表達(dá)式及SQL語句描述關(guān)系查詢
1、設(shè)有如下關(guān)系表R、S和T:——(易)R(BH,XM,XB,DWH)
S(DWH,DWM)
T(BH,XM,XB,DWH)
寫出實現(xiàn)下列關(guān)系代數(shù)的SQL語句:
1)?DWH?'100'(R)σDWH=’100’(R)
2)?XM,XB(R)∏xM,XB(R)
3)?XM,DWH(?
4)R?S R∞S
5)?XM,XB,DWH(?
解:
1)SELECT * FROM R WHERE DWH=’100’;
2)SELECT XM,XB FROM R;
3)SELECT XM,DWH FROM R WHERE XB=’女’;
4)SELECT R.*,S.DWM FROM R, S WHERE R.DWH=S.DWH;
5)SELECT XM,XB,DWH FROM R,S WHERE R.DWH=S.DWH AND XB=’男’;XB?'男'XB?'女'(R))∏XM,DWH(σXB=’女’(R))(R?S))∏XM,XB,DWH(σXB=’男’(R∞S))
2、設(shè)有如下三個關(guān)系:——(易-易)
A(A#,ANAME,WQTY,CITY): A#:商店代號;ANAME:商店名;WQTY:店員人數(shù)
B(B#,BNAME,PRICE):B#:商品號;BNAME:商品名稱;
AB(A#,B#,QTY):QTY:商品數(shù)量
試用關(guān)系代數(shù)和SQL語言寫出下列查詢。
1)找出店員人數(shù)不超過100人或者在長沙市的所有商店的代號和商店名;
2)找出供應(yīng)書包的商店名;
解:
1)?A#,ANAME(?WQTY??100 ? CITY?'長沙'(A))∏A#,ANAME(σWQTY<=100ⅤCITY=’長沙’(A))
SELECT A#,ANAME FROM A WHERE WQTY<=100 OR CITY=’長沙’;
2)?ANAME((?BNAME?'書包'(B))?AB?A)∏ANAME((σBNAME=’書包’(B))∞AB∞(A))
SELECT ANAME FROM A,B,AB
WHERE BNAME=’書包’ AND B.B#=AB.B# AND AB.A#=A.A#;
3.設(shè)有如下關(guān)系模式:
student(NO, NAME , SEX ,BIRTHDAY, CLASS)
teacher(NO,NAME,SEX,BIRTHDAY,PROF,DEPART)PROF為職稱,DEPART為系別
course(CNO, CNAME, TNO)
score(NO, CNO, DEGREE)DEGREE 為成績
寫出實現(xiàn)以下各題功能的SQL語句:
(1)查詢至少有2名男生的班號;——(難)
(2)查詢不姓“王”的同學(xué)記錄;——(易)
(3)查詢每個學(xué)生的姓名和年齡;——(難)
(4)查詢學(xué)生中最大和最小的birthday日期值;——(中)
(5)查詢學(xué)生表的全部記錄并按班號和年齡從大到小的順序;——(中)
(6)查詢男教師及其所上的課程;——(中)
(7)查詢最高分同學(xué)的學(xué)號,課程號和成績;——(中)
(8)查詢和“李軍”同性別并同班的所有同學(xué)的姓名;——(中)
(9)查詢選修“數(shù)據(jù)庫系統(tǒng)概論”課程的男同學(xué)的成績表;——(中)
(10)查詢所有未講課的教師的姓名和所在系別;——(難)
(11)查詢“計算機(jī)系”教師所教課程的成績表;——(難)
(12)查詢選修“3-105”課程的成績高于“109”號同學(xué)成績的所有同學(xué)的記錄;——(難)
(13)查詢最低分大于70,最高分小于90的學(xué)生的學(xué)號;——(中)
(14)查詢成績在60到80之間的所有記錄;——(中)
(15)查詢成績比該課程平均成績低的同學(xué)的成績表;——(相關(guān)子查詢)(難)
(16)查詢所有女教師和女同學(xué)的姓名、性別和生日;——(中)
(17)查詢“計算機(jī)系”和“無線電系”不同職稱的教師的姓名和職稱;——(中)
解:(1)SELECT CLASS FROM student WHERE SEX=‘男’
GROUP BY CLASS HAVING COUNT(*)>=2;
(2)SELECT * FROM student WHERE NAME NOT LIKE ‘王%’;
(3)SELECT NAME,year(date())-year(birthday)as age FROM student;
(4)SELECT MAX(BIRTHDAY), MIN(BIRTHDAY)FROM student;
(5)SELECT * FROM student ORDER BY CLASS,BIRTHDAY DESC;
(6)SELECT x.name, y.cname FROM teacher x, course y WHERE x.no=y.tno and x.sex=’男’;
(7)SELECT * FROM score WHERE degree=(SELECT max(degree)FROM score);
(8)SELECT name FROM student WHERE sex=(SELECT sex FROM student WHEREname=’
李軍’)and class=(SELECT class FROM student WHERE name=’李軍’);
(9)SELECT * FROM score WHERE no IN(SELECT no FROM student WHERE sex=‘男’)and
cno=(SELECT cno FROM course WHERE cname=‘?dāng)?shù)據(jù)庫系統(tǒng)概論’);
(10)SELECT name, depart FROM teacher t WHERE NOT EXIST(SELECT * FROM course c
WHERE c.tno=t.no);
(11)SELECT * FROM score s, teacher t, course c WHERE t.depart=’計算機(jī)系’ and t.no=c.tno
and c.cno=score.cno;
(12)SELECT * FROM student s, score sc WHERE s.no=sc.no and cno=’3-105’ and
degree>(SELECT degree FROMsc WHERE no=’109’ and cno=’3-105’);
(13)SELECT no FROM score GROUP BY no HAVING min(degree)>70 and max(degree)<90;
(14)SELECT * FROM score WHERE degree BETWEEN 60 AND 80;
(15)SELECT * FROM score a WHERE degree <(SELECT avg(degree)FROM score b WHERE b.cno=a.cno group by b.cno);
(16)SELECT name, sex, birthday FROM teacher WHERE sex=‘女’UNION SELECT name, sex,birthday FROM student WHERE sex=‘女’;
(17)SELECT name, prof FROM teacher WHERE depart=’計算機(jī)系’ OR depart=’無線電系’
order by prof;
4、設(shè)有圖書登記表TS,具有屬性:BNO(圖書編號),BC(圖書類別),BNA(書名),AU(著者),PUB(出版社)。按下列要求用SQL語言進(jìn)行設(shè)計?!ㄒ祝?/p>
1)按圖書館編號BNO建立TS表的索引ITS;
2)查詢按出版社統(tǒng)計其出版圖書總數(shù)。
3)刪除索引。
解:1)CREATE INDEX ITSON TS(BNO);
2)SELECT PUB,COUNT(BNO)FROM TS GROUP BY PUB;
3)DROP INDEXITS;
5、已知三個關(guān)系R、S和T——(中)
R(A,B,C)S(A,D,E)T(D,F)
試用SQL語句實現(xiàn)如下操作:
1)R、S和T三個關(guān)系按關(guān)聯(lián)屬性建立一個視圖R-S-T;
2)對視圖R-S-T按屬性A分組后,求屬性C和E的平均值。
解:1)CREATE VIEW R-S-T(A,B,C,D,E,F)AS
SELECT R.A , B, C ,S.D, E, F FROM R, S, T
WHERE R.A=S.A AND S.D=T.D;
2)SELECT AVG(C), AVG(E)FROM R-S-T GOUPY BY A;
6、設(shè)有學(xué)生表S(SNO, SN)(SNO為學(xué)生號,SN為姓名)和學(xué)生選修課程表SC(SNO,CNO,CN,G)
(CNO為課程號,CN為課程名,G為成績),試用SQL語言完成以下各題:——(易)
a)建立一個視圖V-SSC(SNO, SN, CNO, CN, G);
b)從視圖V-SSC上查詢平均成績在90分以上的SN, CN 和G。
解:
1)CREATE VIEW V-SSC(SNO , SN, CNO, CN, G)AS
SELECT S.SNO, SN, CNO, CN, GFROM S, SC WHERE S.SNO=SC.SNO
2)SELECT SN, CN, G FROM V-SSC GROUP BY SNO HAVING AVG(G)>907、設(shè)有關(guān)系模式: 其中SB表示供應(yīng)商,SN為供應(yīng)商號,SNAME為供應(yīng)商名字,CITY
為供應(yīng)商所在城市; PB(PN, PNAME, COLOR, WEIGHT)其中PB表示零件,PN為零件代號,PANME為零件名
字,COLOR為零件顏色,WEIGHT為零件重量; JB(JN, JNAME, CITY)其中JB表示工程,JN為工程編號,JNAME為工程名字,CITY為工
程所在城市;
SPJB()其中SPJB表示供應(yīng)關(guān)系,QTY表示提供的零件數(shù)量。
寫出實現(xiàn)以下各題功能的SQL語句:
(1)取出所有工程的全部細(xì)節(jié);——(易)
(2)取出所在城市為上海的所有工程的全部細(xì)節(jié);——(易)
(3)取出重量最輕的零件代號;——(難)
(4)取出為工程J1提供零件的供應(yīng)商代號;——(易)
(5)取出為工程J1提供零件P1的供應(yīng)商代號;——(易)
(6)取出由供應(yīng)商S1提供零件的工程名稱;——(易)
(7)取出供應(yīng)商S1提供的零件的顏色;——(易)
(8)取出為工程J1或J2提供零件的供應(yīng)商代號;——(中)
(9)取出為工程J1提供紅色零件的供應(yīng)商代號;——(易)
(10)取出為所在城市為上海的工程提供零件的供應(yīng)商代號;——(易)
(11)取出為所在城市為上海或北京的工程提供紅色零件的供應(yīng)商代號;——(中)
(12)取出供應(yīng)商與工程所在城市相同的供應(yīng)商提供的零件代號;——(中)
(13)取出上海的供應(yīng)商提供給上海的任一工程的零件的代號;——(難)
(14)取出至少有一個和工程不在同一城市的供應(yīng)商提供零件的工程代號;——(難)
(15)取出上海供應(yīng)商不提供任何零件的工程的代號;——(難)
(16)取出這樣一些供應(yīng)商代號,它們能夠提供至少一種由紅色零件的供應(yīng)商提供的零件;
——(難)
(17)取出由供應(yīng)商S1提供零件的工程的代號;——(易)
(18)取出所有這樣的一些 市的工程提供零件;——(難) (19)取出所有這樣的三元組 市的工程提供指定的零件;——(難) (20)重復(fù)(19)題,但不檢索兩個CITY值相同的三元組?!y) 解: (1)SELECT * FROM JB; (2)SELECT * FROM JB WHERE CITY=‘上?!? (3)SELECT PN FROM PB WHERE WEIGHT=(SELECT MIN(WEIGHT)FROM PB); (4)SELECT SN FORM SPJB WHERE JN=‘J1’; (5)SELECT SN FORM SPJB WHERE JN=‘J1’AND PN=‘P1’; (6)SELECT JNAME FROM JB,SPJB WHERE SN=‘S1’AND SPJB.JN=JB.JN; (7)SELECT DISTINCT COLOR FROM PB,SPJB WHERE SN=‘S1’AND SPJB.JN=JB.JN' (8)SELECT SN FROM SPJB WHERE JN IN {J1, J2}; 或者 SELECT SN FROM SPJB WHERE JN=’J1’ OR JN=’J2’; (9)SELECT SN FROM SPJB,PB WHERE COLOR=‘紅色’AND PB.PN=SPJB.PN AND JN=’J1’; (10)SELECT DISTINCT SN FROM SPJB,JB WHERE CITY=‘上海’AND JB.JN=SPJB.JN; (11)SELECT SN FROM PB, JB, SPJB WHERE COLOR=‘紅色’AND CITY IN {‘上?!?,‘北京’} AND PB.PN=SPJB.PN AND JB.JN=SPJB.JN; (12)SELECT PN FROM SB, JB , SPJB WEHRE SB.CITY=JB.CITY AND SB.SN=SPJB.SN AND JB.JN=SPJB.JN; (13)SELECT PN FROM SB, SPJB, JB WEHRE SB.CITY=‘上?!疉ND JB.CITY=‘上?!?/p> AND SB.SN=SPJB.SN AND JB.JN=SPJB.JN; (14)SELECT JN FROM JB WHERE EXISTS(SELECT * FROM SB WHERE EXISTS(SELECT * FROM SPJB WHERE SB.CITY<>JB.CITY AND SPJB.SN= SB.SN AND SPJB.JN= JB.JN)); (15)SELECT DISTINCT JN FROM SPJB WHERE JN NOT IN(SELECT DISTINCT SPJB.JN FROM SB,SPJB WHERE SB.SN=SPJB.SN AND SB.CITY=‘上海’); (16)SELECT DISTINCT SPJB.SN FROM SB,SPJB WHERE SPJB.PN IN(SELECT SPJB.PN FROM SPJB,PB WHEREPB.PN=SPJB.PN AND PB.COLOR=‘紅色’; (17)SELECTJN FROM SPJB WHERE SN=’S1’; (18)SELECT DINSINCT SB.CITY , JB.CITY FROM SB, JB, SPJB WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.SN; (19)SELECT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN; (20)SELECT DISTINCT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY; 8、設(shè)有如下關(guān)系模式:——(中) 圖書關(guān)系B(圖書編號B#,圖書名T,作者A,出版社P); 讀者關(guān)系R(借書證號C#,讀者名N,讀者地址D); 借閱關(guān)系L(C#,B#,借書日期E,還書標(biāo)志BZ); BZ=‘1’表示已還; BZ=‘0’ 表示未還; 寫出實現(xiàn)以下各題功能的SQL語句: (1)查詢“工業(yè)出版社”出版的圖書名 (2)將書號為B5的圖書的出版社改為“工業(yè)出版社” (3)查詢99年12月31日以前借書未還的讀者名與書名 (4)查所借的書包含借書證號為C1的讀者借出未還的所有書的讀者名與借書證號。 (5)刪去“工業(yè)出版社”出版的所有圖書及相關(guān)的借閱信息。 解: (1)SelectTfromBWhereP = ’工業(yè)出版社’ (2)UpdateBSetP=’工業(yè)出版社’ WhereB# = ’B5’ (3)SelectN , TFrom B, R , L WhereE <’99/12/31’ AND BZ=’0’ AND L.C#=R.C# AND L.B#=B.B# (4)select N,C# from R where not exists (select * from LL1 where L1.C#=’c1’ and BZ=‘0’ andnot exists (select * from L L2 where L2.c#=R.c# and L2.B#=L1.B#)) (6)Delete from LWhere B#IN(Select B#From B Where P=’工業(yè)出版社’); Delete from B Where P=’工業(yè)出版社’; sql語句學(xué)習(xí) ? 數(shù)據(jù)定義語言(DDL): 1)創(chuàng)建數(shù)據(jù)庫(create):create database database-name; eg.create database test; 2)刪除數(shù)據(jù)庫:drop database dbname; eg.drop database test; 3)創(chuàng)建新表:create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..); eg.根據(jù)已有的表創(chuàng)建新表的例子:create table tab_new like tab_old;create table tab_new as select col1,col2… from tab_old definition only; 4)刪除表:drop table tabname; 5)增加列:alter table tabname add column col type; 6)添加主鍵: alter table tabname add primary key(col); 7)刪除主鍵:alter table tabname drop primary key(col); 8)創(chuàng)建索引:create [unique] index idxname on tabname(col….); 9)刪除索引:drop index idxname;注:索引是不可更改的,想更改必須刪除重新建; 10)創(chuàng)建視圖:create view viewname as select statement; 2.數(shù)據(jù)操縱語言(DML) 1)查詢語句(select) eg1.select * from table1 where field1 like '%value1%'; eg2.select * from table1 order by field1,field2 [desc]; eg3.select count as totalcount from table1; eg4.select sum(field1)as sumvalue from table1; eg5.select avg(field1)as avgvalue from table1; eg6.select max(field1)as maxvalue from table1; eg7.select min(field1)as minvalue from table1; eg8.select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c;(注:此為左外連接,結(jié)果集中包括連接表的匹配行,也包括左連接表的所有行) 2)插入語句(insert) insert into table1(field1,field2)values(value1,value2); 3)刪除語句(delete) delete from table1 where 范圍; 4)更新語句(update) update table1 set field1=value1 where 范圍; 3.數(shù)據(jù)控制語言(DCL) 1)授予權(quán)限語句(GRANT) GRANT privileges(columns)ON what TO user IDENTIFIED BY “password” WITH GRANT OPTION; 其中:privileges可為如下限定符:ALTER 修改表和索引、CREATE(創(chuàng)建數(shù)據(jù)庫和表)、DELETE(刪除表中已有的記錄)、DROP(刪除數(shù)據(jù)庫和表)、INDEX(創(chuàng)建或刪除索引)、INSERT(向表中插入新行)、REFERENCE(未用)、SELECT(檢索表中的記錄)、UPDATE(修改現(xiàn)存表記錄)、FILE(讀或?qū)懛?wù)器上的文件)、PROCESS(查看服務(wù)器中執(zhí)行的線程信息或殺死線程)、RELOAD(重載授權(quán)表或清空日志、主機(jī)緩存或表緩存)、SHUTDOWN(關(guān)閉服務(wù)器)、ALL 所 有;ALL PRIVILEGES同義詞、USAGE(特殊的“無權(quán)限”權(quán)限) columns:權(quán)限運用的列,它是可選的,并且你只能設(shè)置列特定的權(quán)限。如果命令有多于一個列,應(yīng)該用逗號分開它們; what:權(quán)限運用的級別。權(quán)限可以是全局的(適用于所有數(shù)據(jù)庫和所有表)、特定數(shù)據(jù)庫(適用于一個數(shù)據(jù)庫中的所有表)或特定表的??梢酝ㄟ^指定一個columns字句是權(quán)限是列特定的。 user :權(quán)限授予的用戶,它由一個用戶名和主機(jī)名組成。MySQL中的一個用戶名就?悄懔臃衿魘敝付ǖ撓沒?該名字不必與你的Unix登錄名或Windows名聯(lián)系起來。缺省地,如果你不明確指定一個名字,客戶程序?qū)⑹褂?/p> 你的登錄名作為MySQL用戶名。這只是一個約定。你可以在授權(quán)表中將該名字改為nobody,然后以nobody連接 執(zhí)行需要超級用戶權(quán)限的操作。 password:賦予用戶的口令,它是可選的。如果你對新用戶沒有指定IDENTIFIED BY子句,該用戶不賦給口令(不安全)。對現(xiàn)有用戶,任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當(dāng)你用IDENTIFIED BY 時,口令字符串用改用口令的字面含義,GRANT將為你編碼口令,不要象你用SET PASSWORD 那樣使用password() 函數(shù)。 WITH GRANT OPTION子句是可選的。如果你包含它,用戶可以授予權(quán)限通過GRANT語句授權(quán)給其它用戶。你可以用該子句給與其它用戶授權(quán)的能力。 用戶名、口令、數(shù)據(jù)庫和表名在授權(quán)表記錄中是大小寫敏感的,主機(jī)名和列名不是。 eg1.創(chuàng)建一個超級用戶test1 grant all privilleges on *.* to test1@localhost identified by '123456' with grant option;eg2.創(chuàng)建一個只能查詢的用戶 test2 mysql> grant select on *.* to test2@localhost identified by '9876543'; 2)撤權(quán)并刪除用戶(revoke) 要取消一個用戶的權(quán)限,使用REVOKE語句。REVOKE的語法非常類似于GRANT語句,除了TO用FROM取代并且沒有INDETIFED BY和WITH GRANT OPTION子句: revoke privileges(columns)ON what FROM user user部分必須匹配原來GRANT語句的你想撤權(quán)的用戶的user部分。privileges部分不需匹配,你可以用GRANT 語句授權(quán),然后用REVOKE語句只撤銷部分權(quán)限。REVOKE語句只刪除權(quán)限,而不刪除用戶。即使你撤銷了所有 權(quán)限,在user表中的用戶記錄依然保留,這意味著用戶仍然可以連接服務(wù)器。要完全刪除一個用戶,你必須 用一條DELETE語句明確從user表中刪除用戶記錄: #mysql-u root mysql DELETE FROM user WHERE User=“user_name” and Host=“host_name”; FLUSH PRIVILEGES; DELETE語句刪除用戶記錄,而FLUSH語句告訴服務(wù)器重載授權(quán)表。(當(dāng)你使用GRANT和REVOKE語句時,表自動重載,而你直接修改授權(quán)表時不是。) eg.刪除用戶test1 revoke all on *.* from; use mysql; delete from user where user='test' and host='localhost';flush privileges; 3)提交語句(commit) 4)回滾語句(rollback) SQL語言學(xué)習(xí) --語 句功 能 --數(shù)據(jù)操作 SELECT--從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列 INSERT--向數(shù)據(jù)庫表添加新數(shù)據(jù)行 DELETE--從數(shù)據(jù)庫表中刪除數(shù)據(jù)行 UPDATE--更新數(shù)據(jù)庫表中的數(shù)據(jù) --數(shù)據(jù)定義 CREATE TABLE--創(chuàng)建一個數(shù)據(jù)庫表 DROP TABLE--從數(shù)據(jù)庫中刪除表 ALTER TABLE--修改數(shù)據(jù)庫表結(jié)構(gòu) CREATE VIEW--創(chuàng)建一個視圖 DROP VIEW--從數(shù)據(jù)庫中刪除視圖 CREATE INDEX--為數(shù)據(jù)庫表創(chuàng)建一個索引 DROP INDEX--從數(shù)據(jù)庫中刪除索引 CREATE PROCEDURE--創(chuàng)建一個存儲過程 DROP PROCEDURE--從數(shù)據(jù)庫中刪除存儲過程 CREATE TRIGGER--創(chuàng)建一個觸發(fā)器 DROP TRIGGER--從數(shù)據(jù)庫中刪除觸發(fā)器 CREATE SCHEMA--向數(shù)據(jù)庫添加一個新模式 DROP SCHEMA--從數(shù)據(jù)庫中刪除一個模式 CREATE DOMAIN--創(chuàng)建一個數(shù)據(jù)值域 ALTER DOMAIN--改變域定義 DROP DOMAIN--從數(shù)據(jù)庫中刪除一個域--數(shù)據(jù)控制 GRANT--授予用戶訪問權(quán)限 DENY--拒絕用戶訪問 REVOKE--解除用戶訪問權(quán)限 --事務(wù)控制 COMMIT--結(jié)束當(dāng)前事務(wù) ROLLBACK--中止當(dāng)前事務(wù) SET TRANSACTION--定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征--程序化SQL DECLARE--為查詢設(shè)定游標(biāo) EXPLAN--為查詢描述數(shù)據(jù)訪問計劃 OPEN--檢索查詢結(jié)果打開一個游標(biāo) FETCH--檢索一行查詢結(jié)果 CLOSE--關(guān)閉游標(biāo) PREPARE--為動態(tài)執(zhí)行準(zhǔn)備SQL 語句 EXECUTE--動態(tài)地執(zhí)行SQL 語句 DESCRIBE--描述準(zhǔn)備好的查詢 ---局部變量 declare @id char(10) --set @id = '10010001' select @id = '10010001' ---全局變量 ---必須以@@開頭 --IF ELSE declare @x int @y int @z int select @x = 1 @y = 2 @z=3 if @x > @y print 'x > y'--打印字符串'x > y' else if @y > @z print 'y > z' else print 'z > y' --CASE use pangu update employee set e_wage = case when job_level = ’1’ then e_wage*1.08 when job_level = ’2’ then e_wage*1.07 when job_level = ’3’ then e_wage*1.06 else e_wage*1.05 end --WHILE CONTINUE BREAK declare @x int @y int @c int select @x = 1 @y=1 while @x < 3 begin print @x--打印變量x 的值 while @y < 3 begin select @c = 100*@x + @y print @c--打印變量c 的值 select @y = @y + 1 end select @x = @x + 1 select @y = 1 end --WAITFOR --例 等待1 小時2 分零3 秒后才執(zhí)行SELECT 語句 waitfor delay ’01:02:03’ select * from employee --例 等到晚上11 點零8 分后才執(zhí)行SELECT 語句 waitfor time ’23:08:00’ select * from employee ***SELECT*** select *(列名)from table_name(表名)where column_name operator value ex:(宿主) select * from stock_information where stockid= str(nid) stockname = 'str_name' stockname like '% find this %' stockname like '[a-zA-Z]%'---------([]指定值的范圍) stockname like '[^F-M]%'---------(^排除指定范圍) ---------只能在使用like關(guān)鍵字的where子句中使用通配符) or stockpath = 'stock_path' or stocknumber < 1000 and stockindex = 24 not stocksex = 'man' stocknumber between 20 and 100 stocknumber in(10,20,30) order by stockid desc(asc)---------排序,desc-降序,asc-升序 order by 1,2---------by列號 stockname =(select stockname from stock_informationwhere stockid= 4) ---------子查詢 ---------除非能確保內(nèi)層select只返回一個行的值,---------否則應(yīng)在外層where子句中用一個in限定符 select distinct column_name form table_name---------distinct指定檢索獨有的列值,不重復(fù)select stocknumber ,“stocknumber + 10” = stocknumber + 10 from table_name select stockname , “stocknumber” = count(*)from table_name group by stockname ---------group by 將表按行分組,指定列中有相同的值 having count(*)= 2---------having選定指定的組 select * from table1, table2 where table1.id *= table2.id--------左外部連接,table1中有的而table2中沒有得以null表示table1.id =* table2.id--------右外部連接 select stockname from table1 union [all]-----union合并查詢結(jié)果集,all-保留重復(fù)行 select stockname from table2 ***insert*** insert into table_name(Stock_name,Stock_number)value(“xxx”,“xxxx”) value(select Stockname , Stocknumber from Stock_table2)---value為select語句 ***update*** update table_name set Stockname = “xxx” [where Stockid = 3] Stockname = default Stockname = null Stocknumber = Stockname + 4 ***delete*** delete from table_name where Stockid = 3 truncate table_name-----------刪除表中所有行,仍保持表的完整性 drop table table_name---------------完全刪除表 ***alter table***---修改數(shù)據(jù)庫表結(jié)構(gòu) alter table database.owner.table_name add column_name char(2)null.....sp_help table_name----顯示表已有特征 create table table_name(name char(20), age smallint, lname varchar(30)) insert into table_name select.........-----實現(xiàn)刪除列的方法(創(chuàng)建新表) alter table table_name drop constraint Stockname_default----刪除Stockname的default約束 ***function(/*常用函數(shù)*/)*** ----統(tǒng)計函數(shù)---- AVG--求平均值 COUNT--統(tǒng)計數(shù)目 MAX--求最大值 MIN--求最小值 SUM--求和 --AVG use pangu select avg(e_wage)as dept_avgWage from employee group by dept_id --MAX --求工資最高的員工姓名 use pangu select e_name from employee where e_wage = (select max(e_wage) from employee) --STDEV() --STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差 --STDEVP() --STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差 --VAR() --VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計變異數(shù) --VARP() --VARP()函數(shù)返回總體變異數(shù) ----算術(shù)函數(shù)---- /***三角函數(shù)***/ SIN(float_expression)--返回以弧度表示的角的正弦 COS(float_expression)--返回以弧度表示的角的余弦 TAN(float_expression)--返回以弧度表示的角的正切 COT(float_expression)--返回以弧度表示的角的余切 /***反三角函數(shù)***/ ASIN(float_expression)--返回正弦是FLOAT 值的以弧度表示的角 ACOS(float_expression)--返回余弦是FLOAT 值的以弧度表示的角 ATAN(float_expression)--返回正切是FLOAT 值的以弧度表示的角 ATAN2(float_expression1,float_expression2) --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角 DEGREES(numeric_expression) --把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為 --INTEGER/MONEY/REAL/FLOAT 類型 RADIANS(numeric_expression)--把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為 --INTEGER/MONEY/REAL/FLOAT 類型 EXP(float_expression)--返回表達(dá)式的指數(shù)值 LOG(float_expression)--返回表達(dá)式的自然對數(shù)值 LOG10(float_expression)--返回表達(dá)式的以10 為底的對數(shù)值 SQRT(float_expression)--返回表達(dá)式的平方根 /***取近似值函數(shù)***/ CEILING(numeric_expression)--返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為--INTEGER/MONEY/REAL/FLOAT 類型 FLOOR(numeric_expression)--返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為--INTEGER/MONEY/REAL/FLOAT 類型 ROUND(numeric_expression)--返回以integer_expression 為精度的四舍五入值返回的數(shù)據(jù)--類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型 ABS(numeric_expression)--返回表達(dá)式的絕對值返回的數(shù)據(jù)類型與表達(dá)式相同可為 --INTEGER/MONEY/REAL/FLOAT 類型 SIGN(numeric_expression)--測試參數(shù)的正負(fù)號返回0 零值1 正數(shù)或-1 負(fù)數(shù)返回的數(shù)據(jù)類型--與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型 PI()--返回值為π 即3.14***936 RAND([integer_expression])--用任選的[integer_expression]做種子值得出0-1 間的隨機(jī)浮點數(shù)----字符串函數(shù)---- ASCII()--函數(shù)返回字符表達(dá)式最左端字符的ASCII 碼值 CHAR()--函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符 --如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數(shù)會返回一個NULL 值 LOWER()--函數(shù)把字符串全部轉(zhuǎn)換為小寫 UPPER()--函數(shù)把字符串全部轉(zhuǎn)換為大寫 STR()--函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù) LTRIM()--函數(shù)把字符串頭部的空格去掉 RTRIM()--函數(shù)把字符串尾部的空格去掉 LEFT(),RIGHT(),SUBSTRING()--函數(shù)返回部分字符串 CHARINDEX(),PATINDEX()--函數(shù)返回字符串中某個指定的子串出現(xiàn)的開始位置 SOUNDEX()--函數(shù)返回一個四位字符碼 --SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對數(shù)字和漢字均只返回0 值DIFFERENCE()--函數(shù)返回由SOUNDEX 函數(shù)返回的兩個字符表達(dá)式的值的差異 --0 兩個SOUNDEX 函數(shù)返回值的第一個字符不同 --1 兩個SOUNDEX 函數(shù)返回值的第一個字符相同 --2 兩個SOUNDEX 函數(shù)返回值的第一二個字符相同 --3 兩個SOUNDEX 函數(shù)返回值的第一二三個字符相同 --4 兩個SOUNDEX 函數(shù)返回值完全相同 QUOTENAME()--函數(shù)返回被特定字符括起來的字符串 /*select quotename('abc', '{')quotename('abc') 運行結(jié)果如下 ---{ {abc} [abc]*/ REPLICATE()--函數(shù)返回一個重復(fù)character_expression 指定次數(shù)的字符串 /*select replicate('abc', 3)replicate('abc',-2) 運行結(jié)果如下 ---------------------- abcabcabc NULL*/ REVERSE()--函數(shù)將指定的字符串的字符排列順序顛倒 REPLACE()--函數(shù)返回被替換了指定子串的字符串 /*select replace('abc123g', '123', 'def') 運行結(jié)果如下 ---------------------- abcdefg*/ SPACE()--函數(shù)返回一個有指定長度的空白字符串 STUFF()--函數(shù)用另一子串替換字符串指定位置長度的子串 學(xué)習(xí)總結(jié) 第一講 1.什么是數(shù)據(jù)庫,數(shù)據(jù)庫的作用! 2.現(xiàn)流行的數(shù)據(jù)庫的種類,特點 3.sql2005的版本、特點,硬件要求 4.數(shù)據(jù)庫的安裝(在安裝過程中介紹數(shù)據(jù)庫的插件,登錄方式,實例) 5.系統(tǒng)安裝進(jìn)行中: 6.數(shù)據(jù)庫的幾個基本概念(關(guān)系型數(shù)據(jù)庫) 7.存儲方式(表結(jié)構(gòu))(關(guān)系=一張二維表、網(wǎng)狀、層次簡要說明) 8.二維表結(jié)構(gòu)剖析(主鍵、外鍵等基本概念) 9.上機(jī):(練習(xí)安裝數(shù)據(jù)庫,熟悉數(shù)據(jù)庫的基本環(huán)境) 第二講 1.詳細(xì)觀看上節(jié)課所安裝上的數(shù)據(jù)庫的插件的作用 2.演示企業(yè)管理器的界面 3.數(shù)據(jù)庫的身份認(rèn)證方式詳解 4.系統(tǒng)數(shù)據(jù)庫的介紹 5.數(shù)據(jù)庫文件 6.新建自己的數(shù)據(jù)庫 7.數(shù)據(jù)庫服務(wù)的開啟與停止、數(shù)據(jù)庫文件的移動 8.上機(jī):練習(xí)建立數(shù)據(jù)庫(自己的名字命名的) 第三講 1.復(fù)習(xí)數(shù)據(jù)庫的建立 2.數(shù)據(jù)庫基本用戶的管理 3.現(xiàn)實抽象模型ER圖(簡單運用) 4.運行實體類思想在數(shù)據(jù)庫中建立基本表(字段類型簡單介紹),用企業(yè)管理器和sql兩種方式 5.上機(jī):練習(xí)建表(學(xué)生名單表) 第四講 1.關(guān)系表的建立,方法、思想 2.約束的類型 3.約束的創(chuàng)建和刪除 4.使用默認(rèn)和規(guī)則 5.上機(jī):建立關(guān)聯(lián)表(學(xué)生教師關(guān)聯(lián)表) 項目實訓(xùn)(進(jìn)銷存數(shù)據(jù)庫設(shè)計) 第五講 開始sql的學(xué)習(xí): 1. 打開數(shù)據(jù)庫 2. Select簡單語句 3. 使用*和列明 4. 使用distinct消除重復(fù) 5. 使用top n 【percent】返回n行 6. 修改查詢中的列標(biāo)題 as 7. 在查詢結(jié)果中顯示字符竄 8. 使用where子句 9. 使用條件表達(dá)式 10. 上機(jī):練習(xí)上面多學(xué)的sql語法(檢索學(xué)生教師信息),下節(jié)課同學(xué)在黑板演示 第六講 1.復(fù)習(xí)上節(jié)課的sql語句,學(xué)生演示 2.繼續(xù)學(xué)習(xí)sql語句 3.使用列表達(dá)式 4.order by子句 5.使用in關(guān)鍵字 6.使用like關(guān)鍵字查詢(精確查詢和模糊查詢) 7.使用is null關(guān)鍵字查詢空值行 8.上機(jī):建立選課表,查詢沒有選課學(xué)生,按班顯示 第七講 1.復(fù)習(xí)上節(jié)學(xué)習(xí)sql語句,學(xué)生上臺演示 2.查詢范圍信息 3.使用between關(guān)鍵字 4.使用compute關(guān)鍵字 5.使用group by子句 6.上機(jī):以班分組選出不及格的學(xué)生和不同時間入學(xué)的學(xué)生 第八講 1.復(fù)習(xí)上節(jié)知識 2.使用having子句 3.學(xué)習(xí)嵌套查詢 4.使用union連接查詢 5.多表查詢 6.學(xué)習(xí)別名 第九講 1.復(fù)習(xí)上節(jié)內(nèi)容 2.使用exists關(guān)鍵字 3.小型實訓(xùn)(建立圖書館圖書數(shù)據(jù)表,查詢出符合客戶意愿的圖書) 第十講 索引及其應(yīng)用 1.索引的作用 2.建立索引的原則 3.使用企業(yè)管理器建立索引 4.使用sql建立索引 5.上機(jī):練習(xí)建立索引(學(xué)生表) 第十一講 1.復(fù)習(xí)上節(jié)內(nèi)容 2.索引的相關(guān)操作 3.刪除索引 4.索引的分析與維護(hù) 5.上級:在自己的圖書管理系統(tǒng)上建立合理的索引 視圖的學(xué)習(xí) 1.視圖的概述 2.視圖的優(yōu)缺點 3.視圖的創(chuàng)建、修改、刪除 4.上機(jī):練習(xí)創(chuàng)建視圖 第十三講 1.復(fù)習(xí)上節(jié)sql創(chuàng)建視圖方法 2.重命名視圖及顯示視圖信息 3.通過視圖查詢數(shù)據(jù)、通過視圖更新數(shù)據(jù) 4.上機(jī):給自己的圖書系統(tǒng)常見合適的試圖,使查詢更簡便 第十四講 儲存過程的學(xué)習(xí) 1.什么是儲存過程 2.儲存過程的類型 3.存儲過程的優(yōu)點 4.儲存過程與視圖的比較 5.創(chuàng)建儲存過程 6.上機(jī):創(chuàng)建自己的儲存過程 第十五講 1.復(fù)習(xí)上節(jié)創(chuàng)建儲存過程 2.帶參數(shù)的儲存過程 3.修改儲存過程 4.刪除儲存過程 5.重命名儲存過程 6.重新編譯儲存過程 7.上機(jī):在自己的項目上創(chuàng)建儲存過程 第十六講 觸發(fā)器的學(xué)習(xí) 1.觸發(fā)器的概述(作用,目的) 2.觸發(fā)器的創(chuàng)建 3.管理觸發(fā)器 4.上機(jī):在自己項目上創(chuàng)建合適的觸發(fā)器 第十七講 安全體系: 1.sql2005的安全認(rèn)證模式 2.身份認(rèn)證 3.windows身份認(rèn)證‘ 4.混合身份認(rèn)證 5.權(quán)限認(rèn)證 6.創(chuàng)建賬戶 7.登錄賬戶 8.賬戶的權(quán)限管理 9.上機(jī):創(chuàng)建以自己名字為名的賬戶 1.復(fù)習(xí)上節(jié)課的權(quán)限分配方式 2.sql授權(quán) 3.上機(jī):在自己的項目上創(chuàng)建不同權(quán)限的用戶 第十九講 數(shù)據(jù)復(fù)制 1.復(fù)制模型 2.復(fù)制與出版的關(guān)系 3.復(fù)制類型(快照復(fù)制、事務(wù)復(fù)制、合并復(fù)制) 第二十講 1.復(fù)習(xí)上節(jié)復(fù)制內(nèi)容 2.配置復(fù)制 3.創(chuàng)建發(fā)布 4.訂閱 5.創(chuàng)建強(qiáng)制訂閱 上面的內(nèi)容就是我對sql2005的總體的講課思路和順序的概括,在寫上面的內(nèi)容時,不知不覺的又對sql2005的總體的知識結(jié)構(gòu)有個一個更加清晰的思路。 **在對數(shù)據(jù)庫的基礎(chǔ)知識的備課的過程中,新的理解: 1.數(shù)據(jù)庫多層表的聯(lián)接關(guān)系,聯(lián)接和子查詢。 2.數(shù)據(jù)庫建表思想:樹形表,主從表的建立 3.體會數(shù)據(jù)庫范式結(jié)構(gòu):三范式,理解范式,處理冗余數(shù)據(jù),修改刪除異常。 4.高級查詢語句及函數(shù)的應(yīng)用 5.在查詢中運算和強(qiáng)制轉(zhuǎn)換的功能 6.數(shù)據(jù)庫中并發(fā)運行,共享鎖、排他鎖的理解,防止丟失修改、讀入無效數(shù)據(jù) **下面是詳細(xì)記錄的幾點具體理解 1.建表的時字段類型的選擇對你的運行效率起著至關(guān)重要的作用,varchar(max)nvarchar(max)類型的引入大大的提高了編程的效率,可以使用字符串函數(shù)對CLOB類型進(jìn)行操 作,這是一個亮點。 2、外鍵的級聯(lián)更能擴(kuò)展 可能大部分的同行在設(shè)計OLTP系統(tǒng)的時候都不愿意建立外鍵,都是通過程序來控制父子數(shù)據(jù)的完整性。但是再開發(fā)調(diào)試階段和OLAP環(huán)境中,外鍵是可以建立的。新版本中加入了SET NULL 和 SET DEFAULT 屬性,能夠提供能好的級聯(lián)設(shè)置。 3、索引附加字段 這是一個不錯的新特性。雖然索引的附加字段沒有索引鍵值效率高,但是相對映射到數(shù)據(jù)表中效率還是提高了很多。網(wǎng)上有人實驗,在環(huán)境中會比映射到表中提高30%左右的效率。 4.子查詢和表連接 現(xiàn)在sql語法實現(xiàn)多表查詢,一般可以用兩種方法,即表連接和子查詢。子查詢跟關(guān)聯(lián)效率差不多,但要看你怎么寫了,查詢中盡量避開用in、not in 對asp.net的學(xué)習(xí) 在李老師的帶領(lǐng)下,我們一起學(xué)習(xí)asp.net,最近做的是李老師以前做過的一個仙霞集團(tuán)得網(wǎng)站,當(dāng)時是用asp技術(shù)做的,現(xiàn)在我們把它改成asp.net的,下面說下我的學(xué)習(xí)心得吧! 一:熟悉asp語言和asp.net語言的頭文件(就是自動生成的那個),講文件的擴(kuò)展名換成aspx,看當(dāng)時選的asp.net是否是代碼單獨放置,如果是就構(gòu)造一個對應(yīng)的cs文件,如果選的否就不用構(gòu)造了,直接就ok,如果是靜態(tài)的頁面,這樣就結(jié)束了,如果是動態(tài)頁面,把a(bǔ)sp代碼刪掉,添加上.net代碼就ok了,基本做法就是這樣! 二:過程中遇到的問題: 1:訪問IIS元數(shù)據(jù)庫失敗 解決方法: 1先關(guān)閉你的VS2005。打C:WINDOWSMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files 找到你剛才調(diào)試的程序的名字的目錄刪除它。 3關(guān)閉IIS服務(wù)器,重開一次。 4用IE瀏覽一下你的程序,問題解決。 2.js的導(dǎo)航條定位問題 引用了原來的js導(dǎo)航條,在引用后出現(xiàn)莫名其妙的導(dǎo)航條的彈出層定位不準(zhǔn),出現(xiàn)的位置不在合適的位置了,要改變他的位置,經(jīng)過分析發(fā)現(xiàn)兩處界定他的位置,一個是css代碼中使用POSITION: absolute;絕對定位,在js中設(shè)定初始的像素值(xy)。 三:新的認(rèn)識 1.DataReader只能提供只讀訪問,不能用來改變數(shù)據(jù),它僅能向前遍歷數(shù)據(jù)。 2.在DataTable中尋找行可以使用以下的兩種方式: 1.objRows = objTable.Select(“ColName1 = 'str1'“ And ColName2 = 'str2'“) 2.objRows = objTable.Rows.Find(“主鍵碼“)這種方法要求提供主鍵碼。 3.Command對象和DataAdapter對象之間的區(qū)別: 一:Command對象用于運行命令,DataAdapter對象用于為多個命令提供存儲空間。 二:DataAdapter對象具有SelectCommand,UpdateCommand,InsertCommand,DeleteCommand 四個屬性,這些屬性可以保存Command對象。第三篇:sql語句學(xué)習(xí)_經(jīng)典_推薦
第四篇:sql語言學(xué)習(xí)
第五篇:sql學(xué)習(xí)步驟