sql2005增刪改查語句_第1頁
sql2005增刪改查語句_第2頁
sql2005增刪改查語句_第3頁
sql2005增刪改查語句_第4頁
sql2005增刪改查語句_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 SQL Server數(shù)據(jù)管理SQLWHAT(SQL是什么?)Structured Query Language:結(jié)構(gòu)化查詢語言WHY(為何要使用SQL?)難道僅僅使用SQL Server Management Studio操作數(shù)據(jù)庫?應(yīng)用程序如何與數(shù)據(jù)庫打交道?WHEN(何時(shí)使用?)對SQL Server執(zhí)行所有的操作都可以程序中的增刪改查HOW(怎么使用?)SQL和T-SQLT-SQL = Transact-SQLT-SQL是SQL的加強(qiáng)版對功能進(jìn)行了擴(kuò)充:如變量說明、流程控制、功能函數(shù)T-SQL的組成DML(數(shù)據(jù)操作語言)查詢、插入、刪除和修改數(shù)據(jù)庫中的數(shù)據(jù);SELECT、INSE

2、RT、 UPDATE 、DELETE等;DCL(數(shù)據(jù)控制語言)用來控制存取許可、存取權(quán)限等;GRANT、REVOKE 等;DDL(數(shù)據(jù)定義語言)用來建立數(shù)據(jù)庫、數(shù)據(jù)庫對象和定義其列CREATE TABLE 、DROP TABLE 等變量說明、流程控制、功能函數(shù)定義變量、判斷、分支、循環(huán)結(jié)構(gòu)等日期函數(shù)、數(shù)學(xué)函數(shù)、字符函數(shù)、系統(tǒng)函數(shù)等T-SQL中的運(yùn)算符運(yùn)算符含義=等于大于=大于或等于=小于或等于不等于!非(Java語言中為not)大多與Java語言中的一樣,很難寫錯(cuò)通配符通配符解釋示例_一個(gè)字符A Like C_%任意長度的字符串B Like CO_% 括號中所指定范圍內(nèi)的一個(gè)字符C Like

3、9W01-2不在括號中所指定范圍內(nèi)的一個(gè)字符D Like %A-D1-2通配符使用說明通常與LIKE關(guān)鍵字一起來使用可以用在檢查約束中使用LIKE在后面的查詢語句中還會(huì)經(jīng)常使用到身份證號碼的約束表達(dá)式怎么寫?邏輯表達(dá)式邏輯表達(dá)式說明示例AND邏輯與1 AND 1 = ; 1 AND 0 = 0; 0 AND 0 = 0;OR邏輯或1 OR 1 = 1; 1OR 0 = 1; 0 OR 0 = 0;NOT邏輯非NOT 1 = 0; NOT 0 = 1;NOT (付款方式 = 信用卡) OR (信用卡 陽光卡)這個(gè)表達(dá)式的含義是什么?插入數(shù)據(jù)行 7-1InSert INTO 列名 Values I

4、NSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX) VALUES (張青裁,上海松江,6,0) 插入數(shù)據(jù)行 7-2注意事項(xiàng)1:每次插入一行數(shù)據(jù),不可能只插入半行或者幾列數(shù)據(jù),因此,插入的數(shù)據(jù)是否有效將按照整行的完整性的要求來檢驗(yàn);INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX) VALUES (張青裁) 代碼錯(cuò)誤插入數(shù)據(jù)行 7-3注意事項(xiàng)2:每個(gè)數(shù)據(jù)值的數(shù)據(jù)類型、精度和小數(shù)位數(shù)必須與相應(yīng)的列匹配;INSERT INTO Students (SName,SAddress,S

5、Grade,SEmail,SSEX) VALUES (張青裁,上海松江,ZQC, ZG) 代碼錯(cuò)誤插入數(shù)據(jù)行 7-4注意事項(xiàng)3:不能為標(biāo)識(shí)列指定值,因?yàn)樗臄?shù)字是自動(dòng)增長的;INSERT INTO Students (SCode,SName,SAddress,SGrade,SEmail,SSEX) VALUES (32,張青裁,上海松江,6,0) 代碼錯(cuò)誤插入數(shù)據(jù)行 7-5注意事項(xiàng)4:如果在設(shè)計(jì)表的時(shí)候就指定了某列不允許為空,則必須插入數(shù)據(jù);INSERT INTO Students (SAddress,SGrade,SEmail,SSEX) VALUES (上海松江,6,0) 代碼錯(cuò)誤插入數(shù)據(jù)

6、行 7-6注意事項(xiàng)5:插入的數(shù)據(jù)項(xiàng),要求符合檢查約束的要求INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX) VALUES (張青裁,上海松江,6,ZQC,0)代碼錯(cuò)誤插入數(shù)據(jù)行 7-7注意事項(xiàng)6:具有缺省值的列,可以使用DEFAULT(缺?。╆P(guān)鍵字來代替插入的數(shù)值INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX) VALUES (張青裁,DEFAULT,6,0)小結(jié)1編寫SQL語句,把你自己的信息插入到學(xué)員信息表中插入多行數(shù)據(jù) 4-1INSERT INTO TongXu

7、nLu (姓名,地址,電子郵件) SELECT SName,SAddress,SEmailFROM StudentsInSert Into (列名)Select From 插入多行數(shù)據(jù) 4-2SELECT Students.SName,Students.SAddress,Students.SEmailINTO TongXunLuFROM StudentsSelect (列名)Into From 該語句可以執(zhí)行兩次嗎?插入多行數(shù)據(jù) 4-3SELECT Students.SName,Students.SAddress,Students.SEmail,IDENTITY(int,1,1) As Stu

8、dentIDINTO TongXunLuEXFROM StudentsSelect Into插入多行數(shù)據(jù)的時(shí)候,如何插入新的標(biāo)識(shí)列?SELECT IDENTITY(數(shù)據(jù)類型,標(biāo)識(shí)種子,標(biāo)識(shí)增長量) AS 列名INTO 新表FROM 原始表插入多行數(shù)據(jù) 4-4INSERT STUDENTS (SName,SGrade,SSex)SELECT 張可,7,1 UNIONSELECT 李揚(yáng),4,0 UNIONSELECT 楊曉,2,0 UNIONSELECT 湯美,3,0 UNIONSELECT 蘇三東,7,1 UNIONSELECT 王立巖,3,1 UNIONSELECT 張偉,7,1 UNIONS

9、ELECT 陳剛,4,1 UNIONSELECT 王娟娟,7,0InSert Into (列名)Select UnionSelect Union更新數(shù)據(jù)行Update Set Where UPDATE Students SET SSEX = 0UPDATE Students SET SAddress =北京女子職業(yè)技術(shù)學(xué)校家政班 WHERE SAddress = 北京女子職業(yè)技術(shù)學(xué)校刺繡班UPDATE ScoresSET Scores = Scores + 5WHERE Scores = 95小結(jié)2編寫SQL語句,更新學(xué)員信息表中全部女同學(xué)的地址為“北京奧運(yùn)村”刪除數(shù)據(jù)行 3-1Delete

10、From Where DELETE FROM Students WHERE SName =張青裁DELETE FROM 學(xué)員信息表 WHERE 學(xué)號 =運(yùn)行錯(cuò)誤河南新鄉(xiāng)趙可以河南新鄉(xiāng)張麗鵑江西南昌雷銅湖南新田吳蘭山東定陶李山.地址姓名學(xué)號98數(shù)學(xué)81語文67語文74數(shù)學(xué)88數(shù)學(xué).分?jǐn)?shù)學(xué)號科目刪除數(shù)據(jù)行 3-2以下的刪除語句可以執(zhí)行嗎?DELETE SCode FROM Students什么是查詢?客戶程序查詢請求查詢結(jié)果集SQL SERVERA B C D E F G SELECT * FROM SALES查詢產(chǎn)生一個(gè)虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正存儲(chǔ),每次執(zhí)行查詢只是現(xiàn)從數(shù)

11、據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來怎么查的?學(xué)員編號學(xué)員姓名地址所在班級.001張明全湖南長沙S201002李菲湖北宜昌S202003于寄謙甘肅天水S204004劉國正山東荷澤S201005周接輪臺(tái)灣新竹S204006鞏小妹香港龍灣S203007鞏大妹香港龍灣S203008張明敏北京順義S202009矛十八四川棉陽S204010羅林光陜西臨潼S202011司馬坡新疆喀什S201SELECT * FROM StudentsH WHERE 所在班級 = S202S202陜西臨潼羅林光010S202湖北宜昌李菲002S202北京順義張明敏008查詢SELECT FROM WHERE ORDER

12、BY ASC或DESC列名稱SELECT SCode,SName,SAddress表名FROMStudents過濾條件WHERESSEX = 0排序條件ORDER BYSCodeSELECT SCode,SName,SAddress FROM Students WHERE SSEX = 0 ORDER BY SCode數(shù)據(jù)查詢-基礎(chǔ)查詢?nèi)康男泻土蠸ELECT * FROM Students 查詢部分行SELECT SCode,SName,SAddress FROM StudentsWHERE SAddress = 河南新鄉(xiāng)SELECT SCode,SName,SAddress FROM St

13、udentsWHERE SAddress 河南新鄉(xiāng)數(shù)據(jù)查詢-列名使用AS來命名列SELECT SCode AS 學(xué)員編號,SName AS學(xué)員姓名,SAddress AS 學(xué)員地址 FROM StudentsWHERE SAddress 河南新鄉(xiāng)SELECT FirstName + . + LastName AS 姓名 FROM Employees使用=來命名列SELECT 姓名 = FirstName+.+LastName FROM Employees數(shù)據(jù)查詢-空行常量列查詢空行SELECT SName FROM Students WHERE SEmail IS NULL原來有數(shù)據(jù),但數(shù)據(jù)被

14、清除的列這樣能查出來嗎?使用常量列SELECT 姓名=SName,地址= SAddress,河北新龍 AS 學(xué)校名稱FROM Students數(shù)據(jù)查詢-限制行數(shù)限制固定行數(shù)SELECT TOP 5 SName, SAddressFROM Students WHERE SSex = 0返回百分之多少行SELECT TOP 20 PERCENT SName, SAddressFROM Students WHERE SSex = 0數(shù)據(jù)查詢-排序 2-1升序排列SELECT StudentID As 學(xué)員編號,(Score*0.9+5) As 綜合成績FROM ScoreWHERE (Score*0

15、.9+5)60ORDER BY Score降序排列SELECT Au_Lname +. +Au_fName AS EMP From Authors UnionSELECT fName +.+ LName AS EMP From EmployeeORDER BY EMP DESC數(shù)據(jù)查詢-排序 2-2按多列排序SELECT StudentID As 學(xué)員編號, Score As 成績FROM ScoreWHERE Score60ORDER BY Score,CourseID排序中的字段,可以使用表達(dá)式嗎? 如果不可以,請說明原因; 如果可以,請舉例說明;SQL Server中的函數(shù)相當(dāng)于Java

16、語言中的內(nèi)置包字符串函數(shù)日期函數(shù)數(shù)學(xué)函數(shù)系統(tǒng)函數(shù)字符串函數(shù)SELECT STUFF(ABCDEFG, 2, 3, 我的音樂我的世界)返回:A我的音樂我的世界EFG在一個(gè)字符串中,刪除指定長度的字符,并在該位置插入一個(gè)新的字符串STUFFSELECT CHARINDEX(ACCP,My Accp Course,1 )返回:4用來尋找一個(gè)指定的字符串在另一個(gè)字符串中的起始位置CHARINDEX舉例描述函數(shù)名SELECT LEN(SQL Server課程)返回:12返回傳遞給它的字符串長度LENSELECT LOWER(SQL Server課程)返回:sql server課程把傳遞給它的字符串轉(zhuǎn)換為

17、小寫LOWERSELECT UPPER(sql server課程)返回:SQL SERVER課程把傳遞給它的字符串轉(zhuǎn)換為大寫UPPERSELECT LTRIM ( 周智宇 )返回:周智宇 (后面的空格保留)清除字符左邊的空格LTRIMSELECT RTRIM ( 周智宇 )返回: 周智宇(前面的空格保留)清除字符右邊的空格RTRIMSELECT RIGHT(買賣提.吐爾松,3)返回:吐爾松從字符串右邊返回指定數(shù)目的字符RIGHTSELECT REPLACE(莫樂可切.楊可,可,蘭)返回:莫樂蘭切.楊蘭替換一個(gè)字符串中的字符REPLACE日期函數(shù)SELECT DATEPART(day, 01/1

18、5/2000)返回:15日期中指定日期部分的整數(shù)形式DATEPARTSELECT GETDATE()返回:今天的日期取得當(dāng)前的系統(tǒng)日期GETDATE舉例描述函數(shù)名SELECT DATEADD(mm,4,01/01/99)返回:以當(dāng)前的日期格式返回05/01/99將指定的數(shù)值添加到指定的日期部分后的日期DATEADDSELECT DATEDIFF(mm,01/01/99,05/01/99)返回:4兩個(gè)日期之間的指定日期部分的區(qū)別DATEDIFFSELECT DATENAME(dw,01/01/2000)返回:Saturday日期中指定日期部分的字符串形式DATENAME數(shù)學(xué)函數(shù)SELECT SQ

19、RT(9)返回:3取浮點(diǎn)表達(dá)式的平方根SqrtSELECT ABS(-43)返回:43取數(shù)值表達(dá)式的絕對值A(chǔ)BS舉例描述函數(shù)名SELECT CEILING(43.5)返回:44返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)CEILINGSELECT POWER(5,2)返回:25取數(shù)值表達(dá)式的冪值POWERSELECT ROUND(43.543,1)返回:43.5將數(shù)值表達(dá)式四舍五入為指定精度ROUNDSELECT SIGN(-43)返回:-1對于正數(shù)返回+1,對于負(fù)數(shù)返回-1,對于0 則返回0SignSELECT FLOOR(43.5)返回:43取小于或等于指定表達(dá)式的最大整數(shù)FLOOR系統(tǒng)函數(shù)SE

20、LECT USER_NAME(1)返回:從任意數(shù)據(jù)庫中返回“dbo”從給定的用戶I D返回用戶名USER_NAMESELECT CONVERT (VARCHAR (5),12345)返回:字符串12345用來轉(zhuǎn)變數(shù)據(jù)類型CONVERT 舉例描述函數(shù)名SELECT CURRENT_USER返回:你登錄的用戶名返回當(dāng)前用戶的名字CURRENT_USER SELECT DATALENGTH (中國A盟)返回:7返回用于指定表達(dá)式的字節(jié)數(shù)DATALENGTHSELECT HOST_NAME()返回:你所登錄的計(jì)算機(jī)的名字返回當(dāng)前用戶所登錄的計(jì)算機(jī)名字HOST_NAME SELECT SYSTEM_US

21、ER返回:你當(dāng)前所登錄的用戶名返回當(dāng)前所登錄的用戶名稱SYSTEM_USER 模糊查詢LIKE查詢時(shí),字段中的內(nèi)容并不一定與查詢內(nèi)容完全匹配,只要字段中含有這些內(nèi)容SELECT SName AS 姓名 FROM Students WHERE SName LIKE 張%姓名張果老張飛張揚(yáng)出去思考:以下的SQL語句:SELECT * FROM 數(shù)據(jù)表 WHERE 編號 LIKE 008%A,C%可能會(huì)查詢出的編號值為( )。A、9890ACDB、007_AFFC、008&DCGD、KK8C模糊查詢IS NULL把某一字段中內(nèi)容為空的記錄查詢出來SELECT SName As 姓名 SAddress

22、 AS 地址 FROM Students WHERE SAddress IS NULL姓名地址張果老NULL李尋歡NULL令狐沖NULL程靈素NULL猜一猜:把Students表中某些行的SAddress字段值刪掉后: 使用IS NULL能查詢出來這些數(shù)據(jù)行嗎? 怎么查詢出這些行來?模糊查詢BETWEEN把某一字段中內(nèi)容在特定范圍內(nèi)的記錄查詢出來SELECT StudentID, Score FROM SCore WHERE Score BETWEEN 60 AND 80StudentIDScore77786111761764模糊查詢IN把某一字段中內(nèi)容與所列出的查詢內(nèi)容列表匹配的記錄查詢出來

23、SELECT SName AS 學(xué)員姓名,SAddress As 地址 FROM Students WHERE SAddress IN (北京,廣州,上海)學(xué)員姓名地址李 揚(yáng)廣州于紫電上海李青霜北京司馬弓上海問題成績表中存儲(chǔ)了所有學(xué)員的成績,我想知道:學(xué)員的總成績、平均成績、有成績的學(xué)員總共有多少名?怎么辦?聚合函數(shù)-1SUMSELECT SUM(ytd_sales) FROM titles WHERE type = businessSELECT SUM(ytd_sales) ,Price FROM titles WHERE type = businessAVGSELECT AVG(SCore

24、) AS 平均成績 From Score WHERE Score =60代碼錯(cuò)誤聚合函數(shù)-2MAX、MINSELECT AVG(SCore) AS 平均成績, MAX (Score) AS 最高分, MIN (Score) AS 最低分 From Score WHERE Score =60COUNTSELECT COUNT (*) AS 及格人數(shù) From Score WHERE Score=60問題如果不是統(tǒng)計(jì)所有人所有課程的總成績而是想求每一門課的平均績或者某個(gè)人的所有課的總成績怎么辦?分組匯總第一門課6個(gè)成績?nèi)∑骄档诙T課6個(gè)成績?nèi)∑骄档谌T課5個(gè)成績?nèi)∑骄捣纸M查詢GROUP BY

25、SELECT CourseID, AVG(Score) AS 課程平均成績FROM ScoreGROUP BY CourseID分組查詢思考SELECT StudentID, CourseID, AVG(Score) AS 課程平均成績FROM ScoreGROUP BY CourseID思考:執(zhí)行以下的T-SQL: 結(jié)果如何?分組查詢多列分組怎么樣來統(tǒng)計(jì)每次的內(nèi)部測試不同學(xué)員的成績?第一次內(nèi)部測試不及格第二次內(nèi)部測試不及格第三次內(nèi)部測試不及格補(bǔ)考成績分組查詢再看看內(nèi)部測試成績還要把這個(gè)加上取平均StudentID和CourseID的組合存在重復(fù)需要按照這兩個(gè)來進(jìn)行分組,避免StudentID

26、和CourseID 同時(shí)一樣分組查詢多列分組SELECT StudentID AS 學(xué)員編號,CourseID AS 內(nèi)部測試, AVG(Score) AS 內(nèi)部測試平均成績FROM ScoreGROUP BY StudentID,CourseID分組查詢問題在以上統(tǒng)計(jì)內(nèi)部測試成績的基礎(chǔ)上,如果只想看補(bǔ)考的學(xué)員的成績,怎么辦分組查詢再看看增加條件:要求該學(xué)員的CourseID在分組內(nèi)出現(xiàn)過一次以上SELECT StudentID AS 學(xué)員編號,CourseID AS 內(nèi)部測試, AVG(Score) AS 內(nèi)部測試平均成績FROM ScoreGROUP BY StudentID,Course

27、ID分組查詢HAVINGSELECT StudentID AS 學(xué)員編號,CourseID AS 內(nèi)部測試, AVG(Score) AS 內(nèi)部測試平均成績FROM ScoreGROUP BY StudentID,CourseIDHAVING COUNT(Score)10分組查詢對比WHEREGROUP BYHAVINGWHERE子句從數(shù)據(jù)源中去掉不符合其搜索條件的數(shù)據(jù)GROUP BY子句搜集數(shù)據(jù)行到各個(gè)組中,統(tǒng)計(jì)函數(shù)為各個(gè)組計(jì)算統(tǒng)計(jì)值HAVING子句去掉不符合其組搜索條件的各組數(shù)據(jù)行分組查詢思考SELECT 部門編號, COUNT(*)FROM 員工信息表WHERE 工資 = 2000GROU

28、P BY 部門編號HAVING COUNT(*) 1思考:分析以下T-SQL的含義多表聯(lián)結(jié)查詢問題學(xué)員內(nèi)部測試成績查詢的每次顯示的都是學(xué)員的編號信息,因?yàn)樵摫碇兄淮鎯?chǔ)了學(xué)員的編號;實(shí)際上最好顯示學(xué)員的姓名,而姓名存儲(chǔ)在學(xué)員信息表;如何同時(shí)從這兩個(gè)表中取得數(shù)據(jù)?多表聯(lián)結(jié)查詢分類內(nèi)聯(lián)結(jié)(INNER JOIN)外聯(lián)結(jié)左外聯(lián)結(jié) (LEFT JOIN)右外聯(lián)結(jié) (RIGHT JOIN)完整外聯(lián)結(jié)(FULL JOIN)交叉聯(lián)結(jié)(CROSS JOIN)SELECT S.SName,C.CourseID,C.Score From Score AS CINNER JOIN Students AS SON C.StudentID = S.SCodeScoreStudentsIDCourseIDScore122300100100200297896776300381猜一猜:這樣寫,返回的查詢結(jié)果是一樣的嗎?SELECT S.SName,C.CourseID,C.Score From Students AS SINNER JOIN Score AS CON C.StudentID = S.SCode再猜一猜:以下返回多少行?SELECT S.SName,C.CourseID,C.Score From Students AS SINNER JOIN Score AS CON

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論