SQL_Server_2008數(shù)據(jù)庫(kù)—創(chuàng)建、建表、查詢語(yǔ)句_第1頁(yè)
SQL_Server_2008數(shù)據(jù)庫(kù)—創(chuàng)建、建表、查詢語(yǔ)句_第2頁(yè)
SQL_Server_2008數(shù)據(jù)庫(kù)—創(chuàng)建、建表、查詢語(yǔ)句_第3頁(yè)
SQL_Server_2008數(shù)據(jù)庫(kù)—創(chuàng)建、建表、查詢語(yǔ)句_第4頁(yè)
SQL_Server_2008數(shù)據(jù)庫(kù)—創(chuàng)建、建表、查詢語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SQL Server 2008數(shù)據(jù)庫(kù)創(chuàng)建、建表、查詢語(yǔ)句一、創(chuàng)建數(shù)據(jù)庫(kù) 1、利用對(duì)象資源管理器創(chuàng)建用戶數(shù)據(jù)庫(kù):(1)選擇“開(kāi)始”“程序”Microsoft SQL Server 2008SQL Server Management Studio命令,打開(kāi)SQL Server Management Studio。(2)使用“Windows身份驗(yàn)證”連接到SQL Server 2008數(shù)據(jù)庫(kù)實(shí)例。(3)展開(kāi)SQL Server 實(shí)例,右擊“數(shù)據(jù)庫(kù)”,然后人彈出的快捷菜單中選擇“新建數(shù)據(jù)庫(kù)存”命令,打開(kāi)“新建數(shù)據(jù)庫(kù)”對(duì)話框。(4)在“新建數(shù)據(jù)庫(kù)”對(duì)話框中,可以定義數(shù)據(jù)庫(kù)的名稱、數(shù)據(jù)庫(kù)的所有者、是否使用

2、全文索引、數(shù)據(jù)文件和日志文件的邏輯名稱和路徑、文件組、初始大小和增長(zhǎng)方式等。輸入數(shù)據(jù)庫(kù)名稱student。2、利用T-SQL語(yǔ)句創(chuàng)建用戶數(shù)據(jù)庫(kù):在SQL Server Management Studio中,單擊標(biāo)準(zhǔn)工具欄的“新建查詢”按鈕,啟動(dòng)SQL編輯器窗口,在光標(biāo)處輸入T-SQL語(yǔ)句,單擊“執(zhí)行”按鈕。SQL編輯器就提交用戶輸入的T-SQL語(yǔ)句,然后發(fā)送到服務(wù)器執(zhí)行,并返回執(zhí)行結(jié)果。創(chuàng)建數(shù)據(jù)庫(kù)student的T-SQL語(yǔ)句如下:Create database studentOn primary(name=student_data,filename=E:SQL Server2008 SQLF

3、ULL_CHSMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATAstudent_data.mdf,size=3,maxsize=unlimited,filegrowth=1)Log on(name=student_log,filename=E:SQL Server2008 SQLFULL_CHSMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATAstudent_log.ldf,size=1,maxsize=20,filegrowth=10%)二、創(chuàng)建數(shù)據(jù)表1、利用表設(shè)計(jì)器創(chuàng)建數(shù)據(jù)表:(1)啟動(dòng)SQL Se

4、rver Management Studio,連接到SQL Server 2008數(shù)據(jù)庫(kù)實(shí)例。(2)展開(kāi)SQL Server實(shí)例,選擇“數(shù)據(jù)庫(kù)”student“表”,單擊鼠標(biāo)右鍵,然后從彈出的快捷菜單中選擇“新建表”命令,打開(kāi)“表設(shè)計(jì)器”。(3)在“表設(shè)計(jì)器”中,可以定義各列的名稱、數(shù)據(jù)類型、長(zhǎng)度、是否允許為空等屬性。(4)當(dāng)完成新建表的各個(gè)列的屬性設(shè)置后,單擊工具欄上的“保存”按鈕,彈出“選擇名稱”對(duì)話框,輸入新建表名stu_info,SQL Server數(shù)據(jù)庫(kù)引擎會(huì)依據(jù)用戶的設(shè)置完成新表的創(chuàng)建。2、利用T-SQL語(yǔ)句創(chuàng)建數(shù)據(jù)表:Create table stu_info(stu_id ch

5、ar(10)not null,name nvarchar(20)not null,birthday date null,sex nchar(2)null,address nvarchar(20)null,mark int null,major nvarchar(20)null,sdept nvarchar(20)null);3、樣本數(shù)據(jù)庫(kù)student表數(shù)據(jù):學(xué)生信息表(stu_info):課程信息表(course_info):學(xué)生成績(jī)表(stu_grade):三、完整性與約束數(shù)據(jù)庫(kù)中的數(shù)據(jù)是現(xiàn)實(shí)世界的反映,數(shù)據(jù)庫(kù)的設(shè)計(jì)必須能夠滿足現(xiàn)實(shí)情況的實(shí)現(xiàn),即滿足現(xiàn)實(shí)商業(yè)規(guī)則的要求,這也是數(shù)據(jù)完整性的要

6、求。在數(shù)據(jù)庫(kù)的管理系統(tǒng)中,約束是保證數(shù)據(jù)庫(kù)中數(shù)據(jù)完整性的重要方法。1、 完整性:數(shù)據(jù)完整性是數(shù)據(jù)庫(kù)設(shè)計(jì)方面一個(gè)非常重要的問(wèn)題,數(shù)據(jù)完整性代表數(shù)據(jù)的正確性、一致性和可靠性。實(shí)施數(shù)據(jù)完整性的目的在于確保數(shù)據(jù)的質(zhì)量。在SQL Server中,根據(jù)數(shù)據(jù)完整性措施所作用的數(shù)據(jù)庫(kù)對(duì)象和范圍不同,可以將數(shù)據(jù)完整性分類為實(shí)體完整性、域完整性和參照完整性。實(shí)體完整性把數(shù)據(jù)表中的每行看作一個(gè)實(shí)體,它要求所有的行都具有唯一的標(biāo)識(shí);域完整性要求數(shù)據(jù)表中指定列的數(shù)據(jù)具有正確的數(shù)據(jù)類型、格式和有效的數(shù)據(jù)范圍;參照完整性維持被參照表和參照表之間的數(shù)據(jù)一致性。2、 約束:約束是數(shù)據(jù)庫(kù)中的數(shù)據(jù)完整性實(shí)現(xiàn)的具體方法。在SQL S

7、erver中,包括5種約束類型:primary key約束、foreign key約束、unique約束、check約束和default約束。四、數(shù)據(jù)查詢1、查詢語(yǔ)句:查詢就是根據(jù)客戶端的要求,數(shù)據(jù)庫(kù)服務(wù)器搜尋出用戶所需要的信息資料,并按用戶規(guī)定的格式進(jìn)行整理后返回給客戶端。查詢語(yǔ)句select在SQL Server中是使用頻率最高的語(yǔ)句,可以說(shuō)select語(yǔ)句是SQL語(yǔ)言的靈魂。select語(yǔ)句的語(yǔ)法結(jié)構(gòu):select select_listinto new_tableFrom table_sourcewhere search_conditiongroup by group_by_expre

8、ssionhaving search_conditionOrder by order_expressionasc|desc參數(shù)說(shuō)明如下:Select子句:指定由查詢結(jié)果返回的列。Into子句:將查詢結(jié)果存儲(chǔ)到新表或視圖中。From子句:用于指定數(shù)據(jù)源,即使用的列所在的表或視圖。如果對(duì)象不止一個(gè),那么它們之間必用逗號(hào)分開(kāi)。Where子句:指定用于限制返回的行的搜索條件。如果select語(yǔ)句沒(méi)有where子句,dbms假設(shè)目標(biāo)表中的所有行都滿足搜索條件。Group by子句:指定用來(lái)放置輸出行的組,并且如果select子句select_list中包含聚合函數(shù),則計(jì)算每組的匯總值。Having子句:

9、指定組或聚合函數(shù)的搜索條件。Having通常與groupby子句一起使用。Order by子句:指定結(jié)果集的排序方式。ASC關(guān)鍵字表示升序排列結(jié)果,DESC關(guān)鍵字表示降序排列結(jié)果。如果沒(méi)有指定任何一個(gè)關(guān)鍵字,那么ASC就是默認(rèn)的關(guān)鍵字。如果沒(méi)有orderby子句,DBMS將根據(jù)輸入表中的數(shù)據(jù)的存放位置來(lái)顯示數(shù)據(jù)。 在這一系列的子句中,select子句和from子句是必需的,其他的子句根據(jù)需要都是可選的。2、簡(jiǎn)單查詢:21、查詢列:(1)查詢指定列:數(shù)據(jù)表中有很多列,通常情況下并不需要查看全部的列,因?yàn)椴煌挠脩羲P(guān)注的內(nèi)容不同。在指定列的查詢中,列的顯示順序由select子句指定,與數(shù)據(jù)在表中

10、的存儲(chǔ)順序無(wú)關(guān);同時(shí),在查詢多列時(shí),用“,”將各字段隔開(kāi)。例7-1、查詢所有同學(xué)學(xué)號(hào)、姓名和成績(jī)信息。Select stu_id,name,markfrom stu_info查詢結(jié)果如下:(2)查詢所有列:使用“*”通配符,查詢結(jié)果將列出表中所有列的值,而不必指明各列的列名,這在用戶不清楚表中各列的列名時(shí)非常有用。服務(wù)器會(huì)按用戶創(chuàng)建表格時(shí)聲明列的順序來(lái)顯示所有的列。例7-2、查詢所有同學(xué)的所有信息。select*from stu_info查詢結(jié)果如下:(3)使用運(yùn)算列:YEAR為系統(tǒng)函數(shù),獲取指定日期的年份;GEDDATE()為系統(tǒng)函數(shù),獲取當(dāng)前日期和時(shí)間。例7-3、查詢所有同學(xué)的年齡信息。S

11、elect stu_id,name,YEAR(getdate()-YEAR(birthday)from stu_info查詢結(jié)果如下:(4)改變列標(biāo)題顯示:通常在查詢結(jié)果顯示的列標(biāo)題就是創(chuàng)建表時(shí)所使用的列名,但是,這在實(shí)際使用中往往會(huì)帶來(lái)一些不便,因此,可以利用 列標(biāo)題=列名 或 as 列標(biāo)題 來(lái)根據(jù)需要修改列標(biāo)題的顯示。例7-4、查詢所有同學(xué)的年齡信息。Select name as姓名,YEAR(getdate()-YEAR(birthday)as年齡from stu_info查詢結(jié)果如下:(5)除去結(jié)果的重復(fù)信息:使用 distinct 關(guān)鍵字能夠從返回的結(jié)果數(shù)據(jù)集合中刪除重復(fù)的行,使返回

12、的結(jié)果更簡(jiǎn)潔。例7-5、查詢所有的院系信息。Select distinct sdeptfrom stu_info查詢結(jié)果如下:(6)返回查詢的部分?jǐn)?shù)據(jù):在SQL Server 2008中,提供了 top 關(guān)鍵字讓用戶指定返回一定數(shù)量的數(shù)據(jù)。Top n 表示返回最前面的n 行,n 表示返回的行數(shù);top n percent 表示返回前面的n%行。例7-6、查詢前5位同學(xué)的學(xué)號(hào)、姓名和成績(jī)信息。Select top 5 stu_id,name,markfrom stu_info查詢結(jié)果如下:例7-7、查詢60%同學(xué)的學(xué)號(hào)、姓名和成績(jī)信息。Select top 60 percent stu_id,n

13、ame,markfrom stu_info查詢結(jié)果如下:22、選擇行:Where 子句用于指定查詢條件,使得select 語(yǔ)句的結(jié)果表中只包含那些滿足查詢條件的記錄。在使用時(shí),where 子句必須緊跟在 from 子句后面。Where 子句中的條件表達(dá)式包括算術(shù)表達(dá)式和邏輯表達(dá)式兩種,SQL Server對(duì)Where 子句中的查詢條件的數(shù)目沒(méi)有限制。(1)使用比較表達(dá)式:例7-8、查詢所有的男同學(xué)學(xué)號(hào)、姓名、生日和性別信息。Select stu_id,name,birthday,sexfrom stu_infowhere sex=男查詢結(jié)果如下:例7-9、查詢所有的總分大于550分的同學(xué)學(xué)號(hào)、

14、姓名、生日和性別信息。Select stu_id,name,birthday,sexfrom stu_infowhere mark550查詢結(jié)果如下:(2)使用邏輯比較表達(dá)式:例7-10、查詢所有總分大于550的男同學(xué)信息。Select stu_id,name,birthday,sexfrom stu_infowhere mark550 and sex=男查詢結(jié)果如下:例7-11、查詢所有總分大于550分或男同學(xué)信息。Select stu_id,name,birthday,sexFrom stu_infoWhere mark550 or sex=男查詢結(jié)果如下:為了增強(qiáng)程序可讀性,一般采用括號(hào)

15、()來(lái)實(shí)現(xiàn)需要的執(zhí)行順序,而不考慮其默認(rèn)的優(yōu)先級(jí)順序。例7-12、查詢所有信息學(xué)院和會(huì)計(jì)學(xué)院并且總分大于550分的同學(xué)信息。select*from stu_infowhere (sdept=信息學(xué)院or sdept=會(huì)計(jì)學(xué)院)and mark550查詢結(jié)果如下:(3)空值(null)的判斷:如果在創(chuàng)建數(shù)據(jù)表時(shí)沒(méi)有指定 not null 約束,那么數(shù)據(jù)表中某些列的值就可以為null。所謂null就是空,在數(shù)據(jù)庫(kù)中,其長(zhǎng)度為0。例7-13、查詢所有籍貫為空的同學(xué)信息。select*from stu_infowhere address is null查詢結(jié)果如下:(4)限定數(shù)據(jù)范圍:使用betwee

16、n限制查詢數(shù)據(jù)范圍時(shí)同時(shí)包括了邊界值,效果完全可以用含有“=”和“”和“=80Group by stu_id查詢結(jié)果如下:(3)分組篩選:如果使用group by子句分組,則還可用having子句對(duì)分組后的結(jié)果進(jìn)行過(guò)濾篩選。Having子句通常與group by子句一起使用,用于指定組或合計(jì)的搜索條件,其作用與where子句相似,二者的區(qū)別如下:作用對(duì)象不同:where 子句作用于表和視圖中的行,而having子句作用于形成的組。Where子句限制查找的行,having子句限制查找的組。執(zhí)行順序不同。若查詢句中同時(shí)有where子句和having子句,執(zhí)行時(shí),先去掉不滿足where條件的行,然后

17、分組,分組后再去掉不滿足having條件的組。Where子句中不能直接使用聚合函數(shù),但having子句的條件中可以包含聚合函數(shù)。例7-27、統(tǒng)計(jì)學(xué)生成績(jī)表中每個(gè)同學(xué)的最高分、最低分、平均分和總分,并輸出平均分大于87分的信息。Select stu_id,MAX(grade),MIN(grade),AVG(grade),SUM(grade)From stu_gradeGroup by stu_idHaving AVG(grade)87查詢結(jié)果如下:(4)明細(xì)匯總:使用group by子句對(duì)查詢數(shù)據(jù)進(jìn)行分組匯總,為每一組產(chǎn)生一個(gè)匯總結(jié)果,每個(gè)組只返回一行,無(wú)法看到詳細(xì)信息。使用compute和co

18、mpute by子句既能夠看到統(tǒng)計(jì)經(jīng)營(yíng)部的結(jié)果又能夠?yàn)g覽詳細(xì)數(shù)據(jù)。例7-28、使用compute子句對(duì)所有學(xué)生的人數(shù)進(jìn)行明細(xì)匯總。select*from stu_infocompute count(stu_id)查詢結(jié)果如下:在使用compute 和compute by時(shí),需要注意以下幾點(diǎn):Computeby子句不能與select into子句一起使用。Compute 子句中的列必須在select子句的字段列表中出現(xiàn)。Compute by表示按指定的列進(jìn)行明細(xì)匯總,使用by關(guān)鍵字時(shí)必須同時(shí)使用order by子句,并且compute by中出現(xiàn)的列必須具有與order by后出現(xiàn)的列相同的順序

19、,且不能跳過(guò)其中的列。例7-29、使用compute by子句按照院系對(duì)所有學(xué)生的人數(shù)進(jìn)行明細(xì)匯總。select*from stu_infoorder by sdeptcompute count(stu_id)by sdept查詢結(jié)果如下:3、 連接查詢:前面介紹的查詢都是針對(duì)單一的表,而在數(shù)據(jù)通庫(kù)管理系統(tǒng)中,考慮到數(shù)據(jù)的冗余度低、數(shù)據(jù)一致性等問(wèn)題,通常對(duì)數(shù)據(jù)表的設(shè)計(jì)要滿足范式的要求,因此也會(huì)造成一個(gè)實(shí)體的所有信息保存在多個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),往往在一個(gè)表中不能夠得到想要的信息,通過(guò)連接操作,可以查詢出存放在多個(gè)表中同一實(shí)體的不同信息,給用戶帶來(lái)很大的靈活性。多表連接實(shí)際上就是實(shí)現(xiàn)如何使用一個(gè)

20、表中的數(shù)據(jù)來(lái)選擇另一個(gè)表中的行。而連接條件則主要通過(guò)以下方法定義兩個(gè)表在查詢中的關(guān)聯(lián)方式:指定每個(gè)表中要用于連接的列。典型的連接條件在一個(gè)表中的指定外鍵,在另一個(gè)表中指定與其關(guān)聯(lián)的鍵。指定比較各列的值時(shí)要使用的比較運(yùn)算符(=、等)。表的連接的實(shí)現(xiàn)可以通過(guò)兩種方法:利用select語(yǔ)句的where子句;在from子句中使用join(inner join,cross join ,outer join,left outer join,full outer join等)關(guān)鍵字。例7-30、查詢所有選修課程編號(hào)701的同學(xué)學(xué)號(hào)、姓名和成績(jī)。Select stu_info.stu_id,name,mark

21、From stu_info,stu_gradeWhere stu_info.stu_id=stu_grade.stu_id and course_id=701查詢結(jié)果如下:例7-31、查詢所有選修課程的同學(xué)選修課程的成績(jī)。Select stu_info.stu_id,name,course_name,gradeFrom stu_info,stu_grade,course_infoWhere stu_info.stu_id=stu_grade.stu_id andcourse_info.course_id=stu_grade.course_id查詢結(jié)果如下:有時(shí)表名比較煩瑣,使用起來(lái)很麻煩,為了

22、程序的簡(jiǎn)潔明了,在SQL中,也可以通過(guò)AS關(guān)鍵字為表定義別名。例7-32、查詢所有同學(xué)所有課程的成績(jī)。Select A.stu_id,name,course_name,markFrom stu_info as A,stu_grade as B,course_info as CWhere A.stu_id=B.stu_id and B.course_id=C.course_id查詢結(jié)果如下:在select 語(yǔ)句的from子句中,通過(guò)指定不同類型的join關(guān)鍵字可以實(shí)現(xiàn)不同的表的連接方式,而在on關(guān)鍵字后指定連接條件。例7-33、查詢所有選修課程的同學(xué)學(xué)號(hào)、姓名和成績(jī)。Select stu_inf

23、o.stu_id,name,markFrom stu_info inner join stu_gradeOn stu_info.stu_id=stu_grade.stu_id查詢結(jié)果如下:例7-34、從stu_info表中查詢?nèi)雽W(xué)分?jǐn)?shù)比學(xué)號(hào)為2007070101同學(xué)高的所有同學(xué)信息。Select R1.stu_id,R1.name,R1.markFrom stu_info as R1 inner join stu_info as R2On R2.stu_id=2007070101 and R1.markR2.mark查詢結(jié)果如下:例7-35、查詢所有同學(xué)的選修課程信息。Select stu_i

24、nfo.stu_id,name,markFrom stu_info left outer join stu_gradeOn stu_info.stu_id=stu_grade.stu_id查詢結(jié)果如下:例7-36、查詢所有同學(xué)的選修課程信息。Select stu_info.stu_id,name,markFrom stu_grade right outer join stu_infoOn stu_info.stu_id=stu_grade.stu_id查詢結(jié)果如下:4、 嵌套查詢:所謂嵌套查詢指的是在一個(gè)select 查詢語(yǔ)句中包含另一個(gè)(或多個(gè))select查詢語(yǔ)句。其中,外層的select

25、查詢語(yǔ)句叫外部查詢,內(nèi)層的select 查詢語(yǔ)句叫子查詢。嵌套查詢的執(zhí)行過(guò)程:首先執(zhí)行子查詢語(yǔ)句,得到的子查詢結(jié)果集傳遞給外層主查詢語(yǔ)句,作為外層主查詢的查詢項(xiàng)或查詢條件使用。子查詢也可以再嵌套子查詢。4、1單列單值嵌套查詢:例7-37、查詢選修“計(jì)算機(jī)基礎(chǔ)”的學(xué)生成績(jī)信息。select*from stu_gradewhere course_id=(select course_idFrom course_infoWhere course_name=計(jì)算機(jī)基礎(chǔ))查詢結(jié)果如下:例7-38、查詢比“2007070101”同學(xué)年齡大的同學(xué)信息。select*from stu_infowhere bir

26、thday(select birthdayFrom stu_infoWhere stu_id=2007070101)查詢結(jié)果如下4、2單列多值嵌套查詢:例7-39、查詢所有會(huì)計(jì)學(xué)院的同學(xué)成績(jī)信息。select*from stu_gradewhere stu_id in(select stu_idFrom stu_infoWhere sdept=會(huì)計(jì)學(xué)院)查詢結(jié)果如下例7-40、查詢其他系中比會(huì)計(jì)學(xué)院某一學(xué)生分?jǐn)?shù)少的學(xué)生學(xué)號(hào)和姓名。Select stu_id,nameFrom stu_infoWhere markany(select markFrom stu_infoWhere sdept=會(huì)計(jì)學(xué)院)And sdept會(huì)計(jì)學(xué)院查詢結(jié)果如下例7-41、查詢選修“計(jì)算機(jī)基礎(chǔ)”的學(xué)生成績(jī)信息。select*from stu_gradewhere exists(select*From course_infoWhere stu_grade.course_id=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論