版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
目錄TOC\o"1-5"\h\z第一章數(shù)據(jù)庫基本概念 4ー、數(shù)據(jù)庫是什么 4\o"CurrentDocument"什么是數(shù)據(jù) 4什么是數(shù)據(jù)庫 4\o"CurrentDocument"使用數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)的優(yōu)勢 4\o"CurrentDocument"數(shù)據(jù)庫的發(fā)展歷史 4\o"CurrentDocument"主流的數(shù)據(jù)庫 5\o"CurrentDocument"SQLServer的版本 5\o"CurrentDocument"數(shù)據(jù)庫的組成 5\o"CurrentDocument"數(shù)據(jù)庫平臺(tái)和數(shù)據(jù)庫管理系統(tǒng) 6\o"CurrentDocument"二、數(shù)據(jù)庫基本概念 6\o"CurrentDocument"數(shù)據(jù)庫系統(tǒng)(DBS) 6\o"CurrentDocument"實(shí)體(Entity) 6\o"CurrentDocument"屬性(Attribute) 7\o"CurrentDocument"數(shù)據(jù)類型(DataType) 7\o"CurrentDocument"數(shù)據(jù)表(Table) 7\o"CurrentDocument"數(shù)據(jù)庫(DataBase) 7\o"CurrentDocument"數(shù)據(jù)庫文件的分類 7\o"CurrentDocument"三、數(shù)據(jù)庫的分類 8\o"CurrentDocument"系統(tǒng)數(shù)據(jù)庫 8\o"CurrentDocument"示范數(shù)據(jù)庫 8\o"CurrentDocument"用戶數(shù)據(jù)庫 8\o"CurrentDocument"數(shù)據(jù)庫操作 9\o"CurrentDocument"四、數(shù)據(jù)庫中數(shù)據(jù)類型 9\o"CurrentDocument"第二章數(shù)據(jù)庫對象一數(shù)據(jù)表 10\o"CurrentDocument"ー、數(shù)據(jù)完整性 10\o"CurrentDocument"實(shí)體完整性 10\o"CurrentDocument"域完整性 11\o"CurrentDocument"引用完整性 11\o"CurrentDocument"自定義完整性 11\o"CurrentDocument"二、創(chuàng)建表和約束 11\o"CurrentDocument"主鍵約束(PrimarykeyConstraint) 11\o"CurrentDocument"タト鍵約束(ForeignKeyConstraint) 12\o"CurrentDocument"標(biāo)識(shí)列(Identity) 12\o"CurrentDocument"DEFAULT約束 12\o"CurrentDocument"檢查約束(CHECKConstraint) 12\o"CurrentDocument"三、數(shù)據(jù)完整性和約束的關(guān)系 13\o"CurrentDocument"四、刪除表 14\o"CurrentDocument"第三章結(jié)構(gòu)化查詢語言SQL 14\o"CurrentDocument"ー、什么是結(jié)構(gòu)化查詢語句 14\o"CurrentDocument".!創(chuàng)建數(shù)據(jù)庫和刪除數(shù)據(jù)庫 15\o"CurrentDocument"創(chuàng)建及刪除數(shù)據(jù)表 16\o"CurrentDocument"添加和刪除約束 16二、表數(shù)據(jù)操作 18插入數(shù)據(jù) 18\o"CurrentDocument"UPDATE語句 19\o"CurrentDocument"WHERE子句 19\o"CurrentDocument"DELETE語句 20\o"CurrentDocument"TRUNCATE語句 21\o"CurrentDocument"三、數(shù)據(jù)查詢 21\o"CurrentDocument"簡單SELECT語句 21\o"CurrentDocument"TOP關(guān)鍵字 22\o"CurrentDocument"單條件查詢 22多條件查詢 22模糊查詢 22\o"CurrentDocument"查詢NULL 23\o"CurrentDocument"OrderBy排序 23\o"CurrentDocument"查詢語句的執(zhí)行順序: 23二、復(fù)雜數(shù)據(jù)查詢 24聚合函數(shù) 24\o"CurrentDocument"分組查詢(GROUPBY子句) 24\o"CurrentDocument"HAVING子句 24\o"CurrentDocument"對比WHERE、GROUPBY,HAVING 25三、多表數(shù)據(jù)查詢 26什么是連接查詢 26\o"CurrentDocument"聯(lián)接的分類: 26\o"CurrentDocument"內(nèi)聯(lián)接 26\o"CurrentDocument"外聯(lián)接 26\o"CurrentDocument"右外聯(lián)接 27\o"CurrentDocument"3.5完全外聯(lián)接 27\o"CurrentDocument"第四章T_SQL編程 28\o"CurrentDocument"ー、什么是T_SQL? 28\o"CurrentDocument"二、T_SQL和SQL的區(qū)別與聯(lián)系 29\o"CurrentDocument"三、T_SQL編程基礎(chǔ) 29\o"CurrentDocument"注釋 29\o"CurrentDocument"運(yùn)算符 29\o"CurrentDocument"常量和變量 29\o"CurrentDocument"常用命令 30\o"CurrentDocument"BEGIN-END 30\o"CurrentDocument"IF***ELSE:ifelse 31\o"CurrentDocument"CASE:switchcase 31\o"CurrentDocument"WHILE:while 32\o"CurrentDocument"CONTINUE,Break,return語句 32練習(xí)題 32\o"CurrentDocument"第五章存儲(chǔ)過程和函數(shù) 33ー、存儲(chǔ)過程 33什么是存儲(chǔ)過程 33\o"CurrentDocument"存儲(chǔ)過程的優(yōu)點(diǎn)與缺點(diǎn) 33彳jイ諸的^>'^^ 34二、自定義存儲(chǔ)過程 34\o"CurrentDocument"不帶參數(shù)的存儲(chǔ)過程 34\o"CurrentDocument"帶輸出參數(shù)的存儲(chǔ)過程 35\o"CurrentDocument"調(diào)用存儲(chǔ)過程 36\o"CurrentDocument"分頁存儲(chǔ)過程 36三、自定義函數(shù)語法: 42自定義函數(shù)分類 42\o"CurrentDocument"調(diào)用自定義函數(shù)語法 42\o"CurrentDocument"標(biāo)量值函數(shù):返回一個(gè)標(biāo)量值 43\o"CurrentDocument"表格值函數(shù) 44\o"CurrentDocument"第六章視圖和索引 47ー、視圖 47什么是視圖 47\o"CurrentDocument"視圖的優(yōu)點(diǎn) 48\o"CurrentDocument"視圖與表的區(qū)別 48\o"CurrentDocument"創(chuàng)建視圖 48二、索引 49什么是索弓1 49\o"CurrentDocument"創(chuàng)建索引 49\o"CurrentDocument"第七章事務(wù)和觸發(fā)器 50ー、事務(wù) 50什么是事務(wù) 50\o"CurrentDocument"事務(wù)4大屬性: 50\o"CurrentDocument"事務(wù)處理 50二、觸發(fā)器 51什么是觸發(fā)器 51\o"CurrentDocument"觸發(fā)器語法 51\o"CurrentDocument"觸發(fā)器與存儲(chǔ)過程的區(qū)別? 51\o"CurrentDocument"觸發(fā)器的作用 52\o"CurrentDocument"第八章ADO.NET 52\o"CurrentDocument"ー、什么是ADO.NET 52\o"CurrentDocument"三、程序中訪問數(shù)據(jù)庫的工法 52\o"CurrentDocument"四、System.Data.SqlClient 53五、建立連接 53連接字符串 53\o"CurrentDocument"連接對象SqlConnection 53\o"CurrentDocument"命令對象Sqに。mmand 54\o"CurrentDocument"SQL參數(shù)SqIParameter 55\o"CurrentDocument"數(shù)據(jù)讀取SqlDataReader 55\o"CurrentDocument"數(shù)據(jù)適配器SqlDataAdapter 56
六、ADO.NET六、ADO.NET應(yīng)用57第一章數(shù)據(jù)庫基本概念ー、數(shù)據(jù)庫是什么什么是數(shù)據(jù)數(shù)據(jù)是對客觀事物的抽象表示,在計(jì)算機(jī)科學(xué)中所有輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號(hào)都是數(shù)據(jù)。數(shù)據(jù)可以存儲(chǔ)在紙張上、文件中,也可以存儲(chǔ)在數(shù)據(jù)庫中。存儲(chǔ)在紙張上的數(shù)據(jù)不便于查閱和更新操作,存儲(chǔ)在文件(如:Word)中的數(shù)據(jù)無法保證準(zhǔn)確性,比如我們要求在Word文檔中輸入的年齡是數(shù)字21,但是我們寫成“二十一”也是可以的,這樣就產(chǎn)生了數(shù)據(jù)不準(zhǔn)確的問題。在軟件開發(fā)中我們必須保證數(shù)據(jù)是準(zhǔn)確的,這恰恰是數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)具有的優(yōu)點(diǎn)。什么是數(shù)據(jù)庫數(shù)據(jù)庫是存儲(chǔ)在一起的相關(guān)數(shù)據(jù)的集合,是存儲(chǔ)數(shù)據(jù)的“倉庫”。13使用數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)的優(yōu)勢(1)數(shù)據(jù)庫是將數(shù)據(jù)存儲(chǔ)在表中,數(shù)據(jù)與數(shù)據(jù)之間可以建立關(guān)系(2)還可以對數(shù)據(jù)實(shí)施完整性約束,這樣就可以保證數(shù)據(jù)庫中的數(shù)據(jù)是準(zhǔn)確的、可靠的(3)使用數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)還便于數(shù)據(jù)的查詢、檢索、更新及刪除等操作。數(shù)據(jù)庫的發(fā)展歷史數(shù)據(jù)庫的發(fā)展總體來說一共經(jīng)歷了三個(gè)時(shí)代(1)第一代是網(wǎng)狀、層次數(shù)據(jù)庫系統(tǒng)(2)第二代是關(guān)系型數(shù)據(jù)庫系統(tǒng)(3)第三代是以基于對象數(shù)據(jù)模型為主要特征的數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫發(fā)展到今天,主要以關(guān)系型數(shù)據(jù)庫和基于對象型數(shù)據(jù)庫為主。我們將要學(xué)習(xí)的MicrosoftSQLServer2012就是關(guān)系型數(shù)據(jù)庫系統(tǒng)。主流的數(shù)據(jù)庫關(guān)系型數(shù)據(jù)庫主要有MicrosoftSQLServer、Oracle>IBMDB2三大主流數(shù)據(jù)庫平臺(tái)SQLServerSQLServer是Microsoft(微軟)公司開發(fā)和推廣的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它最初是由Microsoft公司、Sybase公司、Ashton-Tate公司聯(lián)合開發(fā)的,并在1988年推出了針對于OS/2系統(tǒng)的版本。后來SQLServer產(chǎn)品在不斷的更新,Sybase公司和Ashton?Tate公司退出了SQLServer的開發(fā)。1998年,Microsoft公司推出了SQLServer7.0版本,2000年,推出了SQLServer2000版本,在2005年底,推出了SQLServer2005版本。SQLServer的版本隨著SQLServer版本不斷的更新,SQLServer在易用性和安全性上持續(xù)增強(qiáng),SQLServer在Windows平臺(tái)上的絕對地位是無法撼動(dòng)的。SQLServer2012根據(jù)不同的環(huán)境,提供了如下幾個(gè)主要版本:SQLServer2012EnterpriseEdition(企業(yè)版),針對于大型企業(yè)SQLServer2012StandardEdition(標(biāo)準(zhǔn)版),針對于中小型企業(yè)SQLServer2012WorkgroupEdition(工作組版),適用于對大小和用戶數(shù)量上沒有限制的數(shù)據(jù)庫的小型企業(yè)。SQLServer2012DeveloperEdition(開發(fā)版),針對于數(shù)據(jù)庫開發(fā)人員SQLServer2012ExpressEditionSQLServerExpress(Express版),是ー個(gè)免費(fèi)、易用且便于管理的數(shù)據(jù)庫。OracleOracle是Oracle(甲骨文)公司運(yùn)營的數(shù)據(jù)庫產(chǎn)品,Oracle在數(shù)據(jù)庫領(lǐng)域始終保持領(lǐng)先。DB2DB2是IBM公司研發(fā)的數(shù)據(jù)庫產(chǎn)品。功能強(qiáng)大DB2支持從PC到UNIX,從中小型機(jī)到大型機(jī),從IBM到非IBM(HP及SUNUNIX系統(tǒng)等)各種操作平臺(tái)。其中服務(wù)平臺(tái)可以是QS/400,AIX、OS/2、HP-UNIX或SUN-Solaris等操作系統(tǒng),客戶機(jī)平臺(tái)可以是OS/2、Window或DOS等操作系統(tǒng)。MySqlMySql是現(xiàn)在流行的中小型關(guān)系型數(shù)據(jù)庫,開發(fā)者是瑞典MySqlAB公司,2008年被SUN收購。它具有小巧,功能齊全,查詢快捷等優(yōu)點(diǎn)。數(shù)據(jù)庫的組成內(nèi)容 說明可視化的集成管理工具提供對數(shù)據(jù)庫的可視化的管理方式。MicrosoftSQLServer2012平臺(tái)有許 多管理工具,其中最重要的當(dāng)屬SQLServerManagementStudio,它提供 一種可視化的數(shù)據(jù)庫操作方式,如創(chuàng)建、刪除
數(shù)據(jù)庫,創(chuàng)建、刪除數(shù)據(jù)表新操作等,添加、維護(hù)各種相關(guān)對象等,對數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行查詢、更同時(shí)它還提供了查詢窗SQL語句,ロ,使得可以直接在該窗口中錄入并執(zhí)行SQL或T-即通過手工編寫SQL或T-SQL,對數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行查詢、更同時(shí)它還提供了查詢窗SQL語句,數(shù)據(jù)庫編程語言T-SQL是SQL作。各類數(shù)據(jù)庫服務(wù)默的エ令正是由這些服務(wù)數(shù)據(jù)庫編程語言包括SQL數(shù)據(jù)庫編程語言T-SQL是SQL作。各類數(shù)據(jù)庫服務(wù)默的エ令正是由這些服務(wù)MicrosoftSQLServer2012平臺(tái)下有很多服務(wù),這些服務(wù)在后臺(tái)默這些服務(wù)來實(shí)現(xiàn)對數(shù)據(jù)庫的操作。前臺(tái)的管理工具、SQL或T-SQL程序代碼所發(fā)出的指翻譯并執(zhí)行的。也就是說,本質(zhì)上正是通過作,所以它們オ是真正的“為人這些服務(wù)來實(shí)現(xiàn)對數(shù)據(jù)庫的操民服務(wù)”,是典型的“地下工作者’數(shù)據(jù)文件 存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù)及事務(wù)日志數(shù)據(jù),這些數(shù)據(jù)在物理及邏輯存儲(chǔ)上均有一定 的關(guān)聯(lián)。數(shù)據(jù)庫平臺(tái)和數(shù)據(jù)庫管理系統(tǒng)MicrosoftSQLServer2012,提供了一系列的管理工具,支持ー種或幾種數(shù)據(jù)庫查詢或編程語言,營造了一種開發(fā)及管理環(huán)境,可稱得上是一個(gè)數(shù)據(jù)庫平臺(tái),也稱之為數(shù)據(jù)庫管理系統(tǒng)(DBMS)o數(shù)據(jù)庫管理系統(tǒng)(DBMS),主要的目標(biāo)在于方便和有效的建立、使用和維護(hù)數(shù)據(jù)庫中的數(shù)據(jù)。它對數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,使用戶能方便的定義和操縱數(shù)據(jù),并保證數(shù)據(jù)的安全性和完整性。用戶通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)庫管理員(DBA)也可通過DBMS進(jìn)行數(shù)據(jù)庫的維護(hù)工作。數(shù)據(jù)庫管理系統(tǒng)(DBMS)一般包括相應(yīng)的管理工具,支持ー種或幾種數(shù)據(jù)庫查詢或編程語言,提供ー系列的管理和操作功能,包含ー組后臺(tái)運(yùn)行的數(shù)據(jù)庫服務(wù),以及相互關(guān)聯(lián)的數(shù)據(jù)集合等。二、數(shù)據(jù)庫基本概念數(shù)據(jù)庫系統(tǒng)(DBS)ー種常用的說法是,數(shù)據(jù)庫系統(tǒng)一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)(DBMS)、使用數(shù)據(jù)庫存取數(shù)據(jù)的第三方應(yīng)用程序(如采用Java和?NET構(gòu)建的應(yīng)用程序)、數(shù)據(jù)庫管理員(DBA)和用戶構(gòu)成。DBMS是數(shù)據(jù)庫系統(tǒng)的基礎(chǔ)和核心。實(shí)體(Entity)實(shí)體是客觀世界中存在的且可互相區(qū)分的事物,例如桌子、人、汽車等。在數(shù)據(jù)庫中,用表的一行來描述ー個(gè)實(shí)體,這一行也叫做記錄(Record)。屬性(Attribute)實(shí)體本身固有的特性叫做屬性,例如桌子的屬性有長、寬、高,人的屬性有姓名、性別、年齡,汽車的屬性有顏色等。在數(shù)據(jù)庫中,用表的一列來描述ー個(gè)屬性,這一列也叫做字段(Field)?數(shù)據(jù)類型(DataType)數(shù)據(jù)按照其本身的特點(diǎn)可以進(jìn)行分類,例如:“中國"、"database”都是字符,1、100都是數(shù)字,2008-8-8、2009-1-1都是日期,我們把數(shù)據(jù)分成了多個(gè)類別,稱每個(gè)類別為ー個(gè)數(shù)據(jù)類型。在數(shù)據(jù)庫中常用的數(shù)據(jù)類型有varchar(表示字符串)、int(表示整數(shù))、datetime(表示日期)等。數(shù)據(jù)表(Table)數(shù)據(jù)表是實(shí)體的集合,可以理解為表是由記錄構(gòu)成的。數(shù)據(jù)庫(DataBase)廣義上的數(shù)據(jù)庫概念是指數(shù)據(jù)的ー種存儲(chǔ)方式,區(qū)別于紙質(zhì)文檔及一般的文件存儲(chǔ)方式。狹義上的數(shù)據(jù)庫概念,要放在ー個(gè)具體的數(shù)據(jù)庫平臺(tái)中去理解。如在SQLServer2012下的SQLServerManagementStudio管理工具中,系統(tǒng)為了維護(hù)這些數(shù)據(jù)表中的數(shù)據(jù)而提供了一套相應(yīng)的機(jī)制或?qū)ο?為了管理這些機(jī)構(gòu)或?qū)ο?同時(shí)也為了管理多個(gè)相關(guān)的數(shù)據(jù)表,系統(tǒng)提供了一個(gè)邏輯上的集合體,稱之為數(shù)據(jù)庫。數(shù)據(jù)庫中真正存儲(chǔ)數(shù)據(jù)的是數(shù)據(jù)表。ー個(gè)數(shù)據(jù)庫中可以包含多個(gè)數(shù)據(jù)表。數(shù)據(jù)庫文件的分類數(shù)據(jù)庫文件數(shù)據(jù)庫文件用于存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)庫對象,是數(shù)據(jù)在磁盤中的物理存在形式。一個(gè)數(shù)據(jù)庫中可以有一個(gè)或多個(gè)數(shù)據(jù)庫文件。當(dāng)有多個(gè)數(shù)據(jù)庫文件時(shí),必須有一個(gè)文件被定義為主數(shù)據(jù)庫文件,主數(shù)據(jù)庫文件的后綴名為.mdf,其它的文件被定義為次要數(shù)據(jù)庫文件,次要數(shù)據(jù)庫文件后綴名為.ndf。一個(gè)數(shù)據(jù)庫只能有一個(gè)主數(shù)據(jù)庫文件,可以有多個(gè)次數(shù)據(jù)庫文件,主數(shù)據(jù)庫文件和次數(shù)據(jù)庫文件可以位于不同的磁盤分區(qū)。ー個(gè)數(shù)據(jù)庫文件只屬于ー個(gè)數(shù)據(jù)庫,不能‘腳踏兩只船”。在創(chuàng)建數(shù)據(jù)庫時(shí)可以指定數(shù)據(jù)庫文件存放的位置,默認(rèn)存放在SQLServer的安裝路徑下。事務(wù)日志文件事務(wù)日志文件用于記錄數(shù)據(jù)操作時(shí)數(shù)據(jù)庫中的數(shù)據(jù)內(nèi)容更改的信息,日志文件后綴名為Jdf。ー個(gè)數(shù)據(jù)庫中可以有一個(gè)或多個(gè)事務(wù)日志文件。在創(chuàng)建數(shù)據(jù)庫時(shí)可以指定數(shù)據(jù)庫文件存放的位置,默認(rèn)存放在SQLServer的安裝路徑下。文件組(FileGroup)FileGroup,即文件的邏輯集合,可以理解為ー個(gè)文件夾。它的目的是為了在邏輯上方便數(shù)據(jù)的管理和分配。文件組可以把指定的文件組合在ー起。每個(gè)文件組均要有一個(gè)組名。三、數(shù)據(jù)庫的分類MicrosoftSQLServer2012的數(shù)據(jù)庫按用途分為三類:系統(tǒng)數(shù)據(jù)庫、示范數(shù)據(jù)庫和用戶數(shù)據(jù)庫。系統(tǒng)數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫是SQLServer2005自帶的數(shù)據(jù)庫,隨SQLServer2012ー起安裝到計(jì)算機(jī)中。共有4個(gè),它們是master,model,msdb,tempdb.master數(shù)據(jù)庫是SQLServer系統(tǒng)最重:要的數(shù)據(jù)庫,它記錄了SQLServer系統(tǒng)的所有系統(tǒng)信息。這些系統(tǒng)信息包括所有的登錄信息、系統(tǒng)設(shè)置信息、SQLServer的初始化信息和其他系統(tǒng)數(shù)據(jù)庫及用戶數(shù)據(jù)庫的相關(guān)信息。因此,如果master數(shù)據(jù)庫不可用,則SQLServer無法啟動(dòng)。如果沒有充分理由,我們最好不要對master做任何改動(dòng)。mode!數(shù)據(jù)庫用于在SQLServer實(shí)例上創(chuàng)建的所有數(shù)據(jù)庫的模板。因?yàn)槊看螁?dòng)SQLServer時(shí)都會(huì)創(chuàng)建tempdb,所以mode!數(shù)據(jù)庫必須始終存在于SQLServer系統(tǒng)中。當(dāng)發(fā)出CREATEDATABASE(創(chuàng)建數(shù)據(jù)庫)語句時(shí),將通過復(fù)制model數(shù)據(jù)庫中的內(nèi)容來創(chuàng)建數(shù)據(jù)庫的第一部分,然后用空頁填充新數(shù)據(jù)庫的剩余部分。msdb數(shù)據(jù)庫是代理服務(wù)數(shù)據(jù)庫,為其報(bào)警、任務(wù)調(diào)度和記錄操作員的操作提供存儲(chǔ)空間。tempdb是ー個(gè)臨時(shí)數(shù)據(jù)庫,它為所有的臨時(shí)表、臨時(shí)存儲(chǔ)過程及其他臨時(shí)操作提供存儲(chǔ)空間。tempdb數(shù)據(jù)庫由整個(gè)系統(tǒng)的所有數(shù)據(jù)庫使用,不管用戶使用哪個(gè)數(shù)據(jù)庫,他們所建立的所有臨時(shí)表和存儲(chǔ)過程都存儲(chǔ)在tempdb上。SQLServer每次啟動(dòng)時(shí),tempdb數(shù)據(jù)庫被重新建立。當(dāng)用戶與SQLServer斷開連接時(shí),其臨時(shí)表和存儲(chǔ)過程自動(dòng)被刪除。示范數(shù)據(jù)庫MicrosoftSQLServer2005平臺(tái)下還有一些示范性的數(shù)據(jù)庫,如pubs、Northwind,AdventureWorks等,這些數(shù)據(jù)庫給出了一些示范性的數(shù)據(jù),系統(tǒng)的幫助文檔中的案例,基本都是基于這些數(shù)據(jù)庫來構(gòu)造的。用戶數(shù)據(jù)庫用戶數(shù)據(jù)庫就是用戶自己創(chuàng)建的數(shù)據(jù)庫,用于存放用戶定義的數(shù)據(jù)。
數(shù)據(jù)庫操作(1)數(shù)據(jù)庫的分離與附加分離數(shù)據(jù)庫在對象資源管理器中右鍵點(diǎn)擊要分離的數(shù)據(jù)庫(如StuDB)つ選擇“任務(wù)”つ選擇“分離”。附加數(shù)據(jù)庫在對象資源管理器中右鍵點(diǎn)擊“數(shù)據(jù)庫”節(jié)點(diǎn)。然后點(diǎn)擊“附加”。然后彈出定位數(shù)據(jù)庫文件對話框,在這個(gè)對話框中找到要附加的數(shù)據(jù)庫文件后點(diǎn)擊“確定”按鈕,附加完成。(2)數(shù)據(jù)庫腳本在對象資源管理器中右鍵點(diǎn)擊要分離的數(shù)據(jù)庫(如StuDB)->選擇“任務(wù)”つ選擇“生成腳本“。四、數(shù)據(jù)庫中數(shù)據(jù)類型數(shù)據(jù)類型 類型描述bit 整型int 整型bit數(shù)據(jù)類型是整型,其值只能是bit 整型int 整型int-21474836482147483647之間的整數(shù)。smallint整型smallint數(shù)據(jù)類型可以存儲(chǔ)從ー3276832767之間的整數(shù)。tinyint 整型decima! 精確數(shù)值型用這種數(shù)右所能存儲(chǔ)的數(shù)字的總tinyint數(shù)據(jù)類型能存儲(chǔ)從tinyint 整型decima! 精確數(shù)值型用這種數(shù)右所能存儲(chǔ)的數(shù)字的總decimal數(shù)據(jù)類型能用來存儲(chǔ)固定精度和范圍的數(shù)值型數(shù)據(jù)。使位數(shù)。money-9220位數(shù)。money-9220億到貨幣型money數(shù)據(jù)類型用來表示錢和貨幣值。這種數(shù)據(jù)類型能存儲(chǔ)從9220億之間的數(shù)據(jù)。float近似數(shù)值型float數(shù)據(jù)類型是ー種近似數(shù)值類型,供浮點(diǎn)數(shù)使用。datetime日期時(shí)間型datetime數(shù)據(jù)類型用來表示日期和時(shí)間。這種數(shù)據(jù)類型存儲(chǔ)從!753年1月1 日到9999年12月31日間所有的日期和時(shí)間數(shù)據(jù)。Smalldatetime日期時(shí)間型smalldatetime數(shù)據(jù)類型用來表示從1900年1月1日到2079年6月6日間的日 期和時(shí)間char 字符型 char數(shù)據(jù)類型用來存儲(chǔ)指定長度的定長非統(tǒng)ー編碼型的數(shù)據(jù)。此數(shù)據(jù)類型 的列寬最大為8000個(gè)字符varchar 字符型 varchar數(shù)據(jù)類型用來存儲(chǔ)非統(tǒng)一編碼型字符數(shù)據(jù)。此數(shù)據(jù)類型為變長。text 字符型 text數(shù)據(jù)類型用來存儲(chǔ)大量的非統(tǒng)ー編碼型字符數(shù)據(jù)。nchar統(tǒng)ー編碼字符型nchar數(shù)據(jù)類型用來存儲(chǔ)定長統(tǒng)ー編碼字符型數(shù)據(jù)。nvarchar統(tǒng)ー編碼字符型nvarchar數(shù)據(jù)類型用作變長的統(tǒng)ー編碼字符型數(shù)據(jù)。此數(shù)據(jù)類型能存儲(chǔ) 4000種字符。image 二進(jìn)制數(shù)據(jù)類型image數(shù)據(jù)類型用來存儲(chǔ)變長的二進(jìn)制數(shù)據(jù),最大可達(dá)231-1或大約20億字節(jié)表:保存數(shù)據(jù)時(shí),先要分析我要保存那些數(shù)據(jù),這些數(shù)據(jù)有什么特點(diǎn),把每ー個(gè)屬性特點(diǎn)作為一列放在ー個(gè)表里主鍵:ー個(gè)表中每一個(gè)數(shù)據(jù)行的唯一標(biāo)識(shí),不會(huì)重復(fù)的列才能當(dāng)主鍵,ー個(gè)表可以沒有主鍵,單數(shù)將處理數(shù)據(jù)時(shí)會(huì)非常困難,所以除非有特殊要求,否則每ー張表都要有主鍵,選中某ー列,設(shè)置為主鍵業(yè)務(wù)主鍵和邏輯主鍵業(yè)務(wù)主鍵:針對業(yè)務(wù)來說的,把手機(jī)號(hào)做為主鍵,這樣你需要人工添加這個(gè)主鍵的值,這樣會(huì)很難添加這個(gè)值,而使它不重復(fù)邏輯主鍵:和業(yè)務(wù)邏輯無關(guān),這個(gè)列存粹的目的就是唯一標(biāo)識(shí),并且不需要你手動(dòng)添加,用戶不關(guān)心這個(gè)主鍵如何產(chǎn)生,系統(tǒng)自動(dòng)處理,這種功能需要用標(biāo)識(shí)列來實(shí)現(xiàn)標(biāo)識(shí)列規(guī)則:每自己新增ー張表,在系統(tǒng)表中會(huì)新增ー張表a來代表你自己新增的這張表,用于數(shù)據(jù)庫軟件來管理你自己創(chuàng)建的這長表,主鍵最后一次新增的值保存在他所對應(yīng)的系統(tǒng)表中第二章數(shù)據(jù)庫對象一數(shù)據(jù)表一、數(shù)據(jù)完整性什么是數(shù)據(jù)完整性數(shù)據(jù)完整性:指表中的數(shù)據(jù)都是準(zhǔn)確的,可靠的數(shù)據(jù)庫中包含數(shù)據(jù)表,數(shù)據(jù)表是二維結(jié)構(gòu)(行和列),行稱為記錄,也叫實(shí)體,列稱為字段,也叫屬性或數(shù)據(jù)項(xiàng)。我們來看看如圖1所示的學(xué)員信息表Infos。在學(xué)生信息表的設(shè)計(jì)中會(huì)要求Gender列的值只能是‘男’或者‘女‘(不允許是其它數(shù)據(jù),如‘先生’或者‘女士‘),Age列的值只能是整數(shù)(不允許是其它數(shù)據(jù),比如字母),學(xué)員的學(xué)號(hào)不能重復(fù)等。如果學(xué)員信息表中的數(shù)據(jù)都能滿足上述要求,也即符合客觀實(shí)際,我們說學(xué)員信息表實(shí)現(xiàn)了數(shù)據(jù)完整性。實(shí)體完整性實(shí)體可以理解為表中的一條記錄,實(shí)體完整性是指實(shí)體的唯一性,即在同一張表中每條記錄都是唯一的,不存在兩條完全相同的記錄,因?yàn)橥耆嗤挠涗浭菦]有必要同時(shí)存在于數(shù)據(jù)庫中。1)能夠唯一標(biāo)識(shí)行的鍵稱之為“候選鍵”。2)被明確用來唯一標(biāo)識(shí)行的候選鍵稱之為“主鍵”。3)主鍵用來保證實(shí)體完整性。域完整性域完整性是指列中的值是否符合指定的要求。1)數(shù)據(jù)類型。2)格式3)值的范圍4)默認(rèn)值5)是否允許空值(NOTNULL)-NULL與‘NULL’是不同的,前者表示沒有數(shù)據(jù),后者表示字符串。引用完整性什么是引用完整性呢?提供值的表(Infos)叫做主表,也可以稱作父表,被引用的列必須是主鍵或唯一鍵,把引用主表的表叫做從表,也可以稱作子表,用于引用的列叫做外鍵,也稱作Scores表的外鍵。那么究竟什么是引用完整性呢?引用完整性是指從表外鍵的值引用主表中主鍵的值。一旦建立了引用關(guān)系,從表外鍵的所有值在主表的主鍵中都必須存在。引用完整性創(chuàng)建了表與表之間的關(guān)系,關(guān)系分為三種ー對ー,主表中的一條記錄對應(yīng)子表中的一條記錄。一對多,主表中的一條記錄對應(yīng)子表中的多條記錄。3)多對多,主表中的多條記錄對應(yīng)子表中的多條記錄。自定義完整性自定義完整性用來制定特定的業(yè)務(wù)規(guī)則,使用規(guī)則、存儲(chǔ)過程、觸發(fā)器來實(shí)現(xiàn)自定義完整性。實(shí)體完整性描述行,域完整性描述列,引用完整性描述關(guān)系。自定義完整性描述邏輯。二、創(chuàng)建表和約束在SQLServerManagementStudio中創(chuàng)建Infos表和Scores表我們知道數(shù)據(jù)完整性是指數(shù)據(jù)的準(zhǔn)確性和可靠性,包括實(shí)體完整性、引用完整性、域完整性、自定義完整性,那么如何實(shí)現(xiàn)數(shù)據(jù)完整性呢?下面要講的約束就是用來實(shí)現(xiàn)數(shù)據(jù)完整性的。約束包括主鍵約束、外鍵約束、檢查約束、默認(rèn)值約束、唯一約束。主鍵約束(PrimarykeyConstraint)表中用來唯一標(biāo)識(shí)表中一行的列稱為主鍵。主鍵列中所有行的值都不能重復(fù),也不能為NULL,主鍵約束實(shí)現(xiàn)了實(shí)體完整性。注意:1)如果兩個(gè)或兩個(gè)以上的列組合為主鍵,稱其為“組合鍵”,組合鍵中的所有列組合在ー起是唯一的。2)設(shè)計(jì)主鍵遵循列最少性原則。3)每張表只有一個(gè)主鍵。4)表中可以沒有主鍵,但不推薦這樣做。外鍵約束(ForeignKeyConstraint)引用完整性約束了表與表之間的關(guān)系(Relationship),外鍵約束是用來實(shí)現(xiàn)引用完整性的。注意:一個(gè)表可以有多個(gè)外鍵。2)主表中應(yīng)該有主鍵3)從表外鍵的數(shù)據(jù)類型必須與主表主鍵的類型相同。4)添加數(shù)據(jù)時(shí)要先添加主表記錄,后填加子表記錄。5)刪除數(shù)據(jù)時(shí)要先刪除子表記錄,后刪除主表記錄。標(biāo)識(shí)列(Identity)每個(gè)表都應(yīng)該有主鍵,有些情況下很難找到不重復(fù)的列作為表的主鍵,此時(shí),可以利用SQLServer提供的“標(biāo)識(shí)列”,也叫“自動(dòng)編號(hào)”列來作為主鍵。這樣,每添加一行數(shù)據(jù)時(shí),標(biāo)識(shí)列都會(huì)自動(dòng)產(chǎn)生一個(gè)新值,因此標(biāo)識(shí)列中任意兩行的值都不會(huì)重復(fù)。標(biāo)識(shí)列中有三個(gè)重要的屬性,分別是“是標(biāo)識(shí)”、“標(biāo)識(shí)種子”、“標(biāo)識(shí)增量”:“是標(biāo)識(shí)”是指是否將該列設(shè)置為標(biāo)識(shí)列。“標(biāo)識(shí)種子”是指第一次添加數(shù)據(jù)時(shí)標(biāo)識(shí)列的初始值。“標(biāo)識(shí)增量”是指標(biāo)識(shí)列中每次增加的值。注意:1)標(biāo)識(shí)列必須是數(shù)字類型。2)標(biāo)識(shí)列的值是自動(dòng)生成的,在輸入數(shù)據(jù)時(shí),它的值會(huì)隨著數(shù)據(jù)行的增加自動(dòng)產(chǎn)生一個(gè)新的數(shù)字,作為該列的值。一個(gè)表中只能有一個(gè)標(biāo)識(shí)列。DEFAULT約束我們可以為表中某列設(shè)置ー個(gè)默認(rèn)值,比如將學(xué)員表的Address列設(shè)置默認(rèn)值為“地址不詳”,當(dāng)添加一名學(xué)生時(shí),如果Address列沒有提供值,這ー列就會(huì)使用默認(rèn)值。生日獲取當(dāng)前時(shí)間為默認(rèn)值getDate()函數(shù)是系統(tǒng)內(nèi)置函數(shù),獲取當(dāng)前時(shí)間檢查約束(CHECKConstraint)檢查約束(CHECK)用來定義可以接受的數(shù)據(jù)值或數(shù)據(jù)格式。例如,筆試成績的值在0-100之間,Email中必須包含字符@等,設(shè)置了檢查約束后,在添加或修改數(shù)據(jù)時(shí),如果數(shù)據(jù)不
符合CHECK約束,就不能實(shí)現(xiàn)添加或修改。HECK約束數(shù)據(jù)格式。Infos表的StulD是主鍵,它的格式是字母s連接ー個(gè)1或2,再連接5位數(shù)字,例如S100101,意義如下:第一個(gè)字母s是學(xué)期semester的縮寫。第二個(gè)數(shù)字如果是1,表示第一學(xué)期,如果是2,表示第二學(xué)期。后5位數(shù)字中的前3位表示班級編號(hào)。后5為數(shù)字中的后2位表示學(xué)生編號(hào)為了約束StulD列的值都符合這個(gè)格式,在StulD列添加CHECK約束來限制格式,如圖18。約束表達(dá)式中LIKE語句表示模糊查詢,即表示“像…的形式”,[0-9]表示在0到9之間的任意ー個(gè)數(shù)字,OR表示或者。這樣StulD的值就必須符合CHECK格式的要求。輸入S100101、s200102是正確的,輸入s300101、slOOlOa是錯(cuò)誤的,錯(cuò)誤的數(shù)據(jù)無法輸入的。LIKE語句中還有兩個(gè)通配符%和一,其中%表示任意零個(gè)或多個(gè)字符,ー表示任意ー個(gè)字符。如:StuNameLIKE'王%’-查找姓王的學(xué)員。StuNameLIKE’王ー'-查找姓王的,名字只有一個(gè)字的學(xué)員。唯一約束(UNIQUEConstraint)主鍵是唯一的,但有時(shí)候我們要求非主鍵列也是唯一的,這時(shí)候就要使用唯一約束(UNIQUE)。一個(gè)表中可以有多個(gè)UNIQUE約束。完整性域約束的關(guān)系:數(shù)據(jù)完整性
實(shí)體完整性引用完整性域完整性三、數(shù)據(jù)完整性和約束的關(guān)系數(shù)據(jù)完整性
實(shí)體完整性引用完整性域完整性主鍵約束唯一鍵約束標(biāo)識(shí)列外鍵約束數(shù)據(jù)類型長度空約束默認(rèn)約束檢查約束自定義完整性 默認(rèn)規(guī)則觸發(fā)器四、刪除表刪除表時(shí),在要?jiǎng)h除的表上右擊,在彈出對話框中選中“刪除(D)”命令,就可以將表刪除。如果刪除的表是關(guān)系表中的主表,刪除就會(huì)失敗,如圖22所示。這時(shí)要先刪除子表,再刪除主表。第三章結(jié)構(gòu)化查詢語言SQLー、什么是結(jié)構(gòu)化查詢語句結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)簡稱SQL,專門用于數(shù)據(jù)存取、數(shù)據(jù)更新及管理數(shù)據(jù)庫等數(shù)據(jù)庫操作。SQL是由美國國家標(biāo)準(zhǔn)局(ANSI)與國際標(biāo)準(zhǔn)化組織(ISO)制定的標(biāo)準(zhǔn),因此SQL語句適用于任何數(shù)據(jù)庫操作。SQL是髙級的非過程化編程語言,允許用戶在更高的層面上工作。它不要求用戶指定數(shù)據(jù)如何存放,也不需要用戶了解數(shù)據(jù)如何存放,所以不同底層結(jié)構(gòu)的數(shù)據(jù)庫系統(tǒng)均可以使用相同的SQL語言作為數(shù)據(jù)輸入與管理的工具。它以數(shù)據(jù)的記錄集合作為操作對象,SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。在多數(shù)情況下,在其它語言中需要一大段程序?qū)崿F(xiàn)的功能,在SQL語句中可能只需要一條SQL語句就可以達(dá)到目的,這也意味著用SQL語言可以寫出功能強(qiáng)大而復(fù)雜的數(shù)據(jù)操作語句。數(shù)據(jù)定義語言(DDL)用于建立數(shù)據(jù)庫、數(shù)據(jù)庫對象、刪除數(shù)據(jù)庫、數(shù)據(jù)庫對象等操作,例如:CREATE>DROP,ALTER等語句。數(shù)據(jù)操作語言(DML)用于數(shù)據(jù)查詢、插入、更新、刪除等操作,例如:SELECT.INSERT.UPDATE,DELETE語句數(shù)據(jù)控制語言(DCL)用戶控制數(shù)據(jù)庫操作的許可、權(quán)限等操作,例如:GRANT、REVOKE.COMMIT等語句在SQLServer2012中使用SQL——“新建查詢窗口”.!創(chuàng)建數(shù)據(jù)庫和刪除數(shù)據(jù)庫⑴語法:創(chuàng)建數(shù)據(jù)庫CREATEDATABASE<數(shù)據(jù)庫名)ON[PRIMARY]① ②(ー創(chuàng)建數(shù)據(jù)文件參數(shù)信息[NAME=邏輯文件名,)③FILENAME=物理文件名,④[SIZE=數(shù)據(jù)庫大小,]⑤[MAXSIZE=最大容量,]?[FILEGROWTH=增長量]⑦)[LOGON]?(ー創(chuàng)建日志文件參數(shù)信息[NAME=邏輯文件名,]FILENAME=物理文件名,[SIZE=數(shù)據(jù)庫大小,][MAXSIZE=最大容量,][FILEGROWTH=增長量]GO-GO是SQL中批處理關(guān)鍵字,往往表示ー組SQL語句的結(jié)束GOUSEStuDB-USE是SQL中更換當(dāng)前數(shù)據(jù)庫關(guān)鍵字注意:1)僅使用CREATEDATABASEStuDB就可以快速創(chuàng)建數(shù)據(jù)庫,所有參數(shù)均使用默認(rèn)值。2)注意多個(gè)參數(shù)中用,”隔開,最后ー個(gè)參數(shù)不需要在添加“,”。語法:刪除數(shù)據(jù)庫DROPDATABASE數(shù)據(jù)庫名USEMasterGOIFEXISTS(SELECT*FROMsysdatabasesWHEREname='StuDB')DROPDATABASEStuDB注意:我們創(chuàng)建的每ー個(gè)數(shù)據(jù)庫,它的名稱都存放在Master庫的sysdatabases表中,因此首先要將當(dāng)前數(shù)據(jù)庫切換到Master庫,才能使用EXISTS語句判斷StuDB是否存在SQL語句對換行沒有要求,但是為了易讀性,應(yīng)該根據(jù)需要加入換行。創(chuàng)建及刪除數(shù)據(jù)表語法;創(chuàng)建數(shù)據(jù)表CREATETABLE數(shù)據(jù)表名(字段名字段類型[NOTNULLINULL][約束描述],字段名字段類型INOTNULLINULL][約束描述],字段名字段類型[NOTNULL|NULL][約束描述],)注意:1)創(chuàng)建表前,注意選擇當(dāng)前數(shù)據(jù)庫,否則有可能將數(shù)據(jù)表建立到其他的數(shù)據(jù)庫中。2)數(shù)據(jù)列的數(shù)據(jù)類型的選擇要合理。語法:刪除數(shù)據(jù)表DROPTABLE數(shù)據(jù)表名USEStuDBGOIFEXISTS(SELECT*FROMsysobjectsWHEREname='Infos')DROPTABLEInfosGO注意:每ー個(gè)數(shù)據(jù)庫中都有一個(gè)名為sysobjects的表,該表中存儲(chǔ)了當(dāng)前數(shù)據(jù)庫中所有表的名稱。添加和刪除約束語法:添加約束ALTERTABLE數(shù)據(jù)表名ADDCONSTRAINT約束名約束語句約束名稱關(guān)鍵字 簡稱主鍵約束PRIMARYKEYPK外鍵約束FOREIGNKEYFK默認(rèn)約束DEFAULTDF檢查約束CHECKCK唯一約束UNIQUEUQ約束名稱定義格式為:約束簡稱+數(shù)據(jù)表名+數(shù)據(jù)列名。例如:CK_lnfos_Gender/**添加約束方式ー:一條SQL語句添加一個(gè)約束?*/ALTERTABLEInfosADDCONSTRAINTPK_lnfos_StulDPRIMARYKEY(StulD)ALTERTABLEInfosADDCONSTRAINTCK_lnfos一GenderCHECKfGender=’男'orGender='女’)ALTERTABLEInfosADDCONSTRAINTDE_lnfos_StuAddressDEEAUE’地址不詳’)EORStuAddress,ALTERTABLEInfosADDCONSTRAINTUQJnfos一StuNameUNIQUE(StuName)/**添加約束方式二:一條SQL語句添加多個(gè)約束?*/ALTERTABLEScoresー添加主鍵約束,設(shè)置Id列為Scores的主鍵ADDCONSTRAINTPK_Scores_ldPRIMARYKEY(ld),--添加外鍵約束,Scores表的StulD列連接Infos表的StuID列CONSTRAINTFK_Scores_StulDFOREIGNKEY(StulD)REFERENCESInfos(StulD),CONSTRAINTDF_Scores_WrittenScoreDEFAULT(O)FORWrittenScore,CONSTRAINTCK_Scores_WrittenScoreCHECK(WrittenScore>=0ANDWrittenScore<=100),CONSTRAINTDF_Scores_LabScoreDEFAUiT(O)FORLabScore,CONSTRAINTCK_Scores_LabScoreCHECK(LabScore>=0ANDLabScore<=100)/**添加約束方式三:創(chuàng)建數(shù)據(jù)表的時(shí)候添加約束?*/CREATETABLEInfosStulDVARCHAR(7)NOTNULLPRIMARYKEY語法:刪除約束ALTERTABLE數(shù)據(jù)表名DROPCONSTRAINT約束名例:IFEXISTS(SELECTnameFROMsysobjectsWHEREname='CK_lnfos_Gender')BEGINALTERTABLEInfosDROPCONSTRAINTCK_lnfos_GenderEND二、表數(shù)據(jù)操作插入數(shù)據(jù)語法:INSERT[INTO]數(shù)據(jù)表名(列名1,列名2,列名3,...…)VALUES(值:L,值2,值3, )插入單行數(shù)據(jù)1INSERTINTOInfos(StulD,StuName,Gender,Age,Seat,EnrollDate,StuAddress,ClassNo)VALUES“100110ン公孫、勝;女丁18,,T,DEFAULT」河北保定,「1001リ注意:VALUES中的值,如果沒有要使用默認(rèn)值,可以用DEFAULT代替。2)VAULES中的值,盡量使用單引,否則容易出現(xiàn)錯(cuò)誤。3)需要保證列名和值ーー對應(yīng),包括數(shù)目、類型、小數(shù)位數(shù)等等。4)插入的數(shù)據(jù)需要注意完整性,以免出現(xiàn)違背約束而導(dǎo)致無法插入數(shù)據(jù)的情況。5)不可以顯示插入標(biāo)識(shí)列,插入時(shí)無需指定標(biāo)識(shí)列。6)注意列名、表名書寫的正確性和規(guī)范性?7)當(dāng)為所有列插入數(shù)據(jù)時(shí)(不包括標(biāo)識(shí)列)可以省略字段列表,省略字段列表時(shí),VALUES中的值要與各列 對應(yīng)。例:INSERTINTOInfosVALUES“100111「秦明,「女,,19,1,DEFAULT/陜西戶縣ソ1001リUPDATE語句語法:UPDATE<表名)SET歹リ名1=值1[,列名2=值2,...][WHERE條件表達(dá)式)注意:1)上面給出的語法格式中,同前面的章節(jié)中的介紹,U表示可選,。表示必選。UPDATE,SET,WHERE均為系統(tǒng)關(guān)鍵字,即系統(tǒng)中已經(jīng)存在、能夠識(shí)別或進(jìn)行相應(yīng)解讀的重要詞匯,在SQL語句書寫規(guī)范中,關(guān)鍵字建議大寫。2)關(guān)鍵字與其它詞匯間應(yīng)有空格,如UPDATE與表名之要有空格。3)同時(shí)修改多列,則在SET后面采用“列名1=值1,列名2=值2,…”的形式修改多列的值,每列值的修改采用“列名=值”的形式,列之間用“,”分隔。4)WHERE子句(整條語句中的子句)設(shè)定了一個(gè)條件表達(dá)式,用來標(biāo)識(shí)對滿足條件的行進(jìn)行修改。5)SQL語句中,如果要更新或插入的數(shù)據(jù)是字符串、時(shí)間等類型的數(shù)據(jù),則在更新或插入時(shí),值要用單引號(hào)引起來。WHERE子句WHERE子句用于告訴系統(tǒng)對滿足條件的行進(jìn)行修改,即對哪一行或哪些行進(jìn)行修改,其格式為:語法:WHEREく條件表達(dá)式〉注意:1)其中“條件表達(dá)式”用于指定操作的條件,上面說的“滿足條件的行”即由該表達(dá)式來指定,條件表達(dá)式由單個(gè)的關(guān)系表達(dá)式或邏輯表達(dá)式組成關(guān)系表達(dá)式:采用關(guān)系運(yùn)算符將兩個(gè)操作數(shù)據(jù)聯(lián)接起來,構(gòu)造成的表達(dá)式即為關(guān)系表達(dá)式常用的關(guān)系運(yùn)算符運(yùn)算符 說明大于= 大于等于小于= 小于等于= 等于〇或!=不等于如:15>12,即為ー個(gè)關(guān)系表達(dá)式,再如Age>18>Address。1西安,、StuName='張三’等,均表達(dá)ー種比較關(guān)系的關(guān)系表達(dá)式,其中Age、StuAddress,StuName是數(shù)據(jù)表中的字段名。關(guān)系表達(dá)式的結(jié)果為真或假,在SQL用TRUE或FALSE來表達(dá),如15>12的結(jié)果為TRUE,而15<12的結(jié)果為FALSE〇那么如果在WHERE子句中,要表達(dá)多個(gè)條件該如何做呢?邏輯表達(dá)式:輯表達(dá)式用于將多個(gè)關(guān)系表達(dá)式組合起來,表達(dá)一種“同時(shí)”或“或者”或“非”的情況,采用邏輯運(yùn)算符將多個(gè)關(guān)系表達(dá)式聯(lián)接起來形成邏輯表達(dá)式常用的邏輯運(yùn)算符運(yùn)算符(優(yōu)先級由高到低) 說明AND與,即“同時(shí)”NOT非OR或,即“或者”NULL空NOTNULL非空UPDATEInfosSETStuAddress=)地址不詳’WHEREStuAddressISNULLUPDATEInfosSETStuAddress=1西安’WHEREStuAddressISNOTNULL注意:AND運(yùn)算符的組合優(yōu)先級髙于NOT,NOT高于。R,NOT一般采用就近原則結(jié)合,所以“NOTAge>18ANDSeat>3ORStuAddress?!靼病笨梢钥醋魇荖OT對“Age>18ANDSeat>3”取非,結(jié)果值再與“StuAddress。'西安'”的結(jié)果值作“或”運(yùn)算。一般為避免計(jì)算優(yōu)先級的問題,可以采用加“()”的方式,來改變優(yōu)先級,同時(shí)表達(dá)也很清楚,避免混亂。如:(NOT(Age>18ANDSeat>3))OR(StuAddress。,西安')同上面的表式式效果是ー樣的。邏輯表達(dá)式,如:StuName='張三'ANDAge>18,表示:姓名為張三,同時(shí)年齡大于18歲;再如:StulD='s200102'ORStulD='s200103’表示學(xué)號(hào)為s200102或s200103:再如:NOTAge=18即為年齡不等于18歲,但是這種形式較很少用,而用Age<>18來表示。like子句在WHERE子句中的應(yīng)用實(shí)現(xiàn)“模糊”查詢操作語法:LIKE,條件%'DELETE語句語法:刪除數(shù)據(jù)DELETE[FROM]〈表名)[WHERE條件表達(dá)式)注意:主表刪除數(shù)據(jù)的問題默認(rèn)情況下,兩張表如果存在主外鍵關(guān)系,系統(tǒng)并不允許我們直接去刪除主表中的數(shù)據(jù)(可以刪除子表中的數(shù)據(jù),所以オ有’’刪除數(shù)據(jù)時(shí)一般應(yīng)先刪除子表中的數(shù)據(jù),后刪除主表中的數(shù)據(jù)”的說法),除非在系統(tǒng)中設(shè)置了“級聯(lián)刪除”。級聯(lián)刪除和級聯(lián)更新清空數(shù)據(jù)庫的所有數(shù)據(jù)語法:DELETEFROMScoresTRUNCATE語句語法:truncatetable表名三、數(shù)據(jù)查詢1.1簡單SELECT語句把數(shù)據(jù)的添加、査詢、修改、刪除簡稱為CRUD(CreateヽRetrieve,Update>Delete)?結(jié)果集:查詢是將表中全部或部分?jǐn)?shù)據(jù)提取出來,可以簡單的理解為逐行讀取,并判斷這行數(shù)據(jù)是否符合要求,把所有符合要求的行組織在ー起,稱其為結(jié)果集。語法:SELECTく列名〉FROMく表名〉[WHEREく條件表達(dá)式〉][ORDERBYく列名〉[ASC或DESC]]注意:1)以逗號(hào)分隔的查詢結(jié)果集中要顯示的列名,如果查詢所有列,用?代替所有列名。2)查詢條件,可選項(xiàng),如果省略則査詢所有的數(shù)據(jù)。2.SELECT語句的應(yīng)用:查詢所有列(*)和查詢部分列(',,分割列名)更改結(jié)果集的列名和表名:AS子句或者省略AS子句(2)等號(hào)改列名,但不能更改表名SELECT學(xué)號(hào)=StulD,姓名=StuName,性別=GenderFROMInfos學(xué)員信息表(3)AS還可以為組合列名起名稱。SELECTStulDAS學(xué)號(hào),WrittenScoreAS筆試成績,LabScoreAS機(jī)試成績,WrittenScore+LabScoreAS總成績FROMScoresAS學(xué)員信息表注意:AS子句更改的是結(jié)果集中的列名,對原始表中的列沒有影響。TOP關(guān)鍵字(1)查詢前N條記錄SELECTTOP5*FROMScores(2)按照百分比查詢記錄SELECTTOP5PERCENT*FROMScores注意:按照百分百查詢數(shù)據(jù)時(shí),當(dāng)遇到不足一條記錄時(shí),按照一條來查詢。例如表中有60條記錄,查詢7%的數(shù)據(jù),則會(huì)查詢出5條。單條件查詢關(guān)鍵字WHERE用于為查詢提供條件,寫在FROM關(guān)鍵字的后面。多條件查詢模糊查詢模糊查詢使用like語句實(shí)現(xiàn),我們還記得like語句中有兩個(gè)通配符,%表示任意零個(gè)或多個(gè)字符,ー表示任意ー個(gè)字符。SELECT*FROMinfosWHEREStuNameLIKE'孫%'SELECT*FROMinfosWHEREStuNameLIKE'ー進(jìn)’查詢通配符‘%’或者]'本身如果要查詢通配符,要使用ESCAPE關(guān)鍵字定義轉(zhuǎn)義符,當(dāng)轉(zhuǎn)義符置于通配符之前時(shí),該通配符就解釋為普通字符。(1)要搜索在任意位置包含字符串5%的字符串,應(yīng)使用:WHERE歹リ名LIKE'%5/%%'ESCAPE'/'(2)要搜索ー個(gè)字符串Ig_',應(yīng)使用WHERE列名LIKE'gs_'ESCAPE's'(3)ESCAPE后的參數(shù)只能包含一個(gè)字符。1.6查詢NULLNULL表示不存在數(shù)據(jù),查詢NULL值時(shí)使用ISNULL或者ISNOTNULLoSELECT*FROMscoresWHERETermISNULLSELECT*FROMscoresWHERETermisNOTNULL注意:'=’是用來查詢已經(jīng)存在的數(shù)據(jù),而‘NULL,表示不存在數(shù)據(jù),因此不能使用,=餐詢NULL值。BETWEENAND查詢范圍值SELECT*FROMscoresWHEREWrittenScoreBETWEEN60AND80SELECT*FROMscoresWHEREWrittenScore>=60ANDWrittenScore<=80OrderBy排序如果要對查詢結(jié)果集中的數(shù)據(jù)按照特定的順序排列,則需要使用ORDERBY子句,如果按照升序排序時(shí),在。RDERBY子句后連接關(guān)鍵字ASC,默認(rèn)情況下就是升序排序,因此ASC可以省略。如果按照降序排序時(shí),在ORDERBY子句后連接關(guān)鍵字DESC。降序:SELECT*FROMscoresWHERETerm='si'ORDERBYwrittenscoreDESC升序:SELECT*FROMscoresWHERETerm='s2'ORDERBYlabscoreASC多列組合排序:SELECT*FROMScoresORDERBYwrittenScoreDESC,labscoreASC查詢語句的執(zhí)行順序:查詢語句“SELECT歹リFROM表WHERE條件ORDERBY列名”執(zhí)行的順序是FROM->WHERE->ORDERBY->SELECT二、復(fù)雜數(shù)據(jù)查詢聚合函數(shù)聚合函數(shù)的作用是對ー組值進(jìn)行計(jì)算,然后返回結(jié)果。例:查詢1002班所有學(xué)員的平均年齡。在SQL語句中,可以采用聚合函數(shù)來完成類似于求平均值這樣的數(shù)據(jù)統(tǒng)計(jì)功能。常用的聚合函數(shù)名稱作用 語法AVG 平均值A(chǔ)VG(表達(dá)式)SUM求和 SUM(表達(dá)式)MIN 最小值 MIN(表達(dá)式)MAX 最大值 MAX(表達(dá)式)COUNT 數(shù)據(jù)統(tǒng)計(jì)COUNT(表達(dá)式)語法:SELECTく聚合函數(shù)〉FROMく表名>[WHEREく條件表達(dá)式〉]SELECTAVG(Age)AS‘平均年齡’FROMInfosWHEREClassNo='1002'SELECTAVG(WrittenScore+LabScore)AS’總平均成績’FROMScoresWHERETerm='SI'SELECTSUM(Age)AS'總年齡’FROMInfosWHEREClassNo='1002'SELECTMAX(Age)AS‘最大年齡MIN(Age)AS'最小年齡'FROMInfosWHEREClassNo='1002'SELECTCOUNT(Age)AS'KWFROMInfosWHEREClassNo='1002'ANDAge<20分組查詢(GROUPBY子句)GROUPBY子句用于對查詢數(shù)據(jù)源中的數(shù)據(jù)根據(jù)一列或多列進(jìn)行分組,被分組列中所有相同的記錄被分為ー組。查詢1002班男學(xué)員與女學(xué)員的平均年齡。首先要通過WHERE子句過濾1002班的學(xué)員,然后將1002班中所有男學(xué)員分為ー組,女學(xué)員分為ー組,最后對這兩個(gè)組分別求平均年齡。SELECTGenderAS'性別'FROMInfosWHEREClassNo='1002'GROUPBYGenderselectsex性別,avg(age)平均值fromuserinfowheregradeld='l'groupbysexselectgradeld班級,avg(age)平均值fromuserinfogroupbygradeldHAVING子句按照班級分組,查詢男學(xué)員平均年齡,按照平均年齡降序,但是只查詢平均年齡大于22歲的班級。案例分析:在之前的基礎(chǔ)上,只需要加入查詢條件即可。HAVING子句同WHERE子句的功能,也是ー種查詢條件,它可以解決上述問題。HAVING子句可以將聚合函數(shù)作為搜索條件加入到SQL語句中。HAVING子句只能和SELEC!語句ー起使用,通常需要與GROUPBY子句ー起使用,如果不使用GROUPBY子句,則HAVING子句的行為與WHERE子句ー樣。通常理解為WHERE用于GROUPBY之前,HAVING用于GROUPBY之后。語法結(jié)構(gòu):HAVING子句語法結(jié)構(gòu)SELECT(列名,聚合函數(shù)》FROMく表名〉[WHERE查詢表達(dá)式][GROUPBY〈歹リ名〉][HAVING查詢表達(dá)式][ORDERBY〈歹リ名>[ASC|DESC]]注意:⑴出現(xiàn)在SELECT字段列表中,要么參與聚合運(yùn)算,要么是分組中分組依據(jù)字段,否則不允許出現(xiàn)在SELECT字段列表中。(2JHAVING的表達(dá)式是聚合函數(shù),或者字段名必須是分組字段SELECTClassNoAS,班級’,AVG(Age)AS‘平均年齡’FROMInfosWHEREGender=’男’GROUPBYClassNoHAVINGAVG(Age)>22ORDERBY平均年齡DESC例5中的演示代碼改為如下形式:對比WHERE、GROUPBY>HAVING在SELECT語句中應(yīng)用WHERE子句、GROUPBY子句、HAVING子句時(shí),要清晰的了解它們各自的作用,注意它們之間的關(guān)系,才能夠很好的將它們應(yīng)用到SELECT語句中。WHERE用于GROUPBY之前,滿足條件的記錄參與分組,HAVING用于GROUPBY之后,對分組后的每組再進(jìn)行篩選。三、多表數(shù)據(jù)查詢什么是連接查詢概念:根據(jù)兩個(gè)表或多個(gè)表的列之間的關(guān)系,從這些表中查詢數(shù)據(jù)。目的:實(shí)現(xiàn)多個(gè)表查詢操作。聯(lián)接的分類:內(nèi)聯(lián)接、外聯(lián)接、交叉聯(lián)接。內(nèi)聯(lián)接內(nèi)聯(lián)接操作用于查詢具有一定關(guān)聯(lián)的兩張(或兩張以上)表的關(guān)聯(lián)部分(按關(guān)聯(lián)對應(yīng)的字段)的數(shù)據(jù),操作表之間不一定要有主外鍵關(guān)系。內(nèi)聯(lián)接返回兩個(gè)表中所有相匹配的數(shù)據(jù)。不匹配的數(shù)據(jù)不顯示,采用INNERJOIN關(guān)鍵字實(shí)現(xiàn)。語法:SELECT(表A.字段11表B.字段1>し表A.字段2,-]FROMく表A>INNERJOIN〈表B>ONく表A.關(guān)聯(lián)字段=表B.關(guān)聯(lián)字段)例:SELECTInfos.StulD,StuName,Gender,WrittenScore,LabScoreFROMInfosINNERJOINScoresONInfos.StulD=Scores.StulDSELECTInfos.StulD,StuName,Gender,WrittenScore,LabScoreFROMInfosINNERJOINScoresONInfos.StulD=Scores.StulDWHEREWrittenScore>=60ANDLabScore>=60ORDERBYWrittenScoreDESC,LabScoreDESC外聯(lián)接外聯(lián)接分為左外聯(lián)接、右外聯(lián)接和完全外聯(lián)接。左外聯(lián)接:簡稱左聯(lián)接,語法格式基本同內(nèi)聯(lián)接,不同的是使用關(guān)鍵字LEFTJOIN或LEFTOUTERJOIN實(shí)現(xiàn)。LEFTJOIN左邊的表稱為左表,右邊的表稱為右表,左聯(lián)接查詢時(shí)將返回左表中的所有的行,右表中不存在的行以NULL填充。語法:SELECT〈表A.字段11表B.字段1>し表A.字段2,…]FROMく表A>LEFTJOIN<表B>ON<表A.關(guān)聯(lián)字段=表B.關(guān)聯(lián)字段〉SELECTlnfos.StulD,StuName,Gender,WrittenScore,LabScoreFROMInfosLEFTJOINScoresONInfos.StulD=Scores.StulD右外聯(lián)接簡稱右聯(lián)接,語法格式基本同內(nèi)聯(lián)接,不同的是使用關(guān)鍵字RIGTHJOIN或RIGTHOUTERJOIN實(shí)現(xiàn)。RIGTHJOIN左邊的表稱為左表,右邊的表稱為右表,右聯(lián)接查詢時(shí)將返回右表中的所有的行,左表中不存在的行以NULL填充。SELECT(表A.字段11表B.字段1>[,表A.字段2,…]FROMく表A>RIGTHJOIN<表B>ONく表A.關(guān)聯(lián)字段=表B.關(guān)聯(lián)字段〉完全外聯(lián)接語法格式基本同內(nèi)聯(lián)接,不同的是使用關(guān)鍵字FULLOUTERJOIN或FULLJOIN實(shí)現(xiàn)。完全外聯(lián)接返回左表與右表中所有的行,左表中的行在右表中沒有匹配項(xiàng)時(shí)右表值為NULL,右表中的數(shù)據(jù)行在左表中沒有匹配項(xiàng)時(shí)左表值為NULLoSELECTlnfos.StulD,StuName,Gender,WrittenScore,LabScoreFROMInfosFULLJOINScoresONInfos.StulD=Scores.StulD綜合練習(xí)例:查詢所有部門的名稱及其主管人員的姓名,要求查詢結(jié)果集中出現(xiàn)部門名稱、主管。SELECTDeps.DepNameas部門名稱,PerNameas主管FROMDepsINNERJOINPersonsONDeps.ChargelD=Persons.PerlD例:查詢所有人員的信息,并確定其中哪些人主管了哪些部門,要求查詢結(jié)果集中出現(xiàn)人員ID、姓名、主管部門。SELECTPerlDas人員ID,PerNameas姓名,Deps.DepNameas主管部門FROMPersonsLEFTJOINDepsONPersons.PerlD=Deps.ChargelDSELECTPeriDas人員!D,PerNameas姓名,Deps.DepNameas主管部門FROMDepsRIGTHJOINPersonsONDeps.ChargelD=Persons.PerlD例:查詢所有的部門由哪些人來主管,要求查詢的結(jié)果集中出現(xiàn)部門ID、部門名稱,主管人員。SELECTDepIDas部門!D,DepNameas部門名稱,PerNameas主管人員FROMDepsLEFTJOINPersonsONDeps.ChargelD=Persons.Perl例:針對Deps表和Salary作完全外聯(lián)接。SELECT*FROMDepsFULLJOINSalaryONDeps.ChargelD=Salary.PerlD第四章T_SQL編程ー、什么是T_SQL?其實(shí)T-SQL,就是Transact-SQL,是SQLServer對標(biāo)準(zhǔn)結(jié)構(gòu)化查詢語言的擴(kuò)展(SQL,即StructuredQueryLanguage)?而在。racle中我們使用的是PL/SQL,也就是oracle對標(biāo)準(zhǔn)SQL的擴(kuò)展。二、T.SQL和SQL的區(qū)別與聯(lián)系SQL是StructruedQueryLanguage的縮寫,即結(jié)構(gòu)化查詢語言。它是負(fù)責(zé)與ANSI(美國國家標(biāo)準(zhǔn)學(xué)會(huì))維護(hù)的數(shù)據(jù)庫交互的標(biāo)準(zhǔn)。作為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,它已被眾多商用DBMS產(chǎn)品所采用,使得它已成為關(guān)系數(shù)據(jù)庫領(lǐng)域中一個(gè)主流語言,不僅包含數(shù)據(jù)查詢功能,還包括插入、刪除、更新和數(shù)據(jù)定義功能.T-SQL是SQL語言的ー種版本,且只能在SQLSERVER上使用。它是ANSISQL的加強(qiáng)版語言、提供了標(biāo)準(zhǔn)的SQL命令。另外,T-SQL還對SQL做了許多補(bǔ)允,提供了類似C、Basic和Pascal的基本功能,如變量說明、流控制語言、功能函數(shù)等。三、T_SQL編程基礎(chǔ)3.1注釋.單行注釋:一.多行注釋:/* */.2運(yùn)算符.算數(shù)運(yùn)算符:+,-,*,/,%.比較運(yùn)算符:>,<,>=<=,<>,!>,!<,=.賦值運(yùn)算符:=.邏輯運(yùn)算符NOT,AND,ALL\OR\BETWEEN\IN\LIKE\SOME\ANY.一元運(yùn)算符:+(正數(shù)),-(負(fù)數(shù)),~(取反).字符串運(yùn)算符:+.3常量和變量.常量:23,,32432',$20.變量2.!局部變量:用戶可自定義的變量,它的作用范圍僅在程序內(nèi)部。局部變量的名稱都是以@開頭的。聲明局部變量DECLARE@局部變量名數(shù)據(jù)類型[,-n]declare@xint為局部變量賦值set@x=500select@x=max(score)fromscore2.2全局變量全局變量是SQLServer系統(tǒng)內(nèi)部事先定義好的變量,不用用戶參與定義,對用戶而言,其作用范圍并不局限于某ー程序,而是任何程序均可隨時(shí)調(diào)用。全局變量通常用于存儲(chǔ)ー些SQLServer的配置設(shè)定值和效能統(tǒng)計(jì)數(shù)據(jù)。全局變量的名稱都是以@@開頭的。@@IDENTITY返回最后插入的標(biāo)識(shí)值@@ROWCOUNT返回受上一語句影響的行數(shù)常用命令PRINT將用戶定義的消息返回客戶端命令用于在指定設(shè)備上顯示信息??梢暂敵龅臄?shù)據(jù)類型只有:char、nchar,varc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年租賃合同租金調(diào)整及維修責(zé)任
- 2024版房地產(chǎn)買賣及租賃合同
- 如何做到合理膳食與健康
- 2024貸款分款協(xié)議書
- 2024年高端化妝品市場exclusivity合同
- 四川三河職業(yè)學(xué)院《馬克思主義經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年高端智能設(shè)備采購與技術(shù)轉(zhuǎn)讓合同
- 防水施工監(jiān)理旁站記錄
- 電氣培訓(xùn)資料:電纜敷設(shè)方式與代號(hào)
- 銅仁幼兒師范高等??茖W(xué)校《藥學(xué)外語》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年慶陽市人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 車間現(xiàn)場防錯(cuò)培訓(xùn)課件
- 數(shù)字媒體技術(shù)基礎(chǔ)知識(shí)單選題100道及答案解析
- 全國職業(yè)院校技能大賽高職組(生產(chǎn)事故應(yīng)急救援賽項(xiàng))選拔賽考試題庫500題(含答案)
- 無痛分娩與鎮(zhèn)痛管理制度
- 2025屆中考英語復(fù)習(xí)課件(外研版廣西專用)13-八年級(下)Modules 1-2
- 2024-2025學(xué)年年八年級數(shù)學(xué)人教版下冊專題整合復(fù)習(xí)卷第11章 全等三角形單元試卷(含答案)
- 華電考試初級理論復(fù)習(xí)試題及答案
- 第十七屆山東省職業(yè)院校技能大賽市場營銷賽項(xiàng)賽卷第一套
- 塔吊司機(jī)和指揮培訓(xùn)
- 紅色簡約2025蛇年介紹
評論
0/150
提交評論