SQL Server數據庫實踐教程 課件全套 王雪梅 01-12 緒論-數據庫安全_第1頁
SQL Server數據庫實踐教程 課件全套 王雪梅 01-12 緒論-數據庫安全_第2頁
SQL Server數據庫實踐教程 課件全套 王雪梅 01-12 緒論-數據庫安全_第3頁
SQL Server數據庫實踐教程 課件全套 王雪梅 01-12 緒論-數據庫安全_第4頁
SQL Server數據庫實踐教程 課件全套 王雪梅 01-12 緒論-數據庫安全_第5頁
已閱讀5頁,還剩227頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SQLServer數據庫實踐課程介紹24學時、1.5學分

考查課

教材:《SQLServer數據庫實踐教程》

中國鐵道出版社2024.9出版上機軟件:SQLServer2008

MOOC:e會學MOOC《SQLServer數據庫實踐》(/)博思平臺MOOC:數據庫系統(安信工)智慧教學工具:云班課

+云教材《SQLServer數據庫實踐》ISBN978-7-113-30940-4記錄平時成績課程考核分值考核/評價細則100

出勤10%按照百分制,缺勤一次扣10分三次缺勤,該項考核分為0分測驗30%課后自測題+課堂測驗成績作業60%12個實驗報告,當堂交問卷、投票等其他活動考查課,零基礎入門課程學習方法數據庫無處不在可以登錄教務系統多次查詢課表、查詢自己的成績。你的個人賬號、密碼、收貨地址、購物信息等存在哪里?動態網站的工作過程(以淘寶網為例)(客戶機)瀏覽器進程Web應用服務器進程LAN或WANWeb服務器進程Web服務器Web應用服務器/(瀏覽淘寶網為例)數據庫服務器進程數據庫服務器ODBC數據庫數據庫的重要地位數據庫技術是所有信息系統的核心和基礎。chartGPT、訊飛星火大模型等AI模型都需要大量數據不管什么專業的學生,

都有必要學學數據庫知識數據庫的定義數據庫(Database,簡稱DB)是長期儲存在計算機內、有組織的、可共享的大量數據的集合。數據庫中存儲的基本對象是數據(Data)數據庫語言:SQL語言

(StructuredQueryLanguage結構化查詢語言)操作練習實驗1

SSMS圖形界面創建數據庫和學生表快速了解數據庫實驗1SSMS圖形界面創建數據庫和學生表創建數據庫ST創建學生表SSMS簡稱SSMS操作演示課后作業完成云教材學習任務。SQLServer數據庫實踐14十二月2024回顧數據庫(Database,簡稱DB)是長期儲存在計算機內、有組織的、可共享的大量數據的集合。數據庫中存儲的基本對象是數據(Data)數據庫的數據結構是二維表格

實驗1

SSMS圖形界面創建數據庫和學生表

(已完成)數據類型說明char(n)固定長度字符型,長度為n個字節,最多可存n個字符或n/2個漢字,n的取值范圍為1~8000,默認長度1varchar(n)可變長度字符型,長度為n個字節,n的取值范圍為1~8000,默認長度1nchar(n)固定長度Unicode字符型,Unicode字符集對字符和漢字都采用雙字節存儲,最多可存n個字符或n個漢字,n的取值范圍為1~4000,默認長度1nvarchar(n)可變長度Unicode字符型,n值在1~4000之間,默認長度1text大量長度的字符型,最多達到231—1(2147483647)字節ntext大量長度的Unicode字符型,最多可存(231—1)∕2=(1073741823)個字符或漢字常用數據類型(附錄B)附表B-1字符類型常用數據類型(附錄B)附表B-2數字類型數據類型說明bigint-263(-1.8E19)~263-1(1.8E19)的整型數,存儲長度為8個字節int-231(-2147483648)~231-1(2147483647)的整型數,存儲長度為4個字節smallint-215(-32768)~215-1(32767)的整型數,存儲長度為兩個字節tinyint0~255的整型數,存儲長度為1個字節float浮點型,從–1.79E+308到1.79E+308,存儲長度為8個字節real浮點精度型,從–3.40E+38到3.40E+38,存儲長度為4個字節bit整數型,值為1或0,存儲長度為1位numeric(p,s)固定精度和小數的數字型,取值范圍從-1038+1到1038–1。p是總的數字位數,取值范圍為1~38。s是小數位數,取值范圍從0到p。numeric與decimal數據類型在功能上等效decimal(p,s)固定精度和小數的數字型,取值范圍從-1038+1~1038–1。p是總的數字位數,取值范圍為1~38。s是小數位數,取值范圍從0到p。存儲長度為19個字節常用數據類型(附錄B)附表B-3日期類型數據類型說明精度date日期型,4個字節,無時間,1753年1月1日到9999年12月31日,SQLServer2008版新增的數據類型1天datetime日期時間型,8個字節,1753年1月1日到9999年12月31日3.33毫秒smalldatetime日期時間型,4個字節,1900年1月1日到2079年6月6日1分鐘time時間型,不存日期,只存時分秒,SQLServer2008版新增的數據類型1毫秒約束關系模型有三類完整性約束實體完整性(通過主鍵實現)參照完整性(通過外鍵實現)用戶自定義完整性(檢查約束、非空約束、唯一約束、默認值等)

今日內容:外鍵、聯合主鍵操作練習實驗2SSMS圖形界面管理數據庫和課程表、成績表實驗2SSMS圖形界面管理數據庫和課程表、成績表創建或附加ST數據庫創建表簡稱SSMS操作演示14十二月2024SQLServer數據庫實踐對數據庫有了初步認識在圖形界面初步認識了數據庫創建數據庫創建表錄入數據現在開始學習使用代碼操作數據庫數據庫嵌在程序中使用(客戶機)請求網頁瀏覽器進程Web應用服務器進程LAN或WANWeb服務器進程Web服務器Web應用服務器/(瀏覽淘寶網為例)數據庫服務器進程數據庫服務器ODBC①⑨返回頁面②發送到Web服務器③轉發動態頁面請求④連接數據庫驅動程序⑤執行查詢操作⑥返回查詢結果到數據庫驅動程序⑦返回結果到Web應用服務器⑧生成并將動態數據插入頁面,返回給Web服務器⑩接受網頁,解釋并顯示網頁內容數據庫SQL語言SQL(StructuredQueryLanguage)結構化查詢語言,是關系數據庫的標準語言SQL是一個通用的、功能極強的關系數據庫語言層次模型樹形結構網狀模型網狀結構層次數據庫、網狀數據庫已經淘汰目前使用的基本都是關系數據庫使用關系模型,數據結構是二維表SQL結構化查詢語言,NotonlyQuery

SQL語言數據查詢數據定義數據操縱(增、刪、改)數據安全控制事務處理SQL語言一般分四類數據定義語言(DDL,DataDefinitionLanguage)數據操縱語言(DML,DataManipulationLanguage)數據查詢語言(DQL,DataQuery

Language)數據控制語言(DCL,DataControlLanguage)(+事務)九個主要動詞數據定義操作對象操作方式數據庫createdatabasealterdatabasedropdatabase表createtablealtertabledroptable視圖createviewalterviewdropview

數據定義

三個動詞數據定義語言需要兩個關鍵字有特定含義的單詞create創建

alter修改drop刪除創建數據庫語法:CREATEDATABASE<數據庫名>[[ON[PRIMARY]]([NAME=<數據文件邏輯文件名>][,FILENAME=<'數據文件物理文件名'>][,SIZE=<數據文件初始大小>],[,MAXSIZE=<數據文件最大大小>][,FILEGROWTH<數據文件增長比例>][,…n])]

[LOGON([NAME=<日志文件邏輯文件名>][,FILENAME=<'日志文件物理文件名'>][,SIZE=<日志文件初始大小>],[,MAXSIZE=<日志文件最大大小>][,FILEGROWTH<日志文件增長比例>][,…n])]可選可選提示:

語法中的方括號[]表示可選項,非必需項創建數據庫【例題1】指定數據文件和日志文件屬性創建數據庫語句:CREATEDATABASEMyDBON(NAME=MyDB_data,

--數據文件邏輯名,半角逗號分隔FILENAME='C:\MyDB_data.mdf',--數據文件物理名,半角引號SIZE=10MB,

--數據文件初始大小MAXSIZE=UNLIMITED,

--數據文件最大設置FILEGROWTH=10%)

--數據文件增長方式,注意后面沒有逗號LOGON(NAME=MyDB_log,

--日志文件邏輯名

FILENAME='C:\MyDB_log.ldf',--日志文件物理名SIZE=3MB,

--日志文件初始大小MAXSIZE=5MB,

--日志文件最大設置

FILEGROWTH=1MB)

--日志文件增長方式,注意后面沒有逗號操作演示--后面是單行注釋,不執行

創建數據庫

CREATEDATABASEMyDBON(NAME=MyDB_data,FILENAME='C:\MyDB_data.mdf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)

LOGON(NAME=MyDB_log,FILENAME='C:\MyDB_log.ldf',SIZE=3MB,MAXSIZE=5MB,

FILEGROWTH=1MB)

邏輯名NAME物理名FILENAME修改數據庫

語法ALTERDATABASE<數據庫名>{ADDFILE<數據文件參數>[,...n]|ADDLOGFILE<日志文件參數>[,...n]|REMOVEFILE數據文件邏輯名稱|ADDFILEGROUP文件組名|REMOVEFILEGROUP文件組名|MODIFYFILE<數據文件參數> |MODIFYNAME=新數據庫名 |SET<參數>/*數據庫參數設置*/}/**/中間是多行注釋,不執行ALTERDATABASEMyDBADDFILE(NAME=MyDB_data2,FILENAME='C:\MyDB_data2.ndf',SIZE=10MB,MAXSIZE=2GB,FILEGROWTH=10%)

修改數據庫【例題2】增加數據文件次要數據文件擴展名.NDF

修改數據庫【例題3】修改數據文件的增長方式ALTERDATABASE

MyDBMODIFYFILE(NAME=MyDB_data2,FILEGROWTH=15%)刪除數據庫語法:DROPDATABASE<數據庫名>提示:會丟失數據,慎重使用刪除數據庫【例題4】刪除

MyDB數據庫語句:DROPDATABASE

MyDB打開數據庫

語法:

USE<數據庫名>

注意:

USE

DATABASE<數據庫名>

×

CREATEDATABASE<數據庫名>

ALTERDATABASE<數據庫名>

DROPDATABASE<數據庫名>

CREATETABLE<表名>

CREATEVIEW<視圖名>打開數據庫創建表

語法CREATETABLE<表名>(<列名><數據類型>[<列級完整性約束>][,<列名><數據類型>[<列級完整性約束>]]…[,<表級完整性約束>]);問題:數據類型都有哪些?

完整性約束有哪些?SQLServer中常用數據類型字符類型數據類型說明char[(n)]固定長度字符型,n的范圍:1~8000,默認1字節varchar[(n)]可變長字符型,n的范圍:1~8000,默認1字節nchar[(n)]固定長度Unicode字符型,每個字符都占2個字節,n的范圍:1~4000,默認1字節nvarchar[(n)]可變長度Unicode字符型,每個字符都占2個字節,n的范圍:1~4000之間,默認1字節text大長度字符型,最多231-1(2147483647)字節ntext大長度Unicode字符數據,最多(231-1)∕2(1073741823)個字符SQLServer中常用數據類型數字類型數據類型說明bigint長整型,8個字節,-263~263-1int整型,4個字節,-231~231-1smallint短整型2個字節,-215~215-1tinyint存儲長度為1個字節無符號整型,0~255float浮點型,8個字節,–1.79E+308~1.79E+308real浮點型,4個字節,–3.40E+38~3.40E+38bit二進制整數,1位值,為1或0numeric(p,s)固定精度和小數浮點型,取值范圍-1038+1~1038–1,p指定精度,取值范圍從1~38。s指小數位數,取值范圍從0~pdecimal(p,s)decimal與numeric數據類型在功能上等效。SQLServer中常用數據類型日期類型數據類型說明精度date日期型,無時間,4個字節,1753年1月1日~9999年12月31日1天datetime日期時間型,8個字節,1753年1月1日~9999年12月31日3.33毫秒smalldatetime日期時間型,4個字節,1900年1月1日~2079年6月6日1分鐘time時間型,不存日期,只存時分秒1毫秒SQLServer中常用數據類型貨幣類型數據類型說明money8個字節,-263(-922,337,203,685,477.5808)~263-1(922,337,203,685,477.5807)smallmoney4個字節,-231(-214,748.3648)~231-1(214,748.3647)完整性約束Primarykey:主鍵約束(唯一、不允許空)Foreignkeyreferences主鍵表(主鍵列):外鍵約束NULL|NOTNULL:非空約束(允許空|不允許空)Unique:唯一鍵約束Default(值):默認值約束Check(完整表達式):檢查約束

完整性約束:保證數據完整性的一種方法,可以防止數據庫中輸入不符合語意規定、不正確的數據。創建基本表

語法CREATETABLE<表名>(<列名><數據類型>[<列級完整性約束>][,<列名><數據類型>[<列級完整性約束>]]…[,<表級完整性約束>]);

約束分為表級約束和列級約束

只涉及一列的約束可以定義列級,也可以定義表級。

涉及多列的約束必須定義為表級(如SC表聯合主鍵)。提示:語法中的方括號[]表示可選項,非必需項創建基本表[例3]建立“學生”表Student,學號是主碼。

CREATETABLEStudent(SnoINTNOTNULL

PRIMARYKEY,/*列級完整性約束*/

SnameVARCHAR(20),SsexCHAR(2),SageSMALLINT,SdeptVARCHAR(20))主鍵提示:數據庫中不區分大小寫創建基本表[例4]建立一個“課程”表CourseCREATETABLECourse(CnoINTNOTNULL

PRIMARYKEY,CnameVARCHAR(40)UNIQUE,/*唯一約束*/

CpnoINT, CcreditSMALLINT

);創建基本表[例5]建立一個“學生選課”表SCCREATETABLESC(SnoINTFOREIGNKEYREFERENCESStudent(Sno),CnoINT,GradeSMALLINT,

PRIMARYKEY(Sno,Cno),/*表級約束,聯合主鍵,兩個屬性構成*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)

/*表級約束,外鍵,Cno是外碼,被參照表是Course*/);修改基本表

語法:ALTERTABLE<表名>[ADD<新列名><數據類型>[完整性約束]][ADD<表級完整性約束>][DROP[COLUMN]<列名>[CASCADE|RESTRICT]][DROPCONSTRAINT<完整性約束名>[CASCADE|RESTRICT]][ALTERCOLUMN<列名><數據類型>];修改基本表

ALTERTABLEStudentADDS_entranceDATE;不論基本表中原來是否已有數據,新增加的列一律為空值。

[例6]向Student表增加“入學時間”列,其數據類型為日期型。修改基本表[例7]將年齡的數據類型由字符型(假設原來的數據類型是字符型)改為整數。

ALTERTABLEStudentALTER

COLUMNSageINT;[例8]增加課程名稱必須取唯一值的約束條件。

ALTERTABLECourseADDUNIQUE(Cname);刪除基本表語法: DROPTABLE<表名>[例9]刪除Student表。

DROPTABLEStudent

操作練習實驗3數據定義

14十二月2024SQLServer數據庫實踐SQL語言一般分四類數據定義語言(DDL,DataDefinitionLanguage)數據操縱語言(DML,DataManipulationLanguage)數據查詢語言(DQL,DataQuery

Language)數據控制語言(DCL,DataControlLanguage)(+事務)創建數據庫

createdatabase創建表createtable插入數據兩種插入數據方式①插入元組②插入子查詢結果(后面再學)插入數據插入元組語法:

INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…)] VALUES(<常量1>[,<常量2>]…)可以一次插入一個或多個元組插入數據

[例1]將學生信息(學號:200215128;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。問題:語法沒錯,語句是否一定能執行成功?成功前提:不違反表中約束,符合域(屬性的取值范圍)的限制INSERTINTO

Student(Sno,Sname,Ssex,Sdept,Sage)

VALUES

(200215128,'陳冬','男','IS',18);插入數據語法:

INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…)]VALUES(<常量1>[,<常量2>]…)INSERTINTO

StudentVALUES

(200215128,'陳冬','男',18,'IS');提示:字符型和日期型常量加單引號,數值型直接寫

插入數據INTO子句屬性列的順序可與表定義中的順序不一致沒有指定屬性列:表示要插入的是一條完整的元組,且屬性列與表中定義的順序一致指定部分屬性列:要插入的元組在其余屬性列上取空值或者不允許為空但有默認值

VALUES子句提供的值必須與INTO子句匹配值的個數值的類型插入數據語法:

INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…)]VALUES(<常量1>[,<常量2>]…)INSERTINTO

Student(Sno,Sname)VALUES

(200215128,'陳冬');插入數據

插入語句時會檢查自動所插元組是否破壞表上已定義的完整性規則實體完整性參照完整性用戶定義的完整性NOTNULL約束UNIQUE約束值域約束提示:語法沒錯,語句也不一定能執行成功。成功前提:不違反表中約束,符合域(屬性的取值范圍)的限制修改數據修改數據語法

UPDATE<表名>SET<列名>=<表達式>[,<列名>=<表達式>]…[WHERE<條件>];修改數據修改數據三種方式:

修改某一個元組的值

修改多個元組的值

帶子查詢的修改語句(后面學)修改數據修改一個元組的值[例2]將Student表中學號為200215121的學生年齡改為22歲

問題:如果沒有WHERE子句會怎么樣?

UPDATEStudentSETSage=22WHERESno=200215121;修改數據語法

UPDATE<表名>

SET<列名>=<表達式>[,<列名>=<表達式>]…[WHERE<條件>];修改數據修改多個元組的值[例3]將所有學生的年齡增加1歲

UPDATEStudentSETSage=Sage+1;修改數據語法

UPDATE<表名>

SET<列名>=<表達式>[,<列名>=<表達式>]…[WHERE<條件>];修改數據執行修改語句時會檢查自動修改操作是否破壞表上已定義的完整性規則實體完整性參照完整性用戶定義的完整性

NOTNULL約束

UNIQUE約束值域約束刪除數據刪除數據語法

DELETE[FROM]<表名>[WHERE<條件>];4.數據更新:刪除數據三種刪除數據的方式:刪除某一個元組的值刪除多個元組的值帶子查詢的刪除語句(后面再學)刪除數據[例4]刪除學號為200215128的學生記錄。問題1:如果沒有WHERE子句會怎么樣?問題2:語法沒錯是否一定能刪除成功?

DELETEFROMStudentWHERESno=200215128;刪除數據語法

DELETE[FROM]<表名>[WHERE<條件>];說明:刪除語句時會受外鍵(參照完整性)制約操作練習實驗4數據更新

14十二月2024SQLServer數據庫實踐SQL語言一般分四類數據定義語言(DDL,DataDefinitionLanguage)數據操縱語言(DML,DataManipulationLanguage)數據查詢語言(DQL,DataQuery

Language)數據控制語言(DCL,DataControlLanguage)(+事務)√√√√數據查詢語法SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]stuDB數據庫三張表數據查詢目錄1、單表查詢2、連接查詢3、嵌套查詢4、集合查詢5、基于派生表的查詢1、單表查詢單表查詢僅涉及一個表,又分為:選擇表中的若干列選擇表中的若干元組

ORDERBY排序子句聚集函數

GROUPBY分組子句①

選擇表中的若干列【例題5-1】查詢全體學生的姓名和民族。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECTName,NationFROM

Student①

選擇表中的若干列【例題5-2】查詢全體學生的姓名、民族和性別。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECTName,Nation,SexFROM

Student注意:列的順序①

選擇表中的若干列【例題5-3】查詢全體學生的詳細信息。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECT

Sno,Name,Sex,Nation,Birthday

FROM

Student或者SELECT

*

FROM

Student習題1.查詢所有課程的課程名和學分2.查詢課程的所有信息查詢語法SELECT

<輸出列表>]…FROM數據源列表習題1.查詢所有課程的課程名和學分

selectcname,creditfromcourse2.查詢課程的所有信息查詢語法SELECT

<輸出列表>]…FROM數據源列表習題1.查詢所有課程的課程名和學分

selectcname,creditfromcourse2.查詢課程的所有信息

select*fromcourseselectCno,cname,hours,credit,Semesterfromcourse查詢語法SELECT

<輸出列表>]…FROM數據源列表①選擇表中的若干列查詢經過計算的值SELECT子句的<輸出列表>可以為:算術表達式字符串常量函數列別名SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]①

選擇表中的若干列【例題5-4】查詢學生的姓名及年齡。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECT

Name,YEAR(GETDATE())-YEAR(Birthday)

FROM

Student①

選擇表中的若干列【例題5-4】查詢學生的姓名及年齡。GETDATE()函數取系統當前日期YEAR()函數取日期中的年定義列別名有三種方法①別名=列名②列名as別名③列名別名SELECT

Name,YEAR(GETDATE())-YEAR(Birthday)

FROM

StudentSELECTName,nl=YEAR(GETDATE())-YEAR(Birthday)FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)asnl

FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)nl

FROMStudent例:SELECTname,birthday,YEAR(birthday)年,month(birthday)月,day(birthday)日FROMStudent常用日期函數

Getdate():返回服務器當前系統日期和時間

year(DATA):返回日期中的年

month(DATA):返回日期中的月

day(DATA):返回日期中的日②

選擇表中的若干元組【例題5-5】查詢學生分布在哪些民族

SELECTNationFROMStudent等價于:SELECTALLNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]②

選擇表中的若干元組【例題5-5】查詢學生分布在哪些民族

SELECTDISTINCTNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]說明:DISTINCT關鍵詞,去掉查詢結果中重復的行②

選擇表中的若干元組【例題5-7】查詢哪些學生是少數民族,顯示學生姓名和民族。SELECTName,NationFROMStudentWHERENation<>'漢族'SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]WHERE

子句中常用的查詢運算符查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運算符確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重條件(邏輯運算)AND,OR,NOT②

選擇表中的若干元組【例題5-8】查詢年齡在19~23歲(包括19和23歲)之間的學生的學號、姓名、出生日期。1:SELECTSno,Name,BirthdayFROMStudent

WHEREYEAR(GETDATE())-YEAR(Birthday)BETWEEN19AND232:SELECTSno,Name,BirthdayFROMStudent

WHEREYEAR(GETDATE())-YEAR(Birthday)>=19

ANDYEAR(GETDATE())-YEAR(Birthday)<=23操作練習實驗4單表查詢(一)1~5題

選擇表中的若干元組【例題5-9】查詢民族為“漢族”或者“滿族”的學生詳細信息。SELECT*FROMStudentWHERENationin('漢族','滿族')或者SELECT*FROMStudentWHERENation='漢族'orNation='滿族'②

選擇表中的若干元組【例題5-10】查詢哪些學生選課了還沒有考試成績,顯示學號,課程號。SELECTSno,CnoFROMSCWHEREGradeisNULL判斷空值不能用等號=②

選擇表中的若干元組-模糊查詢【例題5-11】查詢哪些學生姓名中含有“南”字。SELECT*FROMStudentWHERENameLIKE'%南%'模糊查詢通配符:%:任意長度_:單個字符②

選擇表中的若干元組-模糊查詢【例題5-13】找出所有姓“張”和姓“江”的員工信息。SELECT*FROMStudentWHERENameLIKE'[張,江]%'SELECT*FROMStudentWHEREsubstring(Name,1,1)IN('張','江')SELECT*FROMStudentWHEREleft(Name,1)IN('張','江')模糊查詢通配符:%:任意長度_:單個字符常用字符串函數Left(字符表達式,整數):截取從左側開始指定位數的子字符串Right(字符表達式,整數):截取從右側開始指定位數的子字符串Substring(字符表達式,起始位置,n):從任意位置取子串,截取從起始位置開始的n個字符Ltrim(字符表達式):去掉字符表達式左側(前面)的空格Rtrim(字符表達式):去掉字符表達式右側(尾部)的空格操作練習實驗4單表查詢(一)

14十二月2024SQLServer數據庫實踐SQL語言一般分四類數據定義語言(DDL,DataDefinitionLanguage)數據操縱語言(DML,DataManipulationLanguage)數據查詢語言(DQL,DataQuery

Language)數據控制語言(DCL,DataControlLanguage)(+事務)√√√√數據查詢語法SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]stuDB數據庫三張表數據查詢目錄1、單表查詢2、連接查詢3、嵌套查詢4、集合查詢5、基于派生表的查詢1、單表查詢單表查詢僅涉及一個表,又分為:選擇表中的若干列選擇表中的若干元組

ORDERBY排序子句聚集函數

GROUPBY分組子句①

選擇表中的若干列【例題5-1】查詢全體學生的姓名和民族。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECTName,NationFROM

Student①

選擇表中的若干列【例題5-2】查詢全體學生的姓名、民族和性別。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECTName,Nation,SexFROM

Student注意:列的順序①

選擇表中的若干列【例題5-3】查詢全體學生的詳細信息。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECT

Sno,Name,Sex,Nation,Birthday

FROM

Student或者SELECT

*

FROM

Student習題1.查詢所有課程的課程名和學分2.查詢課程的所有信息查詢語法SELECT

<輸出列表>]…FROM數據源列表習題1.查詢所有課程的課程名和學分

selectcname,creditfromcourse2.查詢課程的所有信息查詢語法SELECT

<輸出列表>]…FROM數據源列表習題1.查詢所有課程的課程名和學分

selectcname,creditfromcourse2.查詢課程的所有信息

select*fromcourseselectCno,cname,hours,credit,Semesterfromcourse查詢語法SELECT

<輸出列表>]…FROM數據源列表①選擇表中的若干列查詢經過計算的值SELECT子句的<輸出列表>可以為:算術表達式字符串常量函數列別名SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]①

選擇表中的若干列【例題5-4】查詢學生的姓名及年齡。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECT

Name,YEAR(GETDATE())-YEAR(Birthday)

FROM

Student①

選擇表中的若干列【例題5-4】查詢學生的姓名及年齡。GETDATE()函數取系統當前日期YEAR()函數取日期中的年定義列別名有三種方法①別名=列名②列名as別名③列名別名SELECT

Name,YEAR(GETDATE())-YEAR(Birthday)

FROM

StudentSELECTName,nl=YEAR(GETDATE())-YEAR(Birthday)FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)asnl

FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)nl

FROMStudent例:SELECTname,birthday,YEAR(birthday)年,month(birthday)月,day(birthday)日FROMStudent常用日期函數

Getdate():返回服務器當前系統日期和時間

year(DATA):返回日期中的年

month(DATA):返回日期中的月

day(DATA):返回日期中的日②

選擇表中的若干元組【例題5-5】查詢學生分布在哪些民族

SELECTNationFROMStudent等價于:SELECTALLNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]②

選擇表中的若干元組【例題5-5】查詢學生分布在哪些民族

SELECTDISTINCTNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]說明:DISTINCT關鍵詞,去掉查詢結果中重復的行②

選擇表中的若干元組【例題5-7】查詢哪些學生是少數民族,顯示學生姓名和民族。SELECTName,NationFROMStudentWHERENation<>'漢族'SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]WHERE

子句中常用的查詢運算符查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運算符確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重條件(邏輯運算)AND,OR,NOT②

選擇表中的若干元組【例題5-8】查詢年齡在19~23歲(包括19和23歲)之間的學生的學號、姓名、出生日期。1:SELECTSno,Name,BirthdayFROMStudent

WHEREYEAR(GETDATE())-YEAR(Birthday)BETWEEN19AND232:SELECTSno,Name,BirthdayFROMStudent

WHEREYEAR(GETDATE())-YEAR(Birthday)>=19

ANDYEAR(GETDATE())-YEAR(Birthday)<=23操作練習實驗4單表查詢(一)1~5題

選擇表中的若干元組【例題5-9】查詢民族為“漢族”或者“滿族”的學生詳細信息。SELECT*FROMStudentWHERENationin('漢族','滿族')或者SELECT*FROMStudentWHERENation='漢族'orNation='滿族'②

選擇表中的若干元組【例題5-10】查詢哪些學生選課了還沒有考試成績,顯示學號,課程號。SELECTSno,CnoFROMSCWHEREGradeisNULL判斷空值不能用等號=②

選擇表中的若干元組-模糊查詢【例題5-11】查詢哪些學生姓名中含有“南”字。SELECT*FROMStudentWHERENameLIKE'%南%'模糊查詢通配符:%:任意長度_:單個字符②

選擇表中的若干元組-模糊查詢【例題5-13】找出所有姓“張”和姓“江”的員工信息。SELECT*FROMStudentWHERENameLIKE'[張,江]%'SELECT*FROMStudentWHEREsubstring(Name,1,1)IN('張','江')SELECT*FROMStudentWHEREleft(Name,1)IN('張','江')模糊查詢通配符:%:任意長度_:單個字符常用字符串函數Left(字符表達式,整數):截取從左側開始指定位數的子字符串Right(字符表達式,整數):截取從右側開始指定位數的子字符串Substring(字符表達式,起始位置,n):從任意位置取子串,截取從起始位置開始的n個字符Ltrim(字符表達式):去掉字符表達式左側(前面)的空格Rtrim(字符表達式):去掉字符表達式右側(尾部)的空格操作練習實驗4單表查詢(一)

14十二月2024SQLServer數據庫實踐SQL語言一般分四類數據定義語言(DDL,DataDefinitionLanguage)數據操縱語言(DML,DataManipulationLanguage)數據查詢語言(DQL,DataQuery

Language)數據控制語言(DCL,DataControlLanguage)(+事務)√√√√數據查詢語法SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]stuDB數據庫三張表數據查詢目錄1、單表查詢2、連接查詢3、嵌套查詢4、集合查詢5、基于派生表的查詢1、單表查詢單表查詢僅涉及一個表,又分為:選擇表中的若干列選擇表中的若干元組

ORDERBY排序子句聚集函數

GROUPBY分組子句√√③ORDERBY排序子句【例題5-16】查詢選修了1號課程的學生學號及其成績,查詢結果按照成績降序排列。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]③ORDERBY排序子句【例題5-16】查詢選修了1號課程的學生學號及其成績,查詢結果按照成績降序排列。SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]SELECTSno,GradeFROMSCWHERECno=1ORDERBYGradeDESC分數降序表中數據順序③ORDERBY排序子句【例題5-17】查詢學生的學號、姓名、民族、出生日期,查詢結果按照民族升序排列,同一民族的按照年齡降序排列。SELECTSno,Name,Nation,BirthdayFROMStudentORDERBYNationASC,BirthdayASC

SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]判斷題:orderby子句中如果沒有寫排序字段,默認升序④聚集函數五個聚集函數,只有count()函數多種用法函數功能COUNT(*)統計元組(行、記錄)數COUNT(<列名>)統計該列(字段、屬性)值不為空的元組數COUNT(DISTINCT<列名>)統計該列值不為空,并且值不重復的元組數SUM(<列名>)計算一列值的總和(此列必須為數值型)AVG(<列名>)計算一列值的平均值(此列必須為數值型)MAX(<列名>)求一列值的最大值MIN(<列名>)求一列值的最小值④聚集函數【例題5-18】統計有多少名學生。代碼1:SELECTcount(*)FROMStudent代碼2:SELECTcount(*)學生數FROMStudentSELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]④聚集函數【例題5-20】查詢有多少學生選修了課程。SELECTcount(*)FROMSC結果:5SELECTcount(DISTINCTSno)選課人數FROMSC結果:3SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…

FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]④聚集函數【例題5-21】查詢課程表中有多少門必修課(選修課的開課學期是空值)。代碼1:SELECTcount(Semester)必修課程數FROMCourse代碼2:SELECTcount(*)必修課程數FROMCourse

WHERESemesterISNOTNULL

結果:3SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]強調:COUNT(*)

統計行數,不考慮空值COUNT(列名)

統計該列不為空的行數COUNT(DISTINCT列名)統計該列不為空

并且不重復的行數?SELECT

count(distinctSemester)

FROM

Course④聚集函數【例題5-19】查詢學生學習所有課程獲得的最高分、最低分和平均分。SELECTmax(Grade)最高分,min(Grade)最低分,avg(Grade)平均分FROMSCSELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]習題1用SQL語句統計學校一共開設了多少門課程用SQL語句統計少數民族學生的人數用SQL語句統計學生有多少個民族用SQL語句統計學校課程的總學時,以及最高學分、最低學分用SQL語句統計2號課程參加考試的人數用SQL語句統計1號課程的平均分COUNT()計數SUM()求和AVG()求平均分MAX()求最大值MIN()求最低分SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表

[WHERE<條件表達式>]習題1用SQL語句統計學校一共開設了多少門課程用SQL語句統計少數民族學生的人數用SQL語句統計學生有多少個民族用SQL語句統計學校課程的總學時,以及最高學分、最低學分用SQL語句統計2號課程參加考試的人數用SQL語句統計1號課程的平均分selectcount(*)fromcourseselectcount(cno)fromcourseselectcount(*)fromstudentwherenation<>’漢族’selectcount(distinctnation)fromstudentselectsum(hours),max(credit),min(credit)fromcourseselectcount(grade)fromSCwherecno=2selectcount(*)fromSCwherecno=2andgradeisnotnullselectavg(grade)fromSCwherecno=1COUNT()計數、SUM()求和AVG()求平均分、MAX()求最大值

、MIN()求最低分數據查詢語法SELECT[ALL|DISTINCT][TOPn|PERCENT]<輸出列表>]…FROM數據源列表[WHERE<條件表達式>][GROUPBY<分組表達式>[HAVING<條件表達式>]][ORDERBY<排序表達式>[ASC|DESC]]⑤GROUPBY子句GROUPBY子句分組:細化聚集函數的作用對象未分組,聚集函數將作用于整個查詢結果分組后,聚集函數將分別作用于每個組,按一列或多列分組,值相等的為一組⑤GROUPBY子句【例題5-18】統計有多少名學生。SELECTcount(*)學生數FROMStudent【進階】統計各個民族分別有多少名學生。SELECTnation,count(*)學生數FROMStudentgroupbynationGROUPBY分組后,聚集函數將分別作用于每個組值相等的為一組,分組統計⑤GROUPBY子句【例題5-19】查詢學生學習所有課程獲得的最高分、最低分和平均分。SELECTmax(Grade)最高分,min(Grade)最低分,avg(Grade)平均分FROMSC【進階1例題5-22】查詢每門課程

溫馨提示

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

評論

0/150

提交評論