第六講-SQL簡單查詢語句_第1頁
第六講-SQL簡單查詢語句_第2頁
第六講-SQL簡單查詢語句_第3頁
第六講-SQL簡單查詢語句_第4頁
第六講-SQL簡單查詢語句_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六講SQL簡單查詢語句魯寧學時:2節(jié)教學內(nèi)容6.1SQL語言概述6.2數(shù)據(jù)查詢6.2.1數(shù)據(jù)查詢6.2.2數(shù)據(jù)查詢命令6.2.3應用實例6.3SQL數(shù)據(jù)更新功能6.3.1插入命令6.3.2更新命令6.3.3刪除命令Monday,February3,20256.1SQL概述SQL(StructureQuerylanguage)是結構化查詢語言的英文縮寫。SQL語言是一種標準的關系數(shù)據(jù)庫查詢語言,充分體現(xiàn)了關系數(shù)據(jù)語言的特點和優(yōu)點。Monday,February3,2025SQL語言概述SQL語言集數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制功能于一體。其主要特點有5個方面。1.綜合統(tǒng)一2.高度非過程化3.面向集合的操作方式4.兩種使用方式5.語言簡潔,易學易用:完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9條命令。9條SQL命令據(jù)定義命令(3條):CREATE,DROP,ALTER數(shù)據(jù)查詢命令(1條):SELECT數(shù)據(jù)操縱命令(3條):INSERT,UPDATE,DELETE數(shù)據(jù)控制命令(2條):GRANT,REVOKEMonday,February3,20256.2數(shù)據(jù)查詢6.2.1數(shù)據(jù)查詢SQL查詢模塊結構:SELECT<字段列表>FROM<單表或多表>[WHERE<查詢條件>]其中:(1)SELECT短語表示查詢輸出結果字段。(2)FROM短語表示查詢來源。可以是數(shù)據(jù)庫表、自由表或視圖。(3)WHERE短語表示查詢應滿足的條件。Monday,February3,2025Select查詢格式SELECT

select_list[INTOTablenew_table_name]FROM

table_list[WHERE

search_conditions][GROUPBY

group_by_list][HAVINGsearch_conditions][ORDERBY

order_list[ASC|DESC]]Monday,February3,2025SELECT語句的執(zhí)行過程根據(jù)WHERE子句的連接和檢索條件,從FROM子句指定的基本表或視圖中選取滿足條件的元組再按照SELECT子句中指定的列表達式,選出元組中的屬性值形成結果表。如果有GROUP子句,則將查詢結果按照指定<列名>相同的值進行分組;如果GROUP子句后有HAVING短語,則只輸出滿足HAVING條件的元組;如果有ORDER子句,查詢結果還要按照指定<列名>的值進行排序。Monday,February3,2025參數(shù)說明select_list:表示需要檢索的字段的列表,字段名稱之間使用逗號分隔。在這個列表中不但可以包含數(shù)據(jù)源表或視圖中的字段名稱,還可以包含其他表達式,例如常量或Transact-SQL函數(shù)。如果使用*來代替字段的列表,那么系統(tǒng)將返回數(shù)據(jù)表中的所有字段。INTOTablenew_table_name:該子句將指定使用檢索出來的結果集創(chuàng)建一個新的數(shù)據(jù)表。New_table_name為這個新數(shù)據(jù)表的名稱。FROMtable_list:使用這個句子指定檢索數(shù)據(jù)的數(shù)據(jù)表的列表。Monday,February3,2025參數(shù)說明GROUPBYgroup_by_list:GROUPBY子句根據(jù)參數(shù)group_by_list提供的字段將結果集分成組。HAVINGsearch_conditions:HAVING子句是應用于結果集的附加篩選,search_conditions將用來定義篩選條件。從邏輯上講,HAVING子句將從中間結果集對記錄進行篩選,這些中間結果集是用SELECT語句中的FROM、WHERE或GROUPBY子句創(chuàng)建的。ORDERBYorder_list[ASC|DESC]:ORDERBY子句用來定義結果集中的記錄排列的順序。Order_list將指定排序時需要依據(jù)的字段的列表,字段之間使用逗號分隔。ASC和DESC關鍵字分別指定記錄是按升序還是按降序排序Monday,February3,20256.2.2數(shù)據(jù)查詢命令SELECT[ALL/DISTINCT][TOP<表達式>[PERCENT]][<別名>.]<列表達式>[AS<欄名>][,[<別名.>]<列表達式>[AS<欄名>]…]FROM[<數(shù)據(jù)庫名!>]<表名>[,[<數(shù)據(jù)庫名!>]<表名>…][INNER/LEFT/RIGHT/FULLJOIN[<數(shù)據(jù)庫名!>]<表名>[ON<連接條件>…]][[INTO<新表名>]/[TOFILE<文件名>/TOPRINTER/TOSCREEN]][WHERE<連接條件>[AND<連接條件>…][AND/OR<篩選條件>[AND/OR<篩選條件>…]]][GROUPBY<列名>[,<列名>…]][HAVING<篩選條件>][ORDERBY<列名>[ASC/DESC][,<列名>[ASC/DESC]…]];Monday,February3,2025參數(shù)說明ALL/DISTINCT:DISTINCT表示去掉重復的行。缺省時為ALL表示查詢結果中所有的行被顯示。

TOP<表達式>[PERCENT]:指定查詢結果包括特定數(shù)目的行數(shù),或者包括全部行數(shù)的百分比。使用TOP子句時必須同時使用ORDERBY子句。[<別名>.]<列表達式>[AS<欄名>]:<列表達式>可以是FROM子句中指定數(shù)據(jù)表(可用<別名>引用)中的字段名,也可以是表達式。AS<欄名>表示可以給查詢結果的列名重新命名。FROM[<數(shù)據(jù)庫名!>]<表名>:列出查詢要用到的所有數(shù)據(jù)表。<數(shù)據(jù)庫名!>指定包含該表的非當前數(shù)據(jù)庫。

Monday,February3,2025參數(shù)說明INNER/LEFT/RIGHT/FULLJOIN[<數(shù)據(jù)庫名!>]<表名>[ON<連接條件>…]:連接查詢INNERJOIN指定查詢結果中只包括那些多個表中都有的行;LEFTJOIN指定查詢結果中包括JOIN關鍵字左邊表中所有的行,和JOIN關鍵字右邊表中與這些行匹配的行RIGHTJOIN指定查詢結果中包括JOIN關鍵字右邊表中所有的行,和JOIN關鍵字左邊表中與這些行匹配的行FULLJOIN指定查詢結果中包括所有表中的所有匹配與不匹配的行;ON<連接條件>指定表的連接條件。Monday,February3,2025參數(shù)說明[INTO<新表名>]/[TOFILE<文件名>/TOPRINTER/TOSCREEN]:指定查詢結果存放的地方,可以是數(shù)據(jù)表或是文本文件或輸出到打印機或在屏幕顯示。WHERE<連接條件>[AND<連接條件>…][AND/OR<篩選條件>[AND/OR<篩選條件>…]]:在多表查詢時,WHERE<連接條件>用于指定數(shù)據(jù)表之間聯(lián)結的條件;WHERE<篩選條件>指定在查詢結果中的記錄必須滿足的條件。GROUPBY<列名>[,<列名>…][HAVING<篩選條件>]:把查詢結果中的行按一個或多個列的值分組;可以指定在查詢結果中的各組應滿足的條件。ORDERBY<列名>[ASC/DESC][,<列名>[ASC/DESC]…]:用于指定一個或多個字段數(shù)據(jù)作為排序的基準,ASC為升序;DESC為降序,默認為升序。沒有此項,查詢結果不排序。Monday,February3,2025示例數(shù)據(jù)表結構ClassInfoStudInfoCourseInfoStudScoreInfoMonday,February3,2025示例數(shù)據(jù)表關系圖Monday,February3,2025示例數(shù)據(jù)ClassInfo(班級信息表)StudInfo(學生信息表)Monday,February3,2025示例數(shù)據(jù)CourseInfo(課程信息表)StudScoreInfo(學生成績信息表)Monday,February3,2025簡單查詢&&查詢學生信息表中的所有元組 Select*FromStudInfo&&用“*”表示數(shù)據(jù)表的全部列名,與下面語句等效 SelectStudNo,StudName,StudSex,StudBirthDay,ClassIDFromStudInfo&&查詢部分字段,投影查詢 SelectStudNo,StudSex,StudName,ClassIDFromStudInfo&&使用別名查詢 SELECTStudNoAs學號,StudNameAs姓名,ClassID

班級編號FromStudInfoMonday,February3,2025簡單查詢在Select選擇列表中使用常量 SelectStudNo,CourseID,StudScore,'99070470',20FromStudScoreInfo在Select選擇列表中使用表達式 SelectStudNo,CourseID,StudScore,StudScore+5AsNewScore,StudScore*0.8,StudNo+CourseID,”學號:”+StudNo,6*5,'GOOD'FromStudScoreInfo在Select選擇列表中使用函數(shù) SelectStudNo,StudName,Left(StudName,2)as姓,SubStr(StudName,3),Len(Alltrim(StudName))FromStudInfoMonday,February3,2025簡單查詢Select*FromStudScoreInfo&&使用Distinct去掉重復的行SelectDistinctStudNoFromStudScoreInfo&&查詢最前記錄注:使用TOP子句時,同時要使用ORDERBY子句SelectTop10*FromStudInfoOrderByStudNoSelectTop10*FromStudInfoOrderByStudNo

DescSelectTop20Percent*FromStudInfoOrderByStudNo

DescSelectTop20PercentStudNo,StudNameFromStudInfoOrderByStudNo

DescMonday,February3,2025條件查詢當要在數(shù)據(jù)表中找出滿足某些條件的行時,則需使用WHERE子句指定查詢條件WHERE子句條件通常通過三部分來描述:列名、比較運算符、列名或常數(shù)運

符含

義=,>,<,>=,<=,!=,<>比較大小AND,OR,NOT多重條件BETWEENAND確定范圍IN確定集合LIKE字符匹配常用比較運算符Monday,February3,2025條件查詢示例1.比較大小Select*FromStudInfoWhereStudno='99070470'Select*FromStudInfoWhereStudNo<'99070410'Select*FromStudScoreInfoWhereStudScore>=60Select*FromStudScoreInfoWhereStudScore!=802.多重條件查詢當WHERE子句需要指定一個以上的查詢條件時,則需要使用邏輯運算符AND,OR和NOT將其連接成復合的邏輯表達式。其優(yōu)先級由高到低為:NOT,AND,OR,用戶可以使用括號改變優(yōu)先級。Monday,February3,2025多重條件查詢Select*FromStudInfoWhereStudno='99070401'OrStudNo='99070470'Select*FromStudInfoWhereStudno='99070401'OrStudName='李偉'Select*FromStudInfoWhereval(right(alltrim(Studno),2))<15OrLeft(StudName,2)='李'Select*FromStudScoreInfoWhereStudScore>=80AndStudScore<90Select*FromStudScoreInfoWhereStudScore>=80OrStudScore<60Monday,February3,2025多重條件查詢Select*FromStudScoreInfoWhereStudScore>=80OrStudScore<60AndStudNo='99070470'Select*FromStudScoreInfoWhere(StudScore>=80OrStudScore<60)AndStudNo='99070470'Select*FromStudScoreInfoWhereNot(StudScore>=80OrStudScore<60)AndStudNo='99070470'Monday,February3,2025簡單連接查詢&&雙表關聯(lián) Select*FromStudInfo,ClassInfoWhereStudInfo.ClassID=ClassInfo.ClassID&&雙表關聯(lián),選擇部分字段

SelectStudInfo.StudNo,StudInfo.StudName,ClassInfo.ClassID,ClassInfo.ClassNameFromStudInfo,ClassInfoWhereStudInfo.ClassID=ClassInfo.ClassID&&雙表關聯(lián),條件篩選 Select*FromStudInfo,ClassInfoWhereStudInfo.ClassID=ClassInfo.ClassIDAndStudInfo.StudSex='男'Monday,February3,2025簡單連接查詢&&雙表關聯(lián),使用表別名,字段別名SelectS.StudNo,S.StudNameAs姓名,C.ClassID,C.ClassNameAs班級名稱FromStudInfoASS,ClassInfoCWhereS.ClassID=C.ClassIDSelectS.StudNo

學號,S.StudNameAS姓名,SS.CourseIDAS課程編號,StudScore

成績FromStudInfo

S,StudScoreInfoSSWhereS.StudNo=SS.StudNoMonday,February3,2025連接查詢示例—多表關聯(lián)&&三個表關聯(lián)查詢Select

StudInfo.StudNo,StudInfo.StudName,ClassInfo.ClassID,ClassInfo.ClassName,StudScoreInfo.CourseID,StudScoreInfo.StudScore;From

StudInfo,ClassInfo,StudScoreInfo;Where

StudInfo.ClassID=ClassInfo.ClassID;AndStudInfo.StudNo=StudScoreInfo.StudNoMonday,February3,2025連接查詢示例—多表關聯(lián)&&四個表關聯(lián)查詢SelectS.StudNo,S.StudName,Ci.CourseID,Ci.CourseName,SI.StudScore,C.ClassID,C.ClassName;From

StudInfo

S,ClassInfo

C,CourseInfo

CI,StudScoreInfoSIWhere

S.ClassID=C.ClassIDAndS.StudNo=SI.StudNoAndCI.CourseID=SI.CourseIDAndS.StudNo='99070470'Monday,February3,20253.范圍查詢&&使用Between…And… Select*FromStudInfoWhereStudNoBetween'99070401'And'99070410' Select*FromStudScoreInfoWhereStudScoreBetween70And80&&等價于下面語句 Select*FromStudScoreInfoWhereStudScore>=70.And.StudScore<=80Select*FromStudScoreInfoWhereStudScoreBetween70And80AndStudNo='99070470'Select*FromStudScoreInfoWhereNotStudScoreBetween70And80AndStudNo='99070470'Monday,February3,20254.集合查詢利用“IN”操作可以查詢屬性值屬于指定集合的元組。 Select*FromStudInfoWhereStudNoIn('99070470','99070401')&&等價于 Select*FromStudInfoWhereStudNo='99070470'OrStudNo='99070401' Select*FromStudScoreInfoWhereStudNoIn('99070470','99070401')AndStudScore>80 Select*FromStudScoreInfoWhereStudNoNotIn('99070470','99070401')AndStudScore>80&&等價于 Select*FromStudScoreInfoWherenot(StudNo='99070470'orStudNo='99070401')AndStudScore>80Monday,February3,20255.模糊查詢以上例子均屬于完全匹配查詢,當不知道完全精確的値時,用戶還可以使用LIKE或NOTLIKE進行部分匹配查詢(也稱模糊查詢)。LIKE定義的一般格式為:<屬性名>LIKE<字符串常量>屬性名必須為字符型,字符串常量的字符可以包含如下兩個特殊符號:%:表示任意長度的字符串;_:表示任意一個字符(在有的DBMS系統(tǒng)中,表示一個漢字需要兩個下畫線,而另一些系統(tǒng)則只需一個下畫線。Monday,February3,2025模糊查詢示例Select*FromStudInfoWhereStudNameLike'李%'Select*FromStudInfoWhereStudNameLike'李_'Select*FromStudInfoWhereStudNameLike'_紅_'Select*FromStudInfoWhereStudNameLike'%紅%'Select*FromStudInfoWhereStudNameLike'_紅%'OrStudNameLike'%麗'Monday,February3,2025統(tǒng)計查詢說明:在以上函數(shù)中,可以使用DISTINCT短語或ALL短語如果指定了DISTINCT短語,則表示在計算時取消指定列中的重復值如果不指定DISTINCT短語或ALL短語,則取默認值ALL,表示不取消重復值。常用統(tǒng)計函數(shù)及其功能函

數(shù)

稱功

能AVG按列計算平均值SUM按列計算值的總和COUNT按列值統(tǒng)計個數(shù)MAX求一列中的最大值MIN求一列中的最小值Monday,February3,2025統(tǒng)計查詢示例&&統(tǒng)計學號為99070470的平均分 SelectStudNo,Avg(StudScore)AsAvgScoreFromStudScoreInfoWhereStudNo='99070470'&&統(tǒng)計學號為99070470的總分 SelectStudNo,Sum(StudScore)AsSumScoreFromStudScoreInfoWhereStudNo='99070470'&&統(tǒng)計學號為99070470的總分、平均分、課程門數(shù) SelectStudNo,Sum(StudScore)AsSumScore,Avg(StudScore)AsAvgScore,;Count(*)AsCountCourseFromStudScoreInfoWhereStudNo='99070470'Monday,February3,2025統(tǒng)計查詢示例Select

StudNo,;Sum(StudScore)AsSumScore,;Avg(StudScore)AsAvgScore,;Max(StudScore)AsMaxScore,;Min(StudScore)AsMinScore,;Count(*)AsCountCourse,;Sum(StudScore)/Count(*)As平均分;From

StudScoreInfo;Where

StudNo='99070470'Monday,February3,2025分組查詢GROUPBY子句可以將查詢結果按屬性列或?qū)傩粤薪M合在行的方向上進行分組,每組在屬性列或?qū)傩粤薪M合上具有相同的值。示例: SelectStudNo,Avg(StudScore)AsAvgScoreFromStudScoreInfoGroupByStudNoGROUPBY子句按學號的值分組,所有具有相同學號的元組為一組,對每一組使用函數(shù)Avg進行計算,統(tǒng)計出各學生的平均數(shù)。若在分組后還要按照一定的條件進行篩選,則需使用HAVING子句。Monday,February3,2025GroupBy示例&&統(tǒng)計各學生的總分、平均分、最高分、最低分、課程門數(shù) SelectStudNo,Sum(StudScore)AsSumScore,Avg(StudScore)AsAvgScore,Max(StudScore)AsMaxScore,Min(StudScore)AsMinScore,Count(*)AsCountCourseFromStudScoreInfoGroupByStudNoMonday,February3,2025分組示例SelectS.StudNo,StudName,StudSex,Sum(StudScore)AsSumScore,Avg(StudScore)AsAvgScore,Max(StudScore)AsMaxScore,Min(StudScore)AsMinScoreCount(*)AsCountCourse;FromStudInfo

S,StudScoreInfoSI;WhereS.StudNo=SI.StudNoGroupByStudNoMonday,February3,2025Having示例&&查詢平均分大于80的學號和平均分 SelectStudNo,Avg(StudScore)AsAvgScore,Count(*)CourseCount;FromStudScoreInfo;GroupByStudNo;HavingAvg(StudScore)>80&&看看下面的Where子句與上面的Having子句執(zhí)行的區(qū)別 SelectStudNo,Avg(StudScore)AsAvgScore,Count(*)CourseCount;FromStudScoreInfoWhereStudScore>80;GroupByStudNo

Monday,February3,2025WHERE與HAVING子句區(qū)別當在一個SQL查詢中同時使用WHERE子句、GROUPBY子句和HAVING子句時,其順序是WHERE,GROUPBY,HAVING。WHERE與HAVING子句的根本區(qū)別在于作用對象不同:WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組;HAVING子句作用于組,選擇滿足條件的組,必須用于GROUPBY子句之后,但GROUPBY子句可以沒有HAVING子句。Monday,February3,2025Having和Where同時使用Select

StudNo,;Avg(StudScore)AsAvgScore,;Count(*)CourseCount;From

StudScoreInfo;Where

StudScore>60AndStudScore<=90;GroupBy

StudNo;Having

Avg(StudScore)>70AndAvg(StudScore)<=80Monday,February3,2025查詢的排序當需要對查詢結果排序時,可以使用ORDERBY子句對查詢的結果按照一個或多個屬性列的升序(ASC)或降序(DESC)排列,默認值為升序。ORDERBY子句必須出現(xiàn)在其他子句之后。示例:Select*FromStudScoreInfoWhereStudno='99070470'OrderbyStudScore

Select*FromStudScoreInfoWhereStudno='99070470'OrderbyStudScore

DescSelect*FromStudScoreInfoWhereOrderbyStudScore

Desc,StudNo

AscMonday,February3,2025排序示例SelectStudNo,Avg(StudScore)AsAvgScore

FromStudScoreInfoGroupByStudNo OrderbyAvg(StudScore)SelectStudNo,;

Sum(StudScore)AsSumScore,;

Avg(StudScore)AsAvgScore,;

Max(StudScore)AsMaxScore,;

Min(StudScore)AsMinScore,; Count(*)AsCountCourse; FromStudScoreInfo;GroupByStudNoOrderbyAvgScoreMonday,February3,2025綜合示例Select

StudNo,;Sum(StudScore)AsSumScore,;Avg(StudScore)AsAvgScore,;Max(StudScore)AsMaxScore,;Min(StudScore)AsMinScore,;Count(*)AsCountCourse;From

StudScoreInfo;Where

StudNoin('99070410','99070470')AndStudScoreBetween60And90;GroupBy

StudNo;Having

Avg(StudScore)>80;Orderby

AvgScore

DescMonday,February3,20256.3SQL的數(shù)據(jù)更新功能SQL語言的數(shù)據(jù)操縱也稱為數(shù)據(jù)更新,主要包括插入數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù)三種語句。6.3.1插入數(shù)據(jù)記錄插入數(shù)據(jù)是把新的記錄插入到一個存在的表中。插入數(shù)據(jù)使用語句INSERTINTO,可插入一條記錄,也可插入多條記錄。Monday,February3,20251.插入一行新記錄語法

INSERTINTO<表名>[(<字段名1>[,<字段名2>…])]VALUES(<表達式1>[,<表達式2>…])功能將新記錄插入到指定的表中,分別用表達式1、表達式2等為字段名1、字段名2等賦值。示例

InsertIntoStudInfo(StudNo,StudName,StudSex,StudBirthDay,ClassID)

溫馨提示

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

評論

0/150

提交評論