《SQL查询语句大全》由会员分享,可在线阅读,更多相关《SQL查询语句大全(68页珍藏版)》请在金锄头文库上搜索。
1、第第4章章查询与视图查询与视图4.1SQLSQL语言简介语言简介4.2SELECT数据访问基本方法数据访问基本方法4.3条件检索的条件检索的SELECT语句语句4.4从多张表检索的从多张表检索的SELECT语句语句4.5UnionUnion操作和子查询语句操作和子查询语句4.6SQLSQL常用函数及其使用方法常用函数及其使用方法14.1SQLSQL语言简介语言简介1.SQL(StructuredQueryLanguage):结构化查询语结构化查询语言,是一种介于关系代数与关系运算之间的语言,主要功能言,是一种介于关系代数与关系运算之间的语言,主要功能包括查询、操纵、定义和控制等方面,是一个通用
2、的、功能包括查询、操纵、定义和控制等方面,是一个通用的、功能极强的关系数据库语言。极强的关系数据库语言。2.Transact-SQL的组成的组成3.1)数据定义语言)数据定义语言(DDLDataDefinitionLanguage):用来建立数据库、数据库对象。如用来建立数据库、数据库对象。如Createtable、view等。等。4.2)数据操纵语言)数据操纵语言(DMLDataManipulationLanguage):用来操纵数据库中的数据的命令。如用来操纵数据库中的数据的命令。如select、insert、update、delete等。等。5.3)数据控制语言)数据控制语言(DCLDa
3、taControlLanguage):用来用来控制数据库组建的存取权限等。如控制数据库组建的存取权限等。如Grant、Revoke等。等。6.4)流程控制语言)流程控制语言(FCLFlowControlLanguage):用来用来设计应用程序的语句。如设计应用程序的语句。如if、while、case等。等。7.5)其他语言要素)其他语言要素(ALEAdditionallanguageElement):包括变量、运算符、函数和注解等。包括变量、运算符、函数和注解等。24.2 SELECT数据查询数据查询 SELECT语句的基本格式如下:语句的基本格式如下:SELECTselect_listFRO
4、Mtable_sourceWHEREsearch_conditionGROUPBYgroup_by_expressionHAVINGsearch_conditionORDERBYorder_expressionASC|DESCINTOnew_table3SELECT 子句子句SELECTALL|DISTINCTTOPnPERCENT:=*|table_name|view_name|table_alias.*|column_name|expression|AScolumn_alias|column_alias=expression ,.n 44.2.1表中列的使用方法表中列的使用方法1.选择所有
5、字段选择所有字段SELECT*FROM表名表名 如:如:use pubsselect * from authors(显示显示authors中的所有信息,全表查询)中的所有信息,全表查询)2.选择部分字段选择部分字段SELECT列名列名1,列名列名2,列名列名nFROM表名表名如:如:usestudentselect学号学号,姓名姓名,性别性别from学生基本情况学生基本情况(显示学生基本情况中学号显示学生基本情况中学号,姓名姓名,性别字段的信息)性别字段的信息)5SELECT语句的使用方式语句的使用方式3.为字段设置别名为字段设置别名SELECT列名列名1as新名新名1,列名列名2as新名新名
6、2,列名列名nas新名新名nFROM表名表名(将选择字段的标题按新的名称显示)将选择字段的标题按新的名称显示)注意:新标题的名称可以有下列方式:注意:新标题的名称可以有下列方式:1)在列表达式后面给出列名在列表达式后面给出列名selectxh学号学号2)用用“=”来连接列表达式来连接列表达式select学号学号=xh3)新标题的名称用单引号、双引号括起来;新标题的名称用单引号、双引号括起来;4)用用AS关键字来连接列表达式和指定的列名关键字来连接列表达式和指定的列名6SELECT语句语句例如:查询例如:查询authors中编号、姓名、电话、地址的信息,可中编号、姓名、电话、地址的信息,可以采用
7、以下方式:以采用以下方式:1.selectau_id编号编号,au_lname姓姓,au_fname名名,phone电话电话,address地址地址fromauthors2.select编号编号=au_id,姓姓=au_lname,名名=au_fname,电电话话=phone,地址地址=addressfromauthors3.selectau_id编号编号,au_lname姓姓,au_fname名名,phone电话电话,address地址地址fromauthors4.selectau_id编号编号,au_lname姓姓,au_fname名名,phone电话电话,address地址地址froma
8、uthors5.selectau_idas编号编号,au_lnameas姓姓,au_fnameas名名,phoneas电话电话,addressas地址地址fromauthors7SELECT语句语句4.在选择列表中使用表达式在选择列表中使用表达式在查询数据时,可以通过运算操作来控制从在查询数据时,可以通过运算操作来控制从一个表中的返回值。一个表中的返回值。例如:查询每个学生的总成绩、平均成绩。例如:查询每个学生的总成绩、平均成绩。select学号学号,姓名姓名,数学成绩数学成绩+语文成绩语文成绩+英英语成绩语成绩as总成绩总成绩,(数学成绩数学成绩+语文成绩语文成绩+英语英语成绩成绩)/3as
9、平均成绩平均成绩from学生基本情况学生基本情况8SELECT语句语句4.消除字段数据的重复值消除字段数据的重复值在查询数据时,可能会有许多重复的数据。在查询数据时,可能会有许多重复的数据。SQL提供的提供的Distinct关键字,可以从关键字,可以从select语句的结果集中消除重复的数据。语句的结果集中消除重复的数据。例如:例如:1)查询学生来至哪些院系的信息。查询学生来至哪些院系的信息。selectdistinct院系名称院系名称from学生基本情学生基本情况况2)查询有哪些专业的学生。查询有哪些专业的学生。selectdistinct所学专业所学专业from学生基本情学生基本情况况9S
10、ELECT语句语句6.限制记录的行数限制记录的行数在限制查询记录的行数时,可以使用下列方式:在限制查询记录的行数时,可以使用下列方式:1)使用使用topn:返回前返回前n条记录;条记录;2)使用使用topnpercent:返回前返回前n%条记录条记录;3)使用使用setrowcountn:返回前返回前n条记录。条记录。n=0关闭关闭例如:例如:1)显示前)显示前5条记录条记录selecttop5*from学生基本情况学生基本情况2)显示显示20%学生的信息学生的信息selecttop20percent*from学生基本情况学生基本情况3)对所有)对所有select语句,均显示语句,均显示5条记
11、录。条记录。setrowcount5select*from学生基本情况学生基本情况104.2条件子句的使用方法条件子句的使用方法1.条件子句条件子句最常用的条件子句是最常用的条件子句是where和和having,用它们来,用它们来指定一系列条件,执行操作时只返回满足条件的记录。指定一系列条件,执行操作时只返回满足条件的记录。Having通常与通常与Groupby一起使用,用来说明返回一起使用,用来说明返回分组的条件。分组的条件。例如:例如:1)显示男生的相关信息)显示男生的相关信息Select*from学生基本情况学生基本情况where性别性别=男男2)显示男生人数超过)显示男生人数超过10人
12、的院系信息人的院系信息select院系名称院系名称,count(*)as男生人数男生人数from学学生基本情况生基本情况where性别性别=男男groupby院系名称院系名称havingcount(*)10114.2 SELECT语句的查询条件语句的查询条件2算术表达式、比较运算符算术表达式、比较运算符算术运算符有:算术运算符有:+ +、- -、* *、/ /、% %使用算术表达式的一般形式为:使用算术表达式的一般形式为:expressionoperatorexpression比比较较运运算算符符:是是最最为为常常见见的的一一种种条条件件限限制制方方式式,用用于于测测试试两两个个表表达达式式是
13、是否否相相同同,返返回回值值为为True或或False。WHERE子句中允许出现的比较运算符有:子句中允许出现的比较运算符有:=(等等于于)、(大大于于)、=(对对于于等等于于)、(小小于于)、=(小小于于等等于于)、(不不等等于于) 、!=(不等于)(不等于)、!(不大于)、(不大于)、!=80and数学成绩数学成绩=90144.2 SELECT语句的查询条件语句的查询条件4.IN列表搜索条件列表搜索条件IN列列表表搜搜索索条条件件用用于于返返回回与与给给定定的的列列表表中中任任意意一一个值相匹配的记录。格式为:个值相匹配的记录。格式为:条件字段条件字段NOTIN(列表选项列表选项)例如:查
14、询数学成绩为例如:查询数学成绩为70、80、90的信息。的信息。select*from学学生生基基本本情情况况where数数学学成成绩绩in(70,80,90)In列表条件是列表条件是OR的简化形式,上面语句等价于:的简化形式,上面语句等价于:select*from学学生生基基本本情情况况where数数学学成成绩绩=70OR数学成绩数学成绩=80OR数学成绩数学成绩=90154.2 SELECT语句的查询条件语句的查询条件6LIKE匹配模式匹配模式LIKE匹匹配配模模式式是是确确定定条条件件字字符符串串是是否否与与指指定定的的模模式式匹匹配。使用格式:配。使用格式:条件字段条件字段NOTLIK
15、E匹配模式匹配模式SQL中的有效模式包括:中的有效模式包括:%:可匹配任意类型和长度的字符串:可匹配任意类型和长度的字符串。Like Like 李李%_( 下下 划划 线线 ) : 可可 匹匹 配配 任任 何何 单单 个个 字字 符符 。 Like Like 71005_71005_:指定范围或集合中的任何单个字符。:指定范围或集合中的任何单个字符。Like a-dLike a-d:不属于指定范围或集合的任何单个字符:不属于指定范围或集合的任何单个字符例如:例如:1)查询所有姓)查询所有姓“张张”的学生信息的学生信息select*from学生基本情况学生基本情况where姓名姓名like张张%
16、164.2 SELECT语句的查询条件语句的查询条件6NULL搜索条件搜索条件空空值值比比较较的的关关键键字字是是ISNULL或或 ISNOTNULL。其其中中NULL表表示示字字段段的的数数据据未未知知或或不不确确定。格式为:定。格式为:表达式表达式 ISNULL 或或 表达式表达式ISNOTNULL例如:查询缺少数学成绩的学生信息。例如:查询缺少数学成绩的学生信息。select*from学学生生基基本本情情况况where数数学学成成绩绩isnull17查询示例表查询示例表18练习讨论练习讨论1.按按10%的比例显示本专业的男生信息;的比例显示本专业的男生信息;2.查询查询“管理学院管理学院
17、”专业分布情况;专业分布情况;3.查询本专业学生来自哪些省份;查询本专业学生来自哪些省份;4.查询英语不及格学生的信息,显示学号、姓名、专业、英查询英语不及格学生的信息,显示学号、姓名、专业、英语原成绩、英语语原成绩、英语+10、英语、英语*1.1等字段信息;等字段信息;5.显示管理学院学生中,不姓显示管理学院学生中,不姓“刘刘”和和“张张”的学生信息;的学生信息;6.查询查询“数学数学”在在65-75之间,而之间,而“英语英语”不在不在70-90之间之间的学生信息;的学生信息;7.查询查询“管理学院、能源学院、机械学院、人文学院管理学院、能源学院、机械学院、人文学院”学号学号在在01-07之
18、间的学生信息。之间的学生信息。8.将学生的将学生的“学号、姓名、性别、身份证号学号、姓名、性别、身份证号”作为一列、作为一列、“院系名称、专业院系名称、专业”作为一列,各数据之间用作为一列,各数据之间用“,”分隔;列分隔;列名分别为名分别为“基本信息基本信息”、“隶属关系隶属关系”进行显示;进行显示;9.查询总成绩查询总成绩、=、(select avg(数学成绩数学成绩) FROM 学生基本情况学生基本情况 )思考:思考:1)如何查询本专业大学英语成绩)如何查询本专业大学英语成绩=60且低且低于平均分的学生信息?于平均分的学生信息?2)统计管理学院各专业高等数学低于平均分的人数。统计管理学院各
19、专业高等数学低于平均分的人数。3)查询大学英语成绩最高分的学生信息。)查询大学英语成绩最高分的学生信息。39Exists子查询子查询3)使用)使用Exists的子查询的子查询使用使用Exists(或(或NotExists)引入子查询时,就相)引入子查询时,就相当于进行一次存在测试。当于进行一次存在测试。外部查询的外部查询的Where子句测试子句测试子查询返回的行是否存在。子查询返回的行是否存在。子查询实际上不产生任何子查询实际上不产生任何数据,它只返回数据,它只返回True或或False。例如:查询成绩表中女生的学习成绩。例如:查询成绩表中女生的学习成绩。SELECT*FROM成绩表成绩表 W
20、here exists(select * FROM 学生基本情况学生基本情况 where 学号学号=成绩表成绩表.学号学号 and 性别性别=女女)思考:思考:1)如何查询管理学院的学生成绩?)如何查询管理学院的学生成绩?2)查询本专业高等数学不及格的学生信息?)查询本专业高等数学不及格的学生信息?40练习讨论练习讨论数据表名:数据表名:JBQK数据表名:数据表名:CJB41练习讨论练习讨论n根据根据JBQK表、表、CJB表完成下列查询:表完成下列查询:n1.查询高等数学成绩高于平均成绩的学生信查询高等数学成绩高于平均成绩的学生信息,显示学号、姓名、专业、高等数学等;息,显示学号、姓名、专业、
21、高等数学等;n2.查询信息管理专业男生的高等数学成绩、查询信息管理专业男生的高等数学成绩、电子商务专业女生的高等数学成绩、能源学院电子商务专业女生的高等数学成绩、能源学院所有学生的数学成绩,显示显示学号、姓名、所有学生的数学成绩,显示显示学号、姓名、性别、院系、专业、高等数学等,按院系、专性别、院系、专业、高等数学等,按院系、专业排序;业排序;n3.查询与查询与“刘文东刘文东”同专业的学生信息,显同专业的学生信息,显示显示学号、姓名、专业、各门课程成绩。示显示学号、姓名、专业、各门课程成绩。42基于查询的数据表基于查询的数据表1基于查询生成新的数据表基于查询生成新的数据表如果需要将查询结果保存
22、下来,使用如果需要将查询结果保存下来,使用INTO子子句可以生成一个新表并将结果保存在这个新的句可以生成一个新表并将结果保存在这个新的数据表中。数据表中。命令基本格式:命令基本格式:Select选择字段表选择字段表Into新的表名新的表名FROM已有的表已有的表where条件条件例如:例如:1)将)将“学生基本情况学生基本情况”表复制成表复制成jbqkSelect * Into jbqk from 学生基本情况学生基本情况432)统计各个院系英语成绩的平均分、最高分、最低分、考试统计各个院系英语成绩的平均分、最高分、最低分、考试人数,结果放在人数,结果放在Eng_tj表。表。SELECT 学生
23、基本情况学生基本情况.院系名称院系名称, AVG(成绩表成绩表.大学英语大学英语) AS 英语平均英语平均, MAX(成绩表成绩表.大学英语大学英语) AS 英语最高英语最高, MIN(成绩表成绩表.大学英语大学英语) AS 英语最低英语最低, COUNT(*) AS 考试人数考试人数INTO Eng_tjFROM 学生基本情况学生基本情况 INNER JOIN 成绩表成绩表 ON 学生基本情况学生基本情况.学号学号 = 成绩表成绩表.学号学号GROUP BY 学生基本情况学生基本情况.院系名称院系名称思考:思考:1)将管理学院学习成绩前)将管理学院学习成绩前10名学生的信息保存到数名学生的信
24、息保存到数据表据表gl_10中,只保存学号、姓名、专业、各门课程成绩。中,只保存学号、姓名、专业、各门课程成绩。2)如何将本专业不及格学生的信息保存在数据表)如何将本专业不及格学生的信息保存在数据表bjg_xs?,保存学号、姓名、专业、各门课程成绩。,保存学号、姓名、专业、各门课程成绩。3)将)将jbqk表的结构复制到表的结构复制到jb_jg中。中。44将查询结果插入数据表将查询结果插入数据表2向已有表插入数据向已有表插入数据用用InsertIntoSelect语句,可以将一个子语句,可以将一个子查询的结果添加到数据表中。查询的结果添加到数据表中。命令格式:命令格式:InsertInto数据表
25、数据表Select查询查询例如:创建临时数据表例如:创建临时数据表stu_1,存放从基本,存放从基本情况表、成绩表中查询出来的学号、姓名、性情况表、成绩表中查询出来的学号、姓名、性别、年龄、总成绩、平均成绩等信息。别、年龄、总成绩、平均成绩等信息。45create table #stu_1(学号学号 char(8),姓名姓名 nchar(4),性别性别 nchar(1),年龄年龄 tinyint,总成绩总成绩 int,平均成绩平均成绩 decimal(5,2)goinsert into #stu_1 select jbqk.学号学号,jbqk.姓名姓名,jbqk.性别性别,year(getda
26、te()-year(出生日期出生日期),cjb.高等数学高等数学+cjb.大学大学英语英语+cjb.计算机基础计算机基础+cjb.管理学管理学,(cjb.高等数学高等数学+cjb.大学英语大学英语+cjb.计算机基础计算机基础+cjb.管理学管理学)/4from 学生基本情况学生基本情况 jbqk inner join 成绩表成绩表 cjb on jbqk.学号学号=cjb.学号学号goselect * from #stu_1思考:如何将信息管理、电子商务专业学习成绩前思考:如何将信息管理、电子商务专业学习成绩前5名的学名的学生信息放到与基本情况表结构类似的数据表生信息放到与基本情况表结构类似
27、的数据表inf_ec中?中?46子查询修改记录子查询修改记录3用子查询修改记录用子查询修改记录Update语句中,语句中,Set子句、子句、Where子句均可以使用子查询。子句均可以使用子查询。例如:在基本情况表中添加字段例如:在基本情况表中添加字段“第第1学期总分学期总分”、“第第1学期平均学期平均”,并修改,并修改这些字段的值。这些字段的值。alter table 学生基本情况学生基本情况 add 第第1学期总分学期总分 smallint,第第1学期平均学期平均 decimal(5,2)goupdate 学生基本情况学生基本情况 set 第第1学期总分学期总分=(select cjb.高等
28、数学高等数学+cjb.大学英语大学英语+cjb.计算机基础计算机基础+cjb.管理学管理学 from 成绩表成绩表 cjb where 学生基本情况学生基本情况.学号学号=cjb.学号学号), 第第1学期平均学期平均=(select (cjb.高等数学高等数学+cjb.大学英语大学英语+cjb.计算机基础计算机基础+cjb.管理学管理学)/4 from 成绩表成绩表 cjb where 学生基本情况学生基本情况.学号学号=cjb.学号学号)goselect * from 学生基本情况学生基本情况思考:思考:1)对本专业高等数学不及格的学生,将数学成绩提高)对本专业高等数学不及格的学生,将数学成
29、绩提高15%;2)将不是本专业学生的各门课程成绩清空;)将不是本专业学生的各门课程成绩清空;47子查询删除记录子查询删除记录4用子查询删除记录用子查询删除记录Delete命令的命令的where子句可以使用子查询来从数据表中删子句可以使用子查询来从数据表中删除相关记录。除相关记录。例如:从基本情况表、成绩表中删除例如:从基本情况表、成绩表中删除“男生男生”的相关记录。的相关记录。delete from 成绩表成绩表 where exists(select * from 学生基学生基本情况本情况 jbqk where 成绩表成绩表.学号学号=jbqk.学号学号 and jbqk.性别性别=男男)g
30、odelete from 学生基本情况学生基本情况 where 性别性别=男男goselect * from 学生基本情况学生基本情况select * from 成绩表成绩表思考:将本专业学生的成绩备份到思考:将本专业学生的成绩备份到dele_bak,并从,并从cjb中删中删除;同时在除;同时在jbqk表中添加字段表中添加字段Dele_flag、dele_table,并,并给给dele_flag赋值赋值1、给、给dele_table赋值备份表的名称。赋值备份表的名称。48SQL查询的增强功能查询的增强功能1.COMPUTE子句子句2.使用使用COMPUTE和和COMPUTEBY子句既能浏览子句
31、既能浏览详细数据又可看到统计的结果。详细数据又可看到统计的结果。3.主要功能:主要功能:4.1)生成合计作为附加的汇总放在结果集的最后。)生成合计作为附加的汇总放在结果集的最后。5.2)当与)当与BY一起使用时,则在结果集生成控制中一起使用时,则在结果集生成控制中断与小计。断与小计。6.3)同一查询内可同时用)同一查询内可同时用COMPUTE和和COMPUTEBY子句。子句。7.4)如果使用)如果使用COMPUTEBY,则必须使用,则必须使用ORDERBY。49COMPUTE子句子句其语法形式为:其语法形式为:COMPUTE聚合函数聚合函数(column_name),nBYcolumn_nam
32、e,n注意:注意:nCOMPUTEBY子句不能与子句不能与SELECTINTO子句一起使用。子句一起使用。nCOMPUTE子句中的列必须出现在子句中的列必须出现在SELECT子句的列表中。子句的列表中。nCOMPUTEBY表示按指定的列进行明细汇总,使用表示按指定的列进行明细汇总,使用BY关键字时必须同时使用关键字时必须同时使用ORDERBY子句,并且子句,并且COMPUTEBY后出现的列必须具有与后出现的列必须具有与ORDERBY后出现的后出现的列相同的顺序,且不能跳过其中的列。列相同的顺序,且不能跳过其中的列。例如:如果例如:如果ORDERBY子句按照如下顺序指定排序列:子句按照如下顺序指
33、定排序列:ORDERBYa,b,c则则COMPUTEBY后的列表只能是下面任一种形式:后的列表只能是下面任一种形式:BYa,b,cBYa,bBYa50COMPUTE子句子句应用举例:应用举例:1)对管理学院学生的学号、姓名、高等数学、)对管理学院学生的学号、姓名、高等数学、大学英语、数据库列出明细,并统计高等数学大学英语、数据库列出明细,并统计高等数学平均分、最高分及人数;平均分、最高分及人数;2)对管理学院学生按专业列出学号、姓名、)对管理学院学生按专业列出学号、姓名、专业、高等数学的明细,并统计高等数学的平专业、高等数学的明细,并统计高等数学的平均、最高、最低成绩;均、最高、最低成绩;3)
34、按专业列出高等数学的明细,并统计各专)按专业列出高等数学的明细,并统计各专业的平均、最高、最低成绩;然后计算全校的业的平均、最高、最低成绩;然后计算全校的平均、最高、最低成绩。平均、最高、最低成绩。51WITHROLLUP在在GroupBy子句后使用子句后使用withRollup,将对,将对GroupBy指定的各列产生汇总行。指定的各列产生汇总行。例如:例如:1)统计各专业人数及总人数。)统计各专业人数及总人数。2)按专业统计男、女生人数,并统计专业总)按专业统计男、女生人数,并统计专业总人数及学生的总人数。人数及学生的总人数。3)按学院、专业统计数据库的平均、最高分,)按学院、专业统计数据库
35、的平均、最高分,同时统计各个学院以及全校的平均、最高成绩。同时统计各个学院以及全校的平均、最高成绩。52WITHCube在在GroupBy子句后使用子句后使用withCube,将对,将对GroupBy指定的各列的所有可能组合均产生汇指定的各列的所有可能组合均产生汇总行。总行。例如:按专业统计男、女生人数,并统计专例如:按专业统计男、女生人数,并统计专业总人数及男、女生总人数、全部学生的总人业总人数及男、女生总人数、全部学生的总人数。数。Select所学专业所学专业,性别性别,count(*)as人数人数FromjbqkGroupby所学专业所学专业,性别性别withcube53常用字符串函数常
36、用字符串函数1.ASCII(C):返回字符串最左端字符的返回字符串最左端字符的ASCII值;值;例如:显示字符例如:显示字符A、a、0的的ASCII值值selectascii(A)asA,ascii(a)asa,ascii(0)aszero2.CHAR(N):返回返回n(0-255)对应的字符;对应的字符;例如:显示十进制数例如:显示十进制数65、97、48、32对应的字符对应的字符selectchar(65),char(97),char(48),char(32)3.STR(FLOAT,LEN,DECIMAL):将数转换成字将数转换成字符串;符串;FLOAT:表示要转换的数值;:表示要转换的数
37、值;LEN:转换后的字符串的长度;转换后的字符串的长度;DECIMAL:转换后的字符串中包含的小数位数。转换后的字符串中包含的小数位数。54常用字符串函数常用字符串函数说明:说明:1)若没有给出长度,则对整数部分按默认长度)若没有给出长度,则对整数部分按默认长度10位进行转换;位进行转换;2)若给出的长度太短,则先满足整数部分,然后)若给出的长度太短,则先满足整数部分,然后是小数部分;是小数部分;3)若给出的长度不能满足整数部分的长度,则显)若给出的长度不能满足整数部分的长度,则显示示n个个*。例如:例如:selectstr(123.45),str(123.45,6,2),str(123.45
38、,5,2),str(123.45,3,2),str(123.45,2,2)思考:长度不够时,是否进行四舍五入?思考:长度不够时,是否进行四舍五入?55常用字符串函数常用字符串函数4.SUBSTRING(C,START,LENGTH):截取子串;截取子串;其中:其中:C待截取的字符串;待截取的字符串;START截取字符的起始位置;截取字符的起始位置;LENGTH截取字符的长度。截取字符的长度。例如:例如:SELECTSUBSTRING(12345ABCDEF,1,2),SUBSTRING(12345ABCDEF,5,5),SUBSTRING(12345ABCDEF,6,5),SUBSTRING(
39、12345ABCDEF,10,5),SUBSTRING(12345ABCDEF,12,2)思考:思考:1)位置、长度参数是否可以省略?)位置、长度参数是否可以省略?2)显示基本情况表中,学号)显示基本情况表中,学号01开头的学生信开头的学生信息息3)根据身份证号,显示)根据身份证号,显示1988年出生的学生信息年出生的学生信息56常用字符串函数常用字符串函数4.LEFT(C,LEN):从左边开始截取给定长度从左边开始截取给定长度字符串;字符串;6.RIGHT(C,LEN):从右边开始截取给定长从右边开始截取给定长度字符串;度字符串;7.LEN(C):返回字符串的字符个数(不包括返回字符串的字符
40、个数(不包括尾部空格)尾部空格)8.LTRIM(C):删除字符串左端空格;删除字符串左端空格;9.RTRIM(C):删除字符串右端空格;删除字符串右端空格;10.CAST(表达式表达式as类型类型):将表达式转换为将表达式转换为SQL的某种类型。的某种类型。57字符函数应用举例字符函数应用举例1显示姓名最后一个字为显示姓名最后一个字为“强强”的学生;的学生;select*from学生基本情况学生基本情况where姓名姓名like%强强%goselect*from学生基本情况学生基本情况whereright(rtrim(姓名姓名),1)=强强2显示身份证号带显示身份证号带X的学生信息;的学生信息
41、;select*from学生基本情况学生基本情况where身份证号身份证号like%X%goselect*from学生基本情况学生基本情况whereright(rtrim(upper(身份证号身份证号),1)=X3显示姓名为两个字的学生信息;显示姓名为两个字的学生信息;select*from学生基本情况学生基本情况wherelen(rtrim(姓名姓名)=24将学号、姓名、数学成绩组成一个显示内容;将学号、姓名、数学成绩组成一个显示内容;select学号学号+姓名姓名+str(数学成绩数学成绩,5)as组合显示组合显示from学生基本学生基本情况情况思考:思考:1如何查询姓名仅一个或两个字的学
42、生信息?如何查询姓名仅一个或两个字的学生信息?2如何将学号、姓名、平均成绩进行组合显示?如何将学号、姓名、平均成绩进行组合显示?3如何显示如何显示“管院管院”学生的信息?学生的信息?58字符函数应用举例字符函数应用举例写出下列语句的结果:写出下列语句的结果:1.selectascii(123)+ascii(char(65)+len(str(100+23)+len(ltrim(str(12*10+23+456/1000)aslen12.selectascii(str(456)+ascii(ltrim(str(456)+ascii(rtrim(str(456)aslen23.selectascii
43、(str(456,3)+len(left(管理管理,2)+len(right(学院学院,2)+len(rtrim(str(789.123)aslen34.declares1char(100),s2char(50)sets1=西安科技大学管理学院西安科技大学管理学院sets2=信息管理与信息系统信息管理与信息系统selectsubstring(s1,1,1)+substring(s1,3,1)+substring(s1,5,1)+substring(s2,1,1)+substring(s2,3,1)+char(48)+char(49)go59常用日期时间函数常用日期时间函数Getdate():返
44、回当前系统的日期和时间;返回当前系统的日期和时间;Year(date):返回指定日期的年份;返回指定日期的年份;Month(date):返回指定日期的月份;返回指定日期的月份;Day(date):返回指定日期的某天;返回指定日期的某天;Dateadd(datepart,n,date):在指定日期上加上一在指定日期上加上一段时间,返回新的日期时间;段时间,返回新的日期时间;其中:其中:Datepart:yyyy;mm;dd;ww/wk;hh;mi;ss;Datediff(datepart,startdate,enddate):返回两返回两个日期的日期和时间的差值。个日期的日期和时间的差值。Dat
45、ename(datepart,date):返回指定日期部分的返回指定日期部分的字符串。字符串。60日期时间函数举例日期时间函数举例1)selectdateadd(yyyy,2,getdate()2)select学号学号,姓名姓名,出生日期出生日期,datediff(yy,出生日期出生日期,getdate()as年龄年龄from学生基本情况学生基本情况wheremonth(getdate()=month(出生出生日期日期)3)select2年后的今天是年后的今天是+datename(dw,dateadd(yyyy,2,getdate()as星期星期61日期时间函数举例日期时间函数举例declar
46、eddatetime-声明局部变量声明局部变量setd=getdate()-将系统日期时间赋给变量将系统日期时间赋给变量select今天是今天是+datename(yyyy,d)+年年+datename(mm,d)+月月+datename(dd,d)+日日+datename(hh,d)+时时+datename(mi,d)+分分+datename(ss,d)+秒秒+datename(dw,d)62日期时间函数举例日期时间函数举例说明下列语句的作用:说明下列语句的作用:1.selecttop5姓名姓名,datediff(yy,出生日出生日期期,getdate()as年龄年龄from学生基本情况学生
47、基本情况orderby2desc2.select学号学号,姓名姓名,出生日期出生日期,year(getdate()-year(出生日期出生日期)asagefrom学生基本情况学生基本情况whereyear(出生日期出生日期)1982orderbyagedesc3.select学号学号,姓名姓名,出生日期出生日期from学生基学生基本情况本情况whereyear(出生日期出生日期)between1982and1985orderby出生日期出生日期63日期时间函数举例日期时间函数举例思考:思考:1如何显示下一个月过生日的学生信息?如何显示下一个月过生日的学生信息?2如何显示如何显示2008年年龄正
48、好年年龄正好25岁的学生?岁的学生?3如何显示身份证出生日期与实际出生日期如何显示身份证出生日期与实际出生日期不一致的学生信息?不一致的学生信息?4如何显示闰年出生的学生信息?如何显示闰年出生的学生信息?5列举日期函数的其他用法。列举日期函数的其他用法。64数学函数数学函数1绝对值函数:绝对值函数:Abs(n)返回表达式的绝对值;返回表达式的绝对值;2随机函数:随机函数:Rand()返回返回(0,1)间的随机数间的随机数3指数函数:指数函数:Exp(n)返回返回en;4符号函数:符号函数:Sign(n)返回表达式的符号(返回表达式的符号(N0,返回,返回1;N=0,返回,返回0;N0,返回,返
49、回-1)5对数函数:对数函数:Log(n);Log10(n);6圆周率函数:圆周率函数:Pi();7三角函数:三角函数:Sin();cos();tan();asin();acos();atan()8幂函数:幂函数:Power(x,y);9平方根函数:平方根函数:Sqrt(n);10取整函数:取整函数:floor(n)如:如:selectsign(2),pi(),sqrt(25),log(2.72),log10(10),power(2,5)65数学函数应用数学函数应用数学函数应用:数学函数应用:写出下列数学公式的写出下列数学公式的SQL语句:语句:1)2)产生产生50-100之间的随机数;之间的
50、随机数;3)计算半径为)计算半径为3的圆的面积。的圆的面积。4)随机计算)随机计算sin三角函数值。三角函数值。5)计算计算0,45,90度的度的cos函数值。函数值。6)显示学号为奇数的学生信息。)显示学号为奇数的学生信息。7)显示学号为)显示学号为1,9,17,的学生信息。的学生信息。66综合练习综合练习根据根据jbqk、cjb表快速生成数据表表快速生成数据表jb_cj,字段包括,字段包括学号、姓名、性别、出生日期、院系名称、所学专业、学号、姓名、性别、出生日期、院系名称、所学专业、高等数学、大学英语、数据库、管理学;只保留表结高等数学、大学英语、数据库、管理学;只保留表结构,并完成下列操
51、作:构,并完成下列操作:1)录入)录入“管理学院管理学院”学生信息,只包括学号学生信息,只包括学号,姓名姓名,性别性别,出生日期出生日期,院系名称院系名称,所学专业所学专业,高等数学高等数学,数据库数据库的相关信息;的相关信息;2)录入)录入“机械学院机械学院”学生信息,只包括学号学生信息,只包括学号,姓名姓名,性别性别,出生日期出生日期,院系名称院系名称,所学专业所学专业,大学英语大学英语,管理管理学的相关信息;学的相关信息;3)录入)录入“能源学院能源学院”、“人文学院人文学院”学生信息;学生信息;67综合练习综合练习4)修改)修改“学号学号”的宽度为的宽度为10,并将本专业的学号前,并将
52、本专业的学号前6位改位改为专业的编号、第为专业的编号、第7位为位为1或或2(随机产生)、后两位不变;(随机产生)、后两位不变;5)添加)添加“年龄年龄”字段,并计算每个学生的年龄;字段,并计算每个学生的年龄;6)添加)添加“出生年月出生年月”字段,并按字段,并按“xx年年xx月月xx日日星期星期x”格式显示;并删除格式显示;并删除”出生日期出生日期”字段;字段;7)将高等数学为空的记录,修改为)将高等数学为空的记录,修改为60,85)之间的随机数;之间的随机数;8)将大学英语为空的记录,修改为)将大学英语为空的记录,修改为40,90之间的随机数;之间的随机数;9)将管理学为空的记录,修改为)将管理学为空的记录,修改为70,100之间的随机数;之间的随机数;10)将学号为奇数的学生,各门课程成绩提高)将学号为奇数的学生,各门课程成绩提高5%-10%之之间的随机数。间的随机数。68