SQL-Server-2008數(shù)據(jù)庫—創(chuàng)建、建表、查詢語句.doc_第1頁
SQL-Server-2008數(shù)據(jù)庫—創(chuàng)建、建表、查詢語句.doc_第2頁
SQL-Server-2008數(shù)據(jù)庫—創(chuàng)建、建表、查詢語句.doc_第3頁
SQL-Server-2008數(shù)據(jù)庫—創(chuàng)建、建表、查詢語句.doc_第4頁
SQL-Server-2008數(shù)據(jù)庫—創(chuàng)建、建表、查詢語句.doc_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

SQL Server 2008數(shù)據(jù)庫創(chuàng)建、建表、查詢語句一、創(chuàng)建數(shù)據(jù)庫 1、利用對象資源管理器創(chuàng)建用戶數(shù)據(jù)庫:(1)選擇“開始”“程序”Microsoft SQL Server 2008SQL Server Management Studio命令,打開SQL Server Management Studio。(2)使用“Windows身份驗證”連接到SQL Server 2008數(shù)據(jù)庫實例。(3)展開SQL Server 實例,右擊“數(shù)據(jù)庫”,然后人彈出的快捷菜單中選擇“新建數(shù)據(jù)庫存”命令,打開“新建數(shù)據(jù)庫”對話框。(4)在“新建數(shù)據(jù)庫”對話框中,可以定義數(shù)據(jù)庫的名稱、數(shù)據(jù)庫的所有者、是否使用全文索引、數(shù)據(jù)文件和日志文件的邏輯名稱和路徑、文件組、初始大小和增長方式等。輸入數(shù)據(jù)庫名稱student。2、利用T-SQL語句創(chuàng)建用戶數(shù)據(jù)庫:在SQL Server Management Studio中,單擊標準工具欄的“新建查詢”按鈕,啟動SQL編輯器窗口,在光標處輸入T-SQL語句,單擊“執(zhí)行”按鈕。SQL編輯器就提交用戶輸入的T-SQL語句,然后發(fā)送到服務(wù)器執(zhí)行,并返回執(zhí)行結(jié)果。創(chuàng)建數(shù)據(jù)庫student的T-SQL語句如下:Create data base studentOn primary(name=student_data,filename=E:SQL Server2008 SQLFULL_CHSstudent_data.mdf,size=3,maxsize=unlimited,filegrowth=1)Log on(name=student_log,filename=E:SQL Server2008 SQLFULL_CHSstudent_log.ldf,size=1,maxsize=20,filegrowth=10%)二、創(chuàng)建數(shù)據(jù)表1、利用表設(shè)計器創(chuàng)建數(shù)據(jù)表:(1)啟動SQL Server Management Studio,連接到SQL Server 2008數(shù)據(jù)庫實例。(2)展開SQL Server實例,選擇“數(shù)據(jù)庫”student“表”,單擊鼠標右鍵,然后從彈出的快捷菜單中選擇“新建表”命令,打開“表設(shè)計器”。(3)在“表設(shè)計器”中,可以定義各列的名稱、數(shù)據(jù)類型、長度、是否允許為空等屬性。(4)當完成新建表的各個列的屬性設(shè)置后,單擊工具欄上的“保存”按鈕,彈出“選擇名稱”對話框,輸入新建表名stu_info,SQL Server數(shù)據(jù)庫引擎會依據(jù)用戶的設(shè)置完成新表的創(chuàng)建。2、利用T-SQL語句創(chuàng)建數(shù)據(jù)表:Create table stu_info(stu_id char(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ù)庫student表數(shù)據(jù):學生信息表(stu_info):課程信息表(course_info):學生成績表(stu_grade):三、完整性與約束數(shù)據(jù)庫中的數(shù)據(jù)是現(xiàn)實世界的反映,數(shù)據(jù)庫的設(shè)計必須能夠滿足現(xiàn)實情況的實現(xiàn),即滿足現(xiàn)實商業(yè)規(guī)則的要求,這也是數(shù)據(jù)完整性的要求。在數(shù)據(jù)庫的管理系統(tǒng)中,約束是保證數(shù)據(jù)庫中數(shù)據(jù)完整性的重要方法。1、 完整性:數(shù)據(jù)完整性是數(shù)據(jù)庫設(shè)計方面一個非常重要的問題,數(shù)據(jù)完整性代表數(shù)據(jù)的正確性、一致性和可靠性。實施數(shù)據(jù)完整性的目的在于確保數(shù)據(jù)的質(zhì)量。在SQL Server中,根據(jù)數(shù)據(jù)完整性措施所作用的數(shù)據(jù)庫對象和范圍不同,可以將數(shù)據(jù)完整性分類為實體完整性、域完整性和參照完整性。實體完整性把數(shù)據(jù)表中的每行看作一個實體,它要求所有的行都具有唯一的標識;域完整性要求數(shù)據(jù)表中指定列的數(shù)據(jù)具有正確的數(shù)據(jù)類型、格式和有效的數(shù)據(jù)范圍;參照完整性維持被參照表和參照表之間的數(shù)據(jù)一致性。2、 約束:約束是數(shù)據(jù)庫中的數(shù)據(jù)完整性實現(xiàn)的具體方法。在SQL Server中,包括5種約束類型:primary key約束、foreign key約束、unique約束、check約束和default約束。四、數(shù)據(jù)查詢1、查詢語句:查詢就是根據(jù)客戶端的要求,數(shù)據(jù)庫服務(wù)器搜尋出用戶所需要的信息資料,并按用戶規(guī)定的格式進行整理后返回給客戶端。查詢語句select在SQL Server中是使用頻率最高的語句,可以說select語句是SQL語言的靈魂。select語句的語法結(jié)構(gòu):select select_listinto new_tableFrom table_sourcewhere search_conditiongroup by group_by_expressionhaving search_conditionOrder by order_expressionasc|desc參數(shù)說明如下:Select子句:指定由查詢結(jié)果返回的列。Into子句:將查詢結(jié)果存儲到新表或視圖中。From子句:用于指定數(shù)據(jù)源,即使用的列所在的表或視圖。如果對象不止一個,那么它們之間必用逗號分開。Where子句:指定用于限制返回的行的搜索條件。如果select語句沒有where子句,dbms假設(shè)目標表中的所有行都滿足搜索條件。Group by子句:指定用來放置輸出行的組,并且如果select子句select_list中包含聚合函數(shù),則計算每組的匯總值。Having子句:指定組或聚合函數(shù)的搜索條件。Having通常與groupby子句一起使用。Order by子句:指定結(jié)果集的排序方式。ASC關(guān)鍵字表示升序排列結(jié)果,DESC關(guān)鍵字表示降序排列結(jié)果。如果沒有指定任何一個關(guān)鍵字,那么ASC就是默認的關(guān)鍵字。如果沒有orderby子句,DBMS將根據(jù)輸入表中的數(shù)據(jù)的存放位置來顯示數(shù)據(jù)。 在這一系列的子句中,select子句和from子句是必需的,其他的子句根據(jù)需要都是可選的。2、簡單查詢:21、查詢列:(1)查詢指定列:數(shù)據(jù)表中有很多列,通常情況下并不需要查看全部的列,因為不同的用戶所關(guān)注的內(nèi)容不同。在指定列的查詢中,列的顯示順序由select子句指定,與數(shù)據(jù)在表中的存儲順序無關(guān);同時,在查詢多列時,用“,”將各字段隔開。例7-1、查詢所有同學學號、姓名和成績信息。Select stu_id,name,markfrom stu_info查詢結(jié)果如下:(2)查詢所有列:使用“*”通配符,查詢結(jié)果將列出表中所有列的值,而不必指明各列的列名,這在用戶不清楚表中各列的列名時非常有用。服務(wù)器會按用戶創(chuàng)建表格時聲明列的順序來顯示所有的列。例7-2、查詢所有同學的所有信息。select*from stu_info查詢結(jié)果如下:(3)使用運算列:YEAR為系統(tǒng)函數(shù),獲取指定日期的年份;GEDDATE()為系統(tǒng)函數(shù),獲取當前日期和時間。例7-3、查詢所有同學的年齡信息。Select stu_id,name,YEAR(getdate()-YEAR(birthday)from stu_info查詢結(jié)果如下:(4)改變列標題顯示:通常在查詢結(jié)果顯示的列標題就是創(chuàng)建表時所使用的列名,但是,這在實際使用中往往會帶來一些不便,因此,可以利用 列標題=列名 或 as 列標題 來根據(jù)需要修改列標題的顯示。例7-4、查詢所有同學的年齡信息。Select name as姓名,YEAR(getdate()-YEAR(birthday)as年齡from stu_info1.函數(shù)year(getdate() 表示當前的年份2.函數(shù)year(birthday) 表示出生的年份3.year(getdate()-year(birthday)=22就是“當前的年份”-“出生的年份”=22(單位是年)計算出來的結(jié)果是當前年齡查詢結(jié)果如下:(5)除去結(jié)果的重復(fù)信息:使用 distinct 關(guān)鍵字能夠從返回的結(jié)果數(shù)據(jù)集合中刪除重復(fù)的行,使返回的結(jié)果更簡潔。例7-5、查詢所有的院系信息。Select distinct sdeptfrom stu_info查詢結(jié)果如下:(6)返回查詢的部分數(shù)據(jù):在SQL Server 2008中,提供了 top 關(guān)鍵字讓用戶指定返回一定數(shù)量的數(shù)據(jù)。Top n 表示返回最前面的n 行,n 表示返回的行數(shù);top n percent 表示返回前面的n%行。例7-6、查詢前5位同學的學號、姓名和成績信息。Select top 5 stu_id,name,markfrom stu_info查詢結(jié)果如下:例7-7、查詢60%同學的學號、姓名和成績信息。Select top 60 percent stu_id,name,markfrom stu_info查詢結(jié)果如下:22、選擇行:Where 子句用于指定查詢條件,使得select 語句的結(jié)果表中只包含那些滿足查詢條件的記錄。在使用時,where 子句必須緊跟在 from 子句后面。Where 子句中的條件表達式包括算術(shù)表達式和邏輯表達式兩種,SQL Server對Where 子句中的查詢條件的數(shù)目沒有限制。(1)使用比較表達式:例7-8、查詢所有的男同學學號、姓名、生日和性別信息。Select stu_id,name,birthday,sexfrom stu_infowhere sex=男查詢結(jié)果如下:例7-9、查詢所有的總分大于550分的同學學號、姓名、生日和性別信息。Select stu_id,name,birthday,sexfrom stu_infowhere mark550查詢結(jié)果如下:(2)使用邏輯比較表達式:例7-10、查詢所有總分大于550的男同學信息。Select stu_id,name,birthday,sexfrom stu_infowhere mark550 and sex=男查詢結(jié)果如下:例7-11、查詢所有總分大于550分或男同學信息。Select stu_id,name,birthday,sexFrom stu_infoWhere mark550 or sex=男查詢結(jié)果如下:為了增強程序可讀性,一般采用括號()來實現(xiàn)需要的執(zhí)行順序,而不考慮其默認的優(yōu)先級順序。例7-12、查詢所有信息學院和會計學院并且總分大于550分的同學信息。select*from stu_info where (sdept=信息學院or sdept=會計學院)and mark550查詢結(jié)果如下:(3)空值(null)的判斷:如果在創(chuàng)建數(shù)據(jù)表時沒有指定 not null 約束,那么數(shù)據(jù)表中某些列的值就可以為null。所謂null就是空,在數(shù)據(jù)庫中,其長度為0。例7-13、查詢所有籍貫為空的同學信息。select*from stu_infowhere address is null查詢結(jié)果如下:(4)限定數(shù)據(jù)范圍:使用between限制查詢數(shù)據(jù)范圍時同時包括了邊界值,效果完全可以用含有“=”和“”和“=80Group by stu_id查詢結(jié)果如下:(3)分組篩選:如果使用group by子句分組,則還可用having子句對分組后的結(jié)果進行過濾篩選。Having子句通常與group by子句一起使用,用于指定組或合計的搜索條件,其作用與where子句相似,二者的區(qū)別如下:作用對象不同:where 子句作用于表和視圖中的行,而having子句作用于形成的組。Where子句限制查找的行,having子句限制查找的組。執(zhí)行順序不同。若查詢句中同時有where子句和having子句,執(zhí)行時,先去掉不滿足where條件的行,然后分組,分組后再去掉不滿足having條件的組。Where子句中不能直接使用聚合函數(shù),但having子句的條件中可以包含聚合函數(shù)。例7-27、統(tǒng)計學生成績表中每個同學的最高分、最低分、平均分和總分,并輸出平均分大于87分的信息。Select stu_id,MAX(grade),MIN(grade),AVG(grade),SUM(grade)From stu_gradeGroup by stu_idHaving AVG(grade)87查詢結(jié)果如下:(4)明細匯總:使用group by子句對查詢數(shù)據(jù)進行分組匯總,為每一組產(chǎn)生一個匯總結(jié)果,每個組只返回一行,無法看到詳細信息。使用compute和compute by子句既能夠看到統(tǒng)計經(jīng)營部的結(jié)果又能夠瀏覽詳細數(shù)據(jù)。例7-28、使用compute子句對所有學生的人數(shù)進行明細匯總。select*from stu_infocompute count(stu_id)查詢結(jié)果如下:在使用compute 和compute by時,需要注意以下幾點:Computeby子句不能與select into子句一起使用。Compute 子句中的列必須在select子句的字段列表中出現(xiàn)。Compute by表示按指定的列進行明細匯總,使用by關(guān)鍵字時必須同時使用order by子句,并且compute by中出現(xiàn)的列必須具有與order by后出現(xiàn)的列相同的順序,且不能跳過其中的列。例7-29、使用compute by子句按照院系對所有學生的人數(shù)進行明細匯總。select*from stu_infoorder by sdeptcompute count(stu_id)by sdept查詢結(jié)果如下:3、 連接查詢:前面介紹的查詢都是針對單一的表,而在數(shù)據(jù)通庫管理系統(tǒng)中,考慮到數(shù)據(jù)的冗余度低、數(shù)據(jù)一致性等問題,通常對數(shù)據(jù)表的設(shè)計要滿足范式的要求,因此也會造成一個實體的所有信息保存在多個表中。當檢索數(shù)據(jù)時,往往在一個表中不能夠得到想要的信息,通過連接操作,可以查詢出存放在多個表中同一實體的不同信息,給用戶帶來很大的靈活性。多表連接實際上就是實現(xiàn)如何使用一個表中的數(shù)據(jù)來選擇另一個表中的行。而連接條件則主要通過以下方法定義兩個表在查詢中的關(guān)聯(lián)方式:指定每個表中要用于連接的列。典型的連接條件在一個表中的指定外鍵,在另一個表中指定與其關(guān)聯(lián)的鍵。指定比較各列的值時要使用的比較運算符(=、等)。表的連接的實現(xiàn)可以通過兩種方法:利用select語句的where子句;在from子句中使用join(inner join,cross join ,outer join,left outer join,full outer join等)關(guān)鍵字。例7-30、查詢所有選修課程編號701的同學學號、姓名和成績。Select stu_info.stu_id,name,markFrom stu_info,stu_gradeWhere stu_info.stu_id=stu_grade.stu_id and course_id=701查詢結(jié)果如下:例7-31、查詢所有選修課程的同學選修課程的成績。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é)果如下:有時表名比較煩瑣,使用起來很麻煩,為了程序的簡潔明了,在SQL中,也可以通過AS關(guān)鍵字為表定義別名。例7-32、查詢所有同學所有課程的成績。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 語句的from子句中,通過指定不同類型的join關(guān)鍵字可以實現(xiàn)不同的表的連接方式,而在on關(guān)鍵字后指定連接條件。例7-33、查詢所有選修課程的同學學號、姓名和成績。Select stu_info.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分數(shù)比學號為2007070101同學高的所有同學信息。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、查詢所有同學的選修課程信息。Select stu_info.stu_id,name,markFrom stu_info left outer join stu_gradeOn stu_info.stu_id=stu_grade.stu_id查詢結(jié)果如下:例7-36、查詢所有同學的選修課程信息。Select stu_info.stu_id,name,markFrom stu_grade right outer join stu_infoOn stu_info.stu_id=stu_grade.stu_id查詢結(jié)果如下:4、 嵌套查詢:所謂嵌套查詢指的是在一個select 查詢語句中包含另一個(或多個)select查詢語句。其中,外層的select查詢語句叫外部查詢,內(nèi)層的select 查詢語句叫子查詢。嵌套查詢的執(zhí)行過程:首先執(zhí)行子查詢語句,得到的子查詢結(jié)果集傳遞給外層主查詢語句,作為外層主查詢的查詢項或查詢條件使用。子查詢也可以再嵌套子查詢。4、1單列單值嵌套查詢:例7-37、查詢選修“計算機基礎(chǔ)”的學生成績信息。select*from stu_gradewhere course_id=(select course_idFrom course_infoWhere course_name=計算機基礎(chǔ))查詢結(jié)果如下:例7-38、查詢比“2007070101”同學年齡大的同學信息。select*from stu_infowhere birthday(select birthdayFrom stu_infoWhere stu_id=2007070101)查詢結(jié)果如下4、2單列多值嵌套查詢:例7-39、查詢所有會計學院的同學成績信息。select*from stu_gradewhere stu_id in(select stu_idFrom stu_infoWhere sdept=會計學院)查詢結(jié)果如下例7-40、查詢其他系中比會計學院某一學生分數(shù)少的學生學號和姓名。Select stu_id,nameFrom stu_infoWhere markany(select markFrom stu_infoWhere sdept=會計學院)And sdept會計學院查詢結(jié)果如下例7-41、查詢選修“計算機基礎(chǔ)”的學生成績信息。select*from stu_gradewhere exists(select*From course_infoWhere stu_grade.course_

溫馨提示

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

最新文檔

評論

0/150

提交評論