SQL Server 数据库的查询和视图.ppt
《SQL Server 数据库的查询和视图.ppt》由会员分享,可在线阅读,更多相关《SQL Server 数据库的查询和视图.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第第4章章 数据库数据库的查询和视图的查询和视图4.1 数据库的查询数据库的查询4.2 视视 图图4.1 数据库的查询数据库的查询下面介绍SELECT语句,它是T-SQL的核心。语法主体格式如下:SELECT/*指定查询结果输出列*/INTO新表/*指定查询结果存入新表*/FROM,./*指定查询源:表或视图*/WHERE/*指定查询条件*/GROUPBY/*指定查询结果分组条件*/HAVING/*指定查询结果分组统计条件*/ORDERBY/*指定查询结果排序顺序*/4.1.1 选择查询结果输出列选择查询结果输出列1选择所有列选择所有列使用“*”表示选择一个表或视图中的所有列。【例4.1】查
2、询pxscj数据库中xsb表的所有记录。T-SQL命令如下:USEpxscjSELECT*FROMxsb4.1.1 选择查询结果输出列选择查询结果输出列执行结果如图4.1所示。4.1.1 选择查询结果输出列选择查询结果输出列2选择一个表中指定的列选择一个表中指定的列可选择一个表中的部分列,各列名之间要以逗号分隔。【例4.2】查询xsb表中计算机专业学生的学号、姓名和总学分。T-SQL命令如下:SELECT学号,姓名,总学分FROMxsbWHERE专业=计算机4.1.1 选择查询结果输出列选择查询结果输出列3定义列别名定义列别名当希望查询结果中的列使用自己选择的列标题时,可以AS更改列标题名,该
3、列标题称为该列的别名。【例4.3】查询xsb表中计算机系同学的学号、姓名和总学分,查询结果中各列的标题分别指定为number、name和mark。T-SQL命令如下:SELECT学号ASnumber,姓名ASname,总学分ASmarkFROMxsbWHERE专业=计算机执行结果如图4.2所示。4.1.1 选择查询结果输出列选择查询结果输出列也可以使用“列别名=表达式”更改列标题。例如:SELECTnumber=学号,name=姓名,mark=总学分FROMxsbWHERE专业=计算机当自定义的列标题中含有空格时,必须使用引号将标题括起来。例如:SELECTStudentnumber=学号,姓
4、名ASStudentname,mark=总学分FROMxsbWHERE专业=计算机4.1.1 选择查询结果输出列选择查询结果输出列4替换查询结果中的数据替换查询结果中的数据在对表进行查询时,有时希望对所查询的某些列得到的数据进行变换。要替换查询结果中的数据,则可使用CASE表达式,格式为:CASEWHEN条件1THEN表达式1WHEN条件2THEN表达式2ELSE表达式END4.1.1 选择查询结果输出列选择查询结果输出列【例4.4】查询xsb表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换,列标题更改为“等级”。若总学分为空值,则替换为“尚未选课”;若总学分小于50,则替
5、换为“不及格”;若总学分在50与52之间,则替换为“合格”;若总学分大于52,则替换为“优秀”。T-SQL命令如下:SELECT学号,姓名,等级=CASEWHEN总学分ISNULLTHEN尚未选课WHEN总学分=50and总学分50分人数FROMxsbWHERE总学分50;GO4.1.2 选择查询条件:选择查询条件:WHERE子句子句1表达式比较表达式比较比较运算符用于比较两个表达式值,共有9个,分别是=(等于)、(小于)、(大于)、=(大于等于)、(不等于)、!=(不等于)、!(不大于)。比较运算的格式为:表达式1比较运算符表达式2其中,“表达式”是除text、ntext和image以外类型
6、的表达式。【例4.11】查询xsb表中通信工程专业总学分大于等于42的同学的情况。T-SQL命令如下:SELECT*FROMxsbWHERE专业=通信工程AND总学分=424.1.2 选择查询条件:选择查询条件:WHERE子句子句2模式匹配模式匹配LIKE谓词用于指出字符串是否与指定的字符串相匹配,返回逻辑值TRUE或FALSE。格式为:表达式NOTLIKE模式串ESCAPE转义符说明:说明:(1)表达式:一般为字符串表达式,在查询语句中可以是列名。(2)模式串:可以使用通配符,表4.2列出了LIKE谓词可以使用的通配符及其说明。(3)转义符:应为有效的SQLServer字符,没有默认值,且必
7、须为单个字符。当模式串中含有与通配符相同的字符时,应通过该字符前的转义符指明其为模式串中的一个匹配字符。使用ESCAPE可指定转义符。(4)NOTLIKE:使用NOTLIKE与LIKE的作用相反。通 配 符说 明%代表倒数_(下画线)代表单个字符 指定范围(如a-f、0-9)或集合(如abcdef)中的任何单个字符指定不属于范围(如 a-f、0-9)或集合(如abcdef)的任何单个字符4.1.2 选择查询条件:选择查询条件:WHERE子句子句【例4.12】查询xsb表中姓“王”且单名的学生情况。T-SQL命令如下,执行结果如图4.9所示。SELECT*FROMxsbWHERE姓名LIKE王_
8、4.1.2 选择查询条件:选择查询条件:WHERE子句子句【例4.13】查询xsb表中学号倒数第5个数字为9,且倒数第1个数在15之间的学生学号、姓名及专业。T-SQL命令如下,执行结果如图4.10所示。SELECT学号,姓名,专业FROMxsbWHERE学号LIKE%9_1-54.1.2 选择查询条件:选择查询条件:WHERE子句子句【例4.13】查询xsb表姓名中倒数第2个字为玉的学生学号、姓名及专业。T-SQL命令如下,执行结果如图4.10所示。SELECT学号,姓名,专业FROMxsbWHERE学号LIKE%玉_4.1.2 选择查询条件:选择查询条件:WHERE子句子句3范围比较范围比
9、较(1)当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为:表达式NOTBETWEEN表达式1AND表达式2当不使用NOT时,若“表达式”的值在“表达式1”与“表达式2”之间(包括这两个值),则返回TRUE,否则返回FALSE;当使用NOT时,返回值刚好相反。【例4.14】查询xsb表中不在1995年出生的学生情况。T-SQL命令如下,执行结果如图4.11所示。SELECT学号,姓名,专业,出生时间FROMxsbWHERE出生时间NOTBETWEEN1995-1-1and1995-12-31也可使用下列命令:SELECT学号,姓名,专业,出生
10、时间FROMxsbWHEREWHEREyear(出生时间)!=19954.1.2 选择查询条件:选择查询条件:WHERE子句子句图4.11执行结果4.1.2 选择查询条件:选择查询条件:WHERE子句子句(2)使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回TRUE,否则返回FALSE。格式为:表达式IN(表达式,)【例4.15】查询xsb表中专业为“软件工程”或“通信工程”学生情况。T-SQL命令如下:SELECT*FROMxsbWHERE专业IN(软件工程,通信工程)下列T-SQL命令等价:SELECT*FROMxsbWHERE专业=计算机OR专业=
11、通信工程4.1.2 选择查询条件:选择查询条件:WHERE子句子句4空值比较空值比较当需要判定一个表达式的值是否为空值时,使用ISNULL关键字,格式为:表达式ISNOTNULL当不使用NOT时,若表达式的值为空值,则返回TRUE,否则返回FALSE;当使用NOT时,结果刚好相反。【例4.16】查询总学分尚不定的学生情况。SELECT*FROMxsbWHERE备注ISNULL4.1.2 选择查询条件:选择查询条件:WHERE子句子句5子查询子查询1)IN子查询子查询IN子查询用于进行一个给定值是否在子查询结果集中的判断,格式为:表达式NOTIN(子查询)当表达式与子查询的结果表中的某个值相等时
12、,IN谓词返回TRUE,否则返回FALSE;若使用了NOT,则返回的值刚好相反。【例4.17】查询选修了课程号为206的课程的学生情况。T-SQL命令如下:SELECT*FROMxsbWHERE学号IN(SELECT学号FROMcjbWHERE课程号=206)本例中,先执行子查询:SELECT学号FROMcjbWHERE课程名=2064.1.2 选择查询条件:选择查询条件:WHERE子句子句【例4.18】查询未选修离散数学的学生学号和姓名。T-SQL命令如下:SELECT学号,姓名FROMxsbWHERE学号NOTIN(SELECT学号FROMcjbWHERE课程号IN(SELECT课程号FR
13、OMkcbWHERE课程名=离散数学)4.1.2 选择查询条件:选择查询条件:WHERE子句子句2)比较子查询)比较子查询这种子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算,格式为:表达式比较运算符ALL|SOME|ANY(子查询)其中,ALL、SOME和ANY说明对比较运算的限制。【例4.19】查询选修了离散数学的学生学号和姓名。T-SQL命令如下:SELECT学号FROMcjbWHERE课程号=(SELECT课程号FROMkcbWHERE课程名=离散数学);4.1.2 选择查询条件:选择查询条件:WHERE子句子句【例4.20】查询比所有计算机系的学生年龄都大的
14、学生。T-SQL命令如下:SELECT*FROMxsbWHERE 出生时间ALL(SELECT出生时间FROMxsbWHERE专业=计算机)【例4.21】查询206课程号成绩不低于101课程号最低成绩的学生学号。T-SQL命令如下:SELECT学号FROMcjbWHERE 课程号=206AND成绩!=50)ASstudentWHERE性别=1执行结果如图4.13所示。4.1.3 指定查询对象:指定查询对象:FROM子句子句【例4.28】在xsb表中查询在1995年1月1日以前出生的学生的姓名和专业。T-SQL命令如下,执行结果如图4.14所示。SELECTstudent.name,studen
15、t.specialityFROM(SELECT*FROMxsbWHERE出生时间=804.1.4 连接连接(2)多表连接。)多表连接。有时,用户所需要的字段来自两个以上的表,那么就要对两个以上的表进行连接,称之为多表连接。【例4.32】查询选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。T-SQL命令如下,执行结果如图4.16所示。SELECTxsb.学号,姓名,课程名,成绩FROMxsb,kcb,cjbWHERExsb.学号=cjb.学号ANDkcb.课程号=cjb.课程号AND课程名=计算机基础AND成绩=804.1.4 连接连接2以以JOIN关键字指定的连接关键
16、字指定的连接T-SQL扩展了以JOIN关键字指定连接的表示方式,使表的连接运算能力有所增强。FROM子句的表示将多个表连接起来。格式如下::=ON|CROSSJOIN|左表源CROSS|OUTERAPPLY右表源|()4.1.4 连接连接说明:(1):准备要连接的表。(2):表示连接类型。格式为::=INNER|LEFT|RIGHT|FULLOUTERJOIN其中,INNER表示内连接,OUTER表示外连接。(3)ON:用于指定连接条件,为连接的条件。(4)APPLY运算符:使用APPLY运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。(5)CROSSJOIN:表示交叉连接。4
17、.1.4 连接连接因此,以JOIN关键字指定的连接有三种类型:内连接、外连接、交叉连接。内连接。指定了INNER关键字的连接是内连接,内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。【例4.33】查询每个学生的情况以及选修的课程情况。T-SQL命令如下:SELECT*FROMxsbINNERJOINcjbONxsb.学号=cjb.学号执行的结果将包含xsb表和cjb表的所有字段(不去除重复字段学号)。【例4.34】查询选修了206课程且成绩在80分以上的学生姓名及成绩。T-SQL命令如下:SELECT姓名,成绩FROMxsbJOINcjbONxsb.学号=cjb.学号WHERE课程
18、号=206AND成绩=804.1.4 连接连接【例4.35】查询选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。T-SQL命令如下:SELECTxsb.学号,姓名,课程名,成绩FROMxsbJOINcjbJOINkcbONcjb.课程号=kcb.课程号ONxsb.学号=cjb.学号WHERE课程名=计算机基础AND成绩=80作为一种特例,可以将一个表与它自身进行连接,称为自连接。【例4.36】查询不同课程成绩相同的学生的学号、课程号和成绩。T-SQL命令如下:SELECTa.学号,a.课程号,b.课程号,a.成绩FROMcjbaJOINcjbbONa.成绩=b.成绩A
19、NDa.学号=b.学号ANDa.课程号!=b.课程号执行结果如图4.17所示。4.1.4 连接连接外连接。指定了OUTER关键字的为外连接,外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。外连接包括以下三种:LEFTOUTERJOIN(左外连接):结果表中除了包括满足连接条件的行外,还包括左表的所有行。RIGHTOUTERJOIN(右外连接):结果表中除了包括满足连接条件的行外,还包括右表的所有行。FULLOUTERJOIN(完全外连接):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。4.1.4 连接连接【例4.37】查询所有学生情况,以及他们选修的课程号。T-SQ
20、L命令如下,执行结果如图4.18所示。SELECTxsb.*,课程号FROMxsbLEFTOUTERJOINcjbONxsb.学号=cjb.学号4.1.4 连接连接【例4.38】查询被选修了的课程的选修情况和所有开设的课程名。SELECTcjb.*,课程名FROMcjbRIGHTJOINkcbONcjb.课程号=kcb.课程号4.1.4 连接连接交叉连接。交叉连接实际上是将两个表进行笛卡儿积运算,结果表是由第一个表的每一行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表的行数之积。【例4.39】列出学生所有可能的选课情况。T-SQL命令如下,执行结果如图4.19所示。SELECT学
21、号,姓名,课程号,课程名FROMxsbCROSSJOINkcb4.1.5 指定查询结果分组方法:指定查询结果分组方法:GROUP BY子子句句这里介绍ISO标准的GROUPBY子句。语法格式如下:GROUPBY|ROLLUP()|CUBE()|GROUPINGSETS()4.1.5 指定查询结果分组方法:指定查询结果分组方法:GROUP BY子子句句【例4.40】在pxscj数据库xsb表中分别用GROUPBYROLLUP、GROUPBYCUBE和GROUPBYGROUPINGSETS对(专业,性别)产生一个结果集。(1)采用)采用GROUP BY ROLLUP。SELECT专业,性别,COU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 数据库的查询和视图 数据库 查询 视图
限制150内