




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
SQLServer2008應用實踐教程
主講:凃云杰電子工業出版社鄭阿奇主編第五章數據庫數據查詢了解T-SQL的常用函數使用T-SQL進行單表的簡單查詢使用T-SQL進行多表的內連接和外連接,了解多表的交叉連接使用T-SQL進行嵌套查詢使用SSMS進行數據查詢教學目標3教學內容:5.1了解T-SQL的常用函數5.2分析“教學管理系統”中的數據查詢5.3簡單查詢5.4連接查詢5.5嵌套查詢5.6使用SSMS進行數據查詢教學重點難點:重點:連接查詢,難點:嵌套查詢45.1了解T-SQL的常用函數
任務:了解常用的SQL函數,掌握常用集合函數、字符串函數和日期時間函數。5數學函數:實現各種數學運算和三角運算。如:ABS:返回給定數字的絕對值。ABS(-44)=44SQRT:返回給定數字的平方根。SQRT(9)=9CEILING:返回大于或等于給定數字的最小整數。
CEILING(1.5)=2FLOOR:返回小于或等于給定數字的最大整數。FLOOR(1.3)=1RAND:返回一個0到1之間的隨機數。ROUND:四舍五入。ROUND(123.567,2)=123.570ROUND(123.567,1)=123.600T-SQL的常用函數6Sign:返回正負號。Sign(12)=1,Sign(-12)=-1,Sign(0)=0power:返回給定數字的乘冪。Power(3,4)=81EXP:返回指定數字的指數值。LOG:返回指定數字的自然對數。LOG10:返回指定數字的以10為底的對數值。Pi():返回π的常量值3.14159265358979,精確到小數點后14位。數學函數數學函數用來對數值型數據進行數學運算。常用數學函數如表6-1所示。表5-1常用數學函數
數學函數
功能描述
ABS(數值表達式)
返回表達式的絕對值(正值)
ACOS(浮點表達式)
返回浮點表達式的反余弦值(單位為弧度)
ASIN(浮點表達式)
返回返回浮點表達式的反正弦值(單位為弧度)
ATAN(浮點表達式)
返回浮點表達式的反正切值(單位為弧度)
ATN2(浮點表達式1,浮點表達式2)
返回以弧度為單位的角度值,此值的反正切值在所給的浮點表達式1和浮點表達式2之間
CEILING(數值表達式)
返回大于或等于數值表達式值的最小整數COS(浮點表達式
)返回浮點表達式的三角余弦
COT(浮點表達式)
返回浮點表達式的三角余切
DEGREES(數值表達式)
將弧度轉換為度
EXP(浮點表達式)
返回數值的指數形式
FLOOR(數值表達式)
返回小于或等于數值表達式值的最大整數
LOG(浮點表達式)
返回數值的自然對數值
LOG10(浮點表達式)
返回以10為底的浮點數的對數
PI()
返回π的值3.1415926535897931POWER(數值表達式,冪)
返回數值表達式值的指定次冪的值
RADIANS(數值表達式)
將度轉換為弧度,DEGREES的反函數
RAND([整型表達式])
返回0-1之間的隨機數ROUND(數值表達式,數值表達式)
將數值表達式四舍五入為整型表達式所給定的精度
SIGN(數值表達式)
符號函數,正數返回1,負數返回-1,0返回0SIN((浮點表達式))
返回浮點表達式的三角正弦值(單位為弧度)
SQUARE(浮點表達式)
返回浮點表達式的平方
SQRT(浮點表達式)
返回浮點表達式的平方根
TAN(浮點表達式)
返回浮點表達式的正切值(單位為弧度)[練習]分別輸出2的3次冪、-1的絕對值、2的平方、3.14的整數部分。在查詢分析器中運行如下命令:PRINTPOWER(2,3)PRINTABS(-1)PRINTSQUARE(2)PRINTFLOOR(3.14)GO運行結果為:8、1、4、3。102.字符串函數:實現對字符串數據的分析、查找、轉化等。ASCII:返回字符的ASCII整數值。CHAR:返回給定ASCII整數值對應的字符。參數0-255之間的整數。SPACE:返回指定個數的空格。STR:將給定的浮點數轉化成字符串。Length缺省值為10,decimal缺省值為0。Str(float[,length][,decimal]])Str(123.4567)=‘123’Str(123.4567,5)=‘123’Str(123.4567,6,1)=‘123.4’11LOWER:將字符串中的字符全部轉化成小寫。UPPER:將字符串中的字符全部轉化成大寫。LTRIM:刪除字符串前面的所有空格。RTRIM:刪除字符串后面的所有空格。LEFT:返回字符串從左邊開始的指定個數的字符。LEFT(string,integer)RIGHT:返回字符串從右邊開始的指定個數的字符。LEN:返回字符串中字符個數。12SUBSTRING:從字符串指定位置開始,返回指定個數的字符。substring('asdfggg',3,4)='dfgg',REPLACE:對字符串中的指定內容進行替換。replacereplace('Mydogisalovely
dog.','dog','cat')='Mycatisalovelycat.'13STUFF:將字符串插入另一字符串。STUFF(string1,start,length,string2),它在第一個字符串string1中從開始位置start處刪除指定長度length的字符,然后將第二個字符串string2插入第一個字符串的start位置處。stuff('asdfg',2,4,'dd')='add‘REVERSE:將字符串逆向輸出。reverse(454676)=676454reverse('你是狼')='狼是你'14CHARINDEX(string1,string2[,start])在string2中從start指定的字符開始搜索string1并返回其起始位置,如果沒有找到則返回0。charindex('as','aaassasas',2)=3charindex('as','asddasddas',2)=5【練習】使用LEN函數顯示字符串常量以及字符串變量的長度。提示:LEN函數用于計算字符串中所包含的字符個數,如果字符串尾部含有空格則會被忽略。在查詢分析器中運行如下命令:PRINTLEN('computerdepartment')DECLARE@s1char(10)DECLARE@s2char(10)SET@s1='welcome'SET@s2='hellow'PRINTLEN(@s1)PRINTLEN(@s2)運行結果為:19,7,6。【練習】給定一個字符串’haveagoodtime’,判斷字符’g’在整個字符串中的位置。提示:CHARINDEX函數用于在規定字符串中對子字符串進行查詢。當返回值大于零時表示子字符串的起始位置,返回值為0時表明沒有查詢結果。在查詢分析器中運行如下命令:DECLARE@sCHAR(20)SET@s='haveagoodtime'PRINTCHARINDEX('g',@s)運行結果為:8163.日期時間函數:實現對日期時間類型數據的各種操作。GETDATE:返回SQLServer服務器上的當前系統日期與時間DATEADD(interval,number,date):以interval指定的方式對date加上number之后的日期。返回datetime或smalldatetime類型的數據。如果number為負數,則會將date減去指定時間。dateadd(month,4,'2012/4/24')DATEDIFF(interval,date1,date2):以interval指定的方式,返回date2與date1之間的差值。DATEdiff(day,GETDATE(),'2014/4/24');17Datename(interval,date):返回日期date中interval指定部分所對應的字符串。DATEPART(interval,date):返回日期date中interval指定部分所對應的整數值。SELECTDATEPART(month,GETDATE());GOSELECTDATEname(year,getdate());DATEPART和DATENAME函數以整數或ASCII字符串形式生成datetime值的指定部分(例如年、季度、天或小時)。由于smalldatetime只能精確到分鐘,因此在這兩個函數中使用smalldatetime值時,返回的秒和毫秒部分總是為零。含義值縮寫取值范圍年yearyy1753-9999季度quarterqq1-4月monthmm1-12一年中的第幾日Dayofyeardy1-366日daydd1-31一周中的第幾日weekdaydw1-7一年中的第幾周weekwk0-51小時/分鐘/秒/毫秒Hour/minute/second/millisecondHh/mi/ss/ms0-23/0-59/0-59/0-999【練習】獲取系統時間信息,在查詢分析器中分別顯示系統時間中的年份、月份以及日期。提示:GETDATE函數用于返回當前的系統時間,YEAR,MONTH,DAY函數可以取得時間中的年、月、日的數值。在查詢分析器中運行如下命令:DECLARE@xtsjDATETIMESET@xtsj=GETDATE()SELECTYEAR(@xtsj)SELECTMONTH(@xtsj)SELECTDAY(@xtsj)【練習】通過對“學生基本信息表”中的“出生日期”字段進行計算,查詢每一位學生的年齡。提示:利用DATEDIFF函數可以計算出兩個日期之間的距離,該函數含有三個參數,第一個參數通常可以為yy(年)或mm(月)或dd(日),若第一個參數為yy時,該函數返回值為后兩個日期參數之間年份的差距。在本例中,當前的日期由GETDATE函數獲得后,計算與每一位學生的出生日期之間年份的差距,從而獲得學生的年齡并在查詢結果中顯示。在查詢分析器中運行如下命令:SELECTsnoas學號,snameas姓名,DATEDIFF(yy,birthday,GETDATE())as年齡fromstudent214.集合函數用于計算SELECT語句查詢結果行的統計值,在查詢結果集中生成匯總值。如:
COUNT、
MAX、
MIN、
SUM等。225.系統函數用于獲取有關計算機系統、用戶、數據庫和數據庫對象等當前運行環境的系統信息。系統函數。①CAST和CONVERT函數。CAST、CONVERT這兩個函數都是實現數據類型的轉換,但CONVERT的功能更強一些。常用的類型轉換有以下幾種情況:日期型→字符型:如將datetime或smalldatetime數據轉換為字符數據(如nchar、nvarchar、char、varchar、nchar或nvarchar類型)。字符型→日期型:如將字符數據轉換為datetime或smalldatetime數據。數值型→字符型:如將float、real、money或smallmoney數據轉換為字符數據。語法格式:CAST(expressionASdata_type[(length)])CONVERT(data_type[(length)],expression[,style])【練習】查詢學生基本信息表中的學號、姓名、年齡,并且將這三個字段通過“+”運算符進行連結顯示在查詢結果中。提示:由于計算學生年齡的結果為整數,而學號、姓名均為字符串類型的值,因而在運算之前,需要將年齡的計算結果轉化為字符串,即CAST(DATEDIFF(yy,birthday,GETDATE())ASCHAR(2))。在查詢分析器中運行如下命令:SELECTsno+sname+'年齡:'+CAST(DATEDIFF(yy,birthday,GETDATE())ASCHAR(2))FROMstudent24T-SQL的常用函數6.
用戶自定義函數:自定義的函數包含標量值函數、內聯表值函數和多語句表值函數三種。標量值函數。該函數返回單個數據值,數據類型是在RETURNS子句中指定的。內聯表值函數。該函數指定table作為返回類型,可以通過內聯表值函數實現參數化視圖功能。多語句表值函數。該函數是視圖與存儲過程的集合應用,返回table類型。25【例5-1】定義一個函數stu_score,求出并返回學生成績的70%。createfunctionstu_score(@ttasnumeric(5,2))returnsnumeric(5,2)asbeginreturn(@tt*0.7)endGO26標量值函數可以出現在select子句的查詢列表中。selectgrade,dbo.stu_score(grade)as'成績的%'fromstudent_teacher_coursego275.2分析“教學管理系統”中的數據查詢任務:分析“教學管理系統”中的數據查詢需求。28“教學管理系統”中的數據查詢1.從查詢類型角度分析:單表查詢。針對沒有外鍵的基本表。多表查詢。通過外鍵列將分屬于多個表的信息進行連接查詢或嵌套查詢后放在一起顯示。數據的匯總統計查詢。通過單表查詢或多表的關聯查詢對相應的數據行匯總和統計。2.從系統的管理應用角度分析:
學生基本信息查詢。 學生成績查詢。 學生選課信息查詢。295.3簡單查詢任務:掌握SELECT語句的基本語法,按查詢需求,應用WHERE條件及各關鍵字實現對“高職院校教學管理系統”的各類基本數據查詢。
6.3.1認識SELECT語句6.3.2最基本的SELECT語句6.3.3數據匯總及空值查詢6.3.4使用WHERE進行條件查詢6.3.5使用ORDERBY排序查詢結果6.3.6使用GROUPBY分組統計6.3.7使用COMPUTEBY顯示子集明細6.3.8使用查詢結果創建新表6.3.9使用UNION聯合多個查詢305.3.1認識SELECT語句使用T-SQL的SELECT語句從一個或多個表或視圖中,對存在于數據庫中的數據按照特定的組合、條件表達式和次序進行查詢,并可對數據進行篩選、分組、統計、排序等處理。基本語法:SELECT[ALL|DISTINCT|TOPn|TOPnPERCENT]select_list[INTOnew_table_name]FROMtable_list[WHEREsearch_conditions][GROUPBYgroup_by_list][HAVINGsearch_conditions][ORDERBYorder_list[ASC|DESC]][COMPUTEaggregate_functions[BYcompute_by_list]]各子句說明
SELECT:關鍵字,表示從數據庫中查詢數據。
ALL|DISTINCT|TOPn|TOPnPERCENT:關鍵字,對查詢結果集的數據行進行控制。
select_list:需要在結果集中顯示的列,是由逗號分隔的表字段或表達式列表。
INTOnew_table_name:將查詢結果集存放到一個新創建的表中。
FROMtable_list:指定要查詢的表或視圖的數據源列表。
WHEREsearch_conditions:指定查詢時的篩選條件。
GROUPBYgroup_by_list:按照指定的列對結果集進行分組。HAVINGsearch_conditions:指定用于分組后的篩選條件。
ORDERBYorder_list[ASC|DESC]:指定結果集需要依據哪些列來進行排序后顯示。
COMPUTEaggregate_functions[BYcompute_by_list]:對查詢結果集中的所有記錄進行匯總統計,并顯示所有參加匯總統計的詳細子集,即統計明細。315.3.2最基本的SELECT語句最簡單的查詢是不附加任何查詢條件,即只由必須的SELECT和FROM子句組成,而不使用WHERE、GROUPBY、HAVING、ORDERBY等其他可選的子句。基本語法如下:SELECT*|column_name[,....n]FROMtable_name;例:從表student_info中查詢出全體學生的學號、姓名、性別和班級等基本信息。代碼如下:SELECTsno,sname,ssex,classnoFROMstudentGO需要說明的是:在SELECT關鍵字后出現的列名順序決定了查詢結果集中列的順序。當SELECT關鍵字后用“*”,則顯示數據源中所有列,且顯示列序為數據表中列的定義順序。通過命名別名的方式改變結果集中列的標題,有“'列標題名'=列名”和“列名AS'列標題'”兩種方式。32【例5-2】從表student中查詢出全體學生的詳細信息。SELECT*FROMstudentGO【例5-3】從表student中查詢出全體學生的學號、姓名、性別和班級等基本信息。SELECTsno,sname,ssex,classnoFROMstudentGO【例5-4】從表student中查詢出所有學生的姓名、性別、學號、班級等基本信息,并用相應的中文標題顯示。SELECT'姓名'=sname,'性別'=ssex,snoAS'學號',classnoAS'班級'FROMstudentGO5.3.2最基本的SELECT語句335.3.3數據匯總及空值查詢通過使用SQL的集合函數可以對數據進行各種統計,大大簡化了數據的查詢。【例5-5】
從表student中查詢出全體學生的姓名和年齡。代碼如下:SELECTsnameAS'姓名',YEAR(GETDATE())-YEAR(birthday)AS'年齡'FROMstudentGO
提示:YEAR(GETDATE())-YEAR(birthday)是一個計算列,取得系統日期中的年份,減去學生出生日期列中的年份,即年齡。34【例5-6】從student中統計當前學生人數。Selectcount(*)Fromstudent35【例5-7】從表student中查詢出所有學生的民族信息。代碼如下:圖5-6學生的民族信息SELECTDISTINCTnationalityFROMstudentGO【例5-8】從表student_teacher_course中查詢出最高分和最低分。代碼如下:SELECTMIN(grade),MAX(grade)FROMstudent_teacher_courseGO【例5-9】從表teacher中查詢出教師及其職稱,如果職稱為空,則默認顯示為“講師”。代碼如下:SELECTtname,ISNULL(professionaltitle,'講師')FROMteacherGO5.3.3數據匯總及空值查詢
提示:教師職稱的值為NULL時,通過ISNULL()函數進行了特殊處理。365.3.4使用WHERE進行條件查詢用戶可以使用WHERE子語句實現從表中篩選出滿足特定條件的一部分記錄。WHERE子語句中常用的查詢條件見書表5-7。1.基于比較運算的WHERE子句【例5-10】從表student中查詢出2年前入學的所有學生的詳細信息。代碼如下:SELECT*FROMstudentWHEREentertime<=DATEADD(year,-2,GETDATE())GO
提示:①進行條件比較的可以是表中的單個列,也可以是計算列或函數。②字符串類型或日期時間類型的列,使用比較條件時,要用單引號引起來。③
WHERE子句中使用的字段也可以出現在SELECT關鍵字中。374.基于LIKE關鍵字的WHERE子句當只知道查詢對象的部分值且不知道準確形式的時候,就要使用LIKE運算符和通配符相匹配的模糊查詢,見書表5-8和5-9。【例5-11】從表student中查詢出姓劉的學生信息。代碼如下:SELECT*FROMstudentWHEREsnameLIKE‘劉%’GO5.3.4使用WHERE進行條件查詢385.基于空值判斷的WHERE子句空值用NULL表示,它是一個符號,既不等于0,也不是空格,不能進行算術運算。【例5-12】從student中查詢沒有登記家庭住址的學生信息。Select*FromstudentWherehomeisnullgo5.3.4使用WHERE進行條件查詢
建議:不要使用邏輯運算符默認的優先級順序,而是采用括號來明確需要的執行順序,以增強程序的可讀性。396.多個條件的組合查詢【例5-13】從表student中查詢出家住“濟南”或名字為“王小平”的少數民族學生的信息。代碼如下:SELECT*FROMstudentWHERE(nationality!='漢')AND(homeLIKE'%濟南%'ORsnameLIKE'王小平')GO405.3.5使用ORDERBY排序查詢結果使用ORDERBY指定對最終的查詢結果按照一個或多個列進行升序(ASC)或降序(DESC)排列后顯示。默認為升序,即ASC,可以缺省。語法為:ORDERBY{列名
[ASC|DESC]}[,…n]【例5-14】從表student_teacher_course中查詢成績最高的前3條記錄。代碼如下:SELECTTOP3*FROMstudent_teacher_courseORDERBYgradeDESCGO提示:本例中,TOP關鍵字可指定返回查詢結果中的前n行,或前一個百分數的行數。415.3.6使用GROUPBY分組統計1.不含條件的分組統計GROUPBY子句與集合函數一起,將查詢結果按某一列或多列的取值進行分組,列的取值相同的行為一組,對每一組進行統計。基本語法為:GROUPBY列名[,…][HAVING分組條件表達式]【例5-15】統計各個班的學生人數。SELECTclassno,count(sno)AS人數FROMstudentGROUPBYclassnoGO42【例5-15】統計表major_course中各個專業的“專業核心”課門數。代碼如下:SELECTmajorno,count(cno)AS門數FROMmajor_courseWHEREtype='專業核心'GROUPBYmajornoGO435.3.6使用GROUPBY分組統計2.使用HAVING子句設置分組條件“HAVING分組條件表達式”用來對分組后生成的中間結果集進行條件篩選。【例5-16】對表student_teacher_course中各學生的考試成績進行統計,查詢出平均分及格的學生的學號和平均成績。代碼如下:SELECTsno,AVG(grade)AS'平均成績'FROMstudent_teacher_courseGROUPBYsnoHAVINGAVG(grade)>=60GO44使用COMPUTEBY子句既能瀏覽到各個組子集的詳細數據,又能顯示這些詳細數據的統計結果。基本語法:COMPUTE集合函數[,…][BY列名
[,…]]5.3.7使用COMPUTEBY顯示子集明細DISTINCT關鍵字不允許同集合函數一起使用。
COMPUTEBY子句中可以使用多個集合函數,且與SELECTINTO子句不能放在一起使用。
COMPUTEBY子句中不出現“BY列名”,表示對全部信息進行分組,即是對一個表數據的總計。
COMPUTEBY子句中的列必須在SELECT子句后的選擇列表中。“BY列名”指定的列必須與ORDERBY子句指定的列相同,或是它的子集,且必須具有相同的從左到右的順序【例5-17】從表student_teacher_course中查詢所有學生的考試成績,并統計每門課程的總成績和平均成績。代碼如下:SELECT*FROMstudent_teacher_courseORDERBYcnoCOMPUTESUM(grade),AVG(grade)BYcnoGO455.3.8使用查詢結果創建新表SELECTINTO子句的作用是在查詢的基礎上創建新表,并將查詢結果插入新表。表中的列名、列順序、列數據類型以及表中的數據行都來自于查詢結果集。可以指定創建臨時表或永久表。若創建臨時表,則必須在表名前加“#”(局部臨時表)或“##”(全局臨時表),臨時表將創建在tempdb數據庫中。如果沒有指定“#”或“##”,則在當前數據庫中創建永久表。465.3.8使用查詢結果創建新表【例5-18】創建表名為temp_ssc的臨時表,該臨時表用于存放考試成績90分以上的學生的學號、姓名、課程號和考試成績。之后從該臨時表中查詢信息。代碼如下:SELECTa.sno,a.sname,o,b.gradeINTO#temp_sscFROMstudentajoinstudent_teacher_coursebONa.sno=b.snoWHEREb.grade>90GOSELECT*FROM#temp_sscGO475.3.9使用UNION聯合多個查詢UNION運算符將兩個或多個查詢結果組合為一個結果集,該結果集包含查詢的全部行。語法如下:select_statementUNION[ALL]selectstatement[UNION[ALL]selectstatement][…n]【例5-33】查詢選修了課程1或者選修了課程2的學生。
SELECTSnoFROMStudent_courseWHERECno='1'UNIONSELECTSnoFROMStudent_courseWHERECno='2';
使用UNION組合查詢時需要注意以下幾點:(1)UNION聯合的所有查詢語句必須具有相同的列,且數據類型必須兼容。(2)合并后結果集的列名使用第一個SELECT語句中的列標題。若要定義列標題,必須在第一個SELECT語句中定義。若要對聯合查詢結果排序,也必須使用第一個SELECT語句中的列。(3)在包括多個查詢的UNION語句中,其執行順序是自左至右,而使用括號可以改變這一執行順序。(4)如果要將合并后的結果集保存到一個新表中,INTO語句必須放在第一個SELECT語句中。(5)只可以在最后一條SELECT語句中使用ORDERBY和COMPUTE子句。485.4連接查詢
任務:理解內連接、自連接、外連接和交叉連接的含義,應用內連接,外連接和交叉連接對“高職院校教學管理系統”進行數據查詢。5.4.1使用內連接查詢數據5.4.2使用外連接查詢數據5.4.3使用交叉連接查詢數據49連接查詢連接查詢是涉及到兩個或多個表之間的關聯查詢,連接關系的建立有以下兩種方式。①在WHERE子句中建立連接關系,基本語法如下:
FROMjoin_tablejoin_typejoin_tableWHEREjoin_condition②在FROM子句中建立連接關系,基本語法如下:
FROMjoin_tablejoin_typejoin_tableONjoin_condition其中:①join_table指定參與連接操作的表。②join_type指定連接類型,包括內連接、外連接和交叉連接三種。③join_condition指定多個連接表之間的連接條件505.4.1使用內連接查詢數據
內連接是通過INNERJOIN關鍵字或者JOIN關鍵字把多表進行連接。內連接將多個表中都滿足條件的記錄聯合成一條新記錄。如果一個表中的某條記錄按照連接條件在另外一個表中沒有找到任何匹配的記錄,則這條記錄就不會出現在結果集中。內連接查詢的基本語法如下:
SELECT<select_list>FROM<table1>[INNER]JOIN<table2>ON{<table1>.<column_name><比較運算符><table2>.<column_name>}[,…]515.4.1使用內連接查詢數據
在使用內連接進行數據查詢的時候,需要注意以下幾點:(1)可以在FROM子句指定表的同時定義表的別名,格式為“表名[AS]表別名”。(2)當一個表與它自身進行連接操作時,稱為表的自連接(3)如果多個表中有相同名稱的字段時,在SELECT后面指定字段名時必須加上表名(或表別名)作為前綴,即用“表名.列名”或“表別名.列名”表示。(4)如果在FROM子句中為表定義了別名后,則在SELECT關鍵字后以及WHERE、ORDERBY等各個子句中,都必須使用“表別名.列名”格式,而不允許再使用“表名.列名”格式。(5)進行連接查詢的多表之間必然存在主鍵和外鍵關系,只要主外鍵關系列出,就可以確定連接條件。Course1表課程號Cno課程名Cname先行課Pcno1234567數據庫數學信息系統操作系統數據結構數據處理PASCAL語言51676查詢每一門課的間接先修課(即先修課的先修課)SELECTa.Cno,b.pcnoFROMCourse1a,Course1bWHEREa.pcno=o【例5-19】在表student_teacher_course中,查詢與學號為2010010001的同學選修了相同課程的其他同學的成績信息。代碼如下:SELECTDISTINCTa.sno,o,a.gradeFROMstudent_teacher_coursea,student_teacher_coursebWHEREo=oANDa.sno!='2010010001'ANDb.sno='2010010001'GOSELECTDISTINCTa.sno,o,a.gradeFROMstudent_teacher_courseajoinstudent_teacher_o=owherea.sno!='2010010001'ANDb.sno='2010010001'GO5556SELECTDISTINCTa.sno,o,a.gradeFROM
student_teacher_courseajoinstudent_teacher_o=oanda.sno!='2010010001'andb.sno='2010010001'GO57【例5-20】查詢各個學生的學號、姓名、課號和成績。Selecta.sno,a.sname,cno,b.gradeFromstudentainnerjoinstudent_teacher_coursebOna.sno=b.snogo【例5-21】查詢各個選課學生的姓名、所選課名和成績。selectsname,cname,gradefromstudentainnerjoinstudent_teacher_coursebona.sno=o=o595.4.2使用外連接查詢數據(1)左外連接(leftouterjoin)的結果集返回了左表中的所有匹配行。(2)右外連接(rightouterjoin)和左外連接相反,它將返回右表的所有匹配行。(3)全外連接(fullouterjoin)則返回左表和右表中的所有匹配行。
【例5-22】左外連接表student和student_teacher_course,查詢各個學生的學號、姓名、課號和成績。Selecta.sno,a.sname,cno,b.gradeFromstudentaleftouterjoinstudent_teacher_coursebOna.sno=b.snogo615.4.3使用交叉連接查詢數據交叉連接(CROSSJOIN)指在進行多表查詢時不指定任何連接條件,它返回連接表中所有數據行的笛卡爾積,結果集中的數據行數為第一個表中符合查詢條件的數據行乘以第二個表中符合查詢條件的數據行。625.5嵌套查詢
任務:理解嵌套查詢的概念及語法,使用比較運算符及IN或NOTIN、EXISTS或NOTEXISTS謂詞對“高職院校教學管理系統”進行數據查詢。
5.5.1使用比較運算符連接的嵌套查詢5.5.2使用IN謂詞連接的嵌套查詢5.5.3使用EXISTS謂詞連接的嵌套查詢63
嵌套查詢
在SELECT語句的WHERE或HAVING子句中嵌套另一個SELECT語句的查詢稱為嵌套查詢,又稱子查詢。嵌套查詢還可以嵌套在INSERT、UPDATE、DELETE語句或其他嵌套查詢中。嵌套查詢的執行流程是,首先執行內部嵌套的子查詢語句,查詢的結果并不被顯示,而是傳遞給外層的SELECT語句作為該查詢語句的查詢條件使用。在不影響理解的情況下,也可以稱子查詢形成的結果作為父查詢的條件。嵌套查詢可以最多嵌套32層。645.5.1使用比較運算符連接的嵌套查詢使用比較運算符連接SELECT子查詢時,子查詢只能是單列、單值子查詢語句。【例5-23】查詢與“李麗”在同一個班級學習的學生。此查詢要求可以分步來完成:①確定“李麗”所在班號SELECTclassnoFROMStudentWHERESname='張華';查詢結果:1001②查找所有5班的學生。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年農業職業經理人考試與國際接軌試題及答案
- 福建事業單位考試成功因素試題及答案
- 2024江津中考化學試題及答案
- 園藝師考試中的植物搭配技巧試題及答案
- 智庫研究考試題及答案
- 2024-2025學年廣東省深圳市龍崗區九年級中考一模數學試題及答案
- 花藝師職業發展的完整路徑與2024年考試的聯系與影響分析試題及答案
- 福建事業單位考試職業素養與基礎能力的關系分析試題及答案
- 深入調研農業經理人考試的行業需求試題及答案
- 腦梗護理考試題及答案
- 電纜溝、電纜管、電纜井專項施工方案
- 《人工智能技術基礎》課件-第六章 知識圖譜
- 2025年山東省濟南市市中區中考物理一模試卷(無答案)
- (三模)吉林市2025屆高三第三次模擬測試 英語試卷(含答案詳解)
- 2024-2030年中國驅蚊用品行業市場深度分析及投資策略研究報告
- 廣東省深圳市寶安區10校聯考2023-2024學年八年級下學期4月期中物理試題(含答案)
- 商業秘密保護:內外勾結型侵犯行為的司法認定分析
- 2024年遼寧沈陽地鐵集團有限公司所屬公司招聘筆試真題
- 2025年全國中小學生安全教育日專題
- 2025年電子設備裝接工崗位職業技能資格證考試題(附答案)
- 2025年河南航空港發展投資集團有限公司社會招聘45人筆試參考題庫附帶答案詳解
評論
0/150
提交評論