数据库数据查询_第1页
数据库数据查询_第2页
数据库数据查询_第3页
数据库数据查询_第4页
数据库数据查询_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论