SQL复杂查询语句总结_第1页
SQL复杂查询语句总结_第2页
SQL复杂查询语句总结_第3页
SQL复杂查询语句总结_第4页
SQL复杂查询语句总结_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4章章 查询与视图查询与视图 4.1 SQLSQL语言简介语言简介 4.2 SELECT数据访问基本方法数据访问基本方法 4.3 条件检索的条件检索的SELECT语句语句4.4 从多张表检索的从多张表检索的SELECT语句语句4.5 UnionUnion操作和子查询语句操作和子查询语句 4.6 SQLSQL常用函数及其使用方法常用函数及其使用方法4.1 SQLSQL语言简介语言简介 1.SQL (Structured Query Language):结构化查询语言,结构化查询语言,是一种介于关系代数与关系运算之间的语言,主要功能包括是一种介于关系代数与关系运算之间的语言,主要功能包括查询、

2、操纵、定义和控制等方面,是一个通用的、功能极强查询、操纵、定义和控制等方面,是一个通用的、功能极强的关系数据库语言。的关系数据库语言。2.Transact-SQL的组成的组成3.1)数据定义语言)数据定义语言(DDL Data Definition Language):用来建立数据库、数据库对象。如用来建立数据库、数据库对象。如Create table、view等。等。4.2)数据操纵语言)数据操纵语言(DML Data Manipulation Language):用来操纵数据库中的数据的命令。如用来操纵数据库中的数据的命令。如select、insert、update、delete等。等。5

3、.3)数据控制语言)数据控制语言(DCL Data Control Language):用来用来控制数据库组建的存取权限等。如控制数据库组建的存取权限等。如Grant、Revoke等。等。6.4)流程控制语言)流程控制语言(FCL Flow Control Language):用来设用来设计应用程序的语句。如计应用程序的语句。如if、while、case等。等。7.5)其他语言要素)其他语言要素(ALE Additional language Element):包括变量、运算符、函数和注解等。包括变量、运算符、函数和注解等。4.2 SELECT数据查询数据查询 SELECT语句的基本格式如下:

4、语句的基本格式如下:SELECT select_listFROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC | DESC INTO new_table SELECT 子句子句SELECT ALL | DISTINCT TOP n PERCENT := * | table_name | view_name | table_alias .* | column_name | expression | AS

5、column_alias | column_alias = expression ,.n 4.2.1 表中列的使用方法表中列的使用方法 1. 选择所有字段选择所有字段SELECT * FROM 表名表名 如:如:use pubsselect * from authors(显示显示authors中的所有信息,全表查询)中的所有信息,全表查询) 2. 选择部分字段选择部分字段SELECT 列名列名1,列名列名2,列名列名n FROM 表名表名 如:如:use studentselect 学号学号,姓名姓名,性别性别 from 学生基本情况学生基本情况(显示学生基本情况中学号显示学生基本情况中学号,

6、姓名姓名,性别字段的信息)性别字段的信息)SELECT语句的使用方式语句的使用方式3. 为字段设置别名为字段设置别名SELECT 列名列名1 as 新名新名1,列名列名2 as 新名新名2,列名列名n as 新名新名n FROM 表名表名 (将选择字段的标题按新的名称显示)将选择字段的标题按新的名称显示)注意:新标题的名称可以有下列方式:注意:新标题的名称可以有下列方式:1)在列表达式后面给出列名在列表达式后面给出列名 select xh 学号学号2)用用“=”来连接列表达式来连接列表达式 select 学号学号 = xh3)新标题的名称用单引号、双引号括起来;新标题的名称用单引号、双引号括起

7、来;4)用用AS关键字来连接列表达式和指定的列名关键字来连接列表达式和指定的列名 SELECT语句语句例如:查询例如:查询authors中编号、姓名、电话、地址的信息,可中编号、姓名、电话、地址的信息,可以采用以下方式:以采用以下方式:1.select au_id 编号编号,au_lname 姓姓,au_fname 名名,phone 电电话话,address 地址地址 from authors2.select 编号编号=au_id ,姓姓=au_lname ,名名=au_fname ,电话电话=phone ,地址地址=address from authors3.select au_id 编号编

8、号,au_lname 姓姓,au_fname 名名,phone 电话电话,address 地址地址 from authors4.select au_id 编号编号,au_lname 姓姓,au_fname 名名,phone 电话电话,address 地址地址 from authors5.select au_id as 编号编号,au_lname as 姓姓,au_fname as 名名,phone as 电话电话,address as 地址地址 from authorsSELECT语句语句4. 在选择列表中使用表达式在选择列表中使用表达式在查询数据时,可以通过运算操作来控制从在查询数据时,可以

9、通过运算操作来控制从一个表中的返回值。一个表中的返回值。例如:查询每个学生的总成绩、平均成绩。例如:查询每个学生的总成绩、平均成绩。select 学号学号,姓名姓名,数学成绩数学成绩+语文成绩语文成绩+英语英语成绩成绩 as 总成绩总成绩,(数学成绩数学成绩+语文成绩语文成绩+英语成英语成绩绩)/3 as 平均成绩平均成绩 from 学生基本情况学生基本情况SELECT语句语句4. 消除字段数据的重复值消除字段数据的重复值在查询数据时,可能会有许多重复的数据。在查询数据时,可能会有许多重复的数据。SQL 提供的提供的Distinct 关键字,可以从关键字,可以从select 语句的结果集中消除

10、重复的数据。语句的结果集中消除重复的数据。例如:例如:1)查询学生来至哪些院系的信息。查询学生来至哪些院系的信息。select distinct 院系名称院系名称 from 学生基本情学生基本情况况2)查询有哪些专业的学生。查询有哪些专业的学生。select distinct 所学专业所学专业 from 学生基本情学生基本情况况SELECT语句语句6. 限制记录的行数限制记录的行数在限制查询记录的行数时,可以使用下列方式:在限制查询记录的行数时,可以使用下列方式:1)使用使用top n : 返回前返回前n条记录;条记录;2)使用使用top n percent :返回前返回前n%条记录条记录;3

11、)使用使用set rowcount n:返回前返回前n条记录。条记录。n=0关闭关闭例如:例如:1)显示前)显示前5条记录条记录select top 5 * from 学生基本情况学生基本情况2)显示显示20%学生的信息学生的信息select top 20 percent * from 学生基本情况学生基本情况3)对所有)对所有select 语句,均显示语句,均显示5条记录。条记录。set rowcount 5select * from 学生基本情况学生基本情况4.2 条件子句的使用方法条件子句的使用方法1.条件子句条件子句最常用的条件子句是最常用的条件子句是where 和和having,用它

12、们来,用它们来指定一系列条件,执行操作时只返回满足条件的记录。指定一系列条件,执行操作时只返回满足条件的记录。Having 通常与通常与Group by一起使用,用来说明返回一起使用,用来说明返回分组的条件。分组的条件。例如:例如:1)显示男生的相关信息)显示男生的相关信息Select * from 学生基本情况学生基本情况 where 性别性别=男男2)显示男生人数超过)显示男生人数超过10人的院系信息人的院系信息select 院系名称院系名称,count(*) as 男生人数男生人数 from 学学生基本情况生基本情况 where 性别性别=男男 group by 院系名称院系名称 hav

13、ing count(*)104.2 SELECT语句的查询条件语句的查询条件2算术表达式、比较运算符算术表达式、比较运算符算术运算符有:算术运算符有:+ +、- -、* *、/ /、% %使用算术表达式的一般形式为:使用算术表达式的一般形式为:expression operator expression 比较运算符:比较运算符:是最为常见的一种条件限制方是最为常见的一种条件限制方式,用于测试两个表达式是否相同,返回值为式,用于测试两个表达式是否相同,返回值为True 或或False。WHERE子句中允许出现的比较运算符有:子句中允许出现的比较运算符有:=(等于)、(等于)、(大于)、(大于)、

14、=(对于等于)、(对于等于)、(小于)、(小于)、=(小于等于)、(小于等于)、(不等于)(不等于) 、!=(不等于)(不等于) 、!(不大于)、(不大于)、!= 80 and 数学成绩数学成绩=904.2 SELECT语句的查询条件语句的查询条件4.IN 列表搜索条件列表搜索条件IN 列表搜索条件用于返回与给定的列表中任意一列表搜索条件用于返回与给定的列表中任意一个值相匹配的记录。格式为:个值相匹配的记录。格式为:条件字段条件字段 NOT IN (列表选项列表选项) 例如:查询数学成绩为例如:查询数学成绩为70、80、90的信息。的信息。select * from 学生基本情况学生基本情况

15、where 数学成绩数学成绩 in (70,80,90) In列表条件是列表条件是OR的简化形式,上面语句等价于:的简化形式,上面语句等价于:select * from 学生基本情况学生基本情况 where 数学成绩数学成绩 = 70 OR数学成绩数学成绩 = 80 OR 数学成绩数学成绩 = 904.2 SELECT语句的查询条件语句的查询条件6LIKE匹配模式匹配模式LIKE匹配模式是确定条件字符串是否与指定的模式匹匹配模式是确定条件字符串是否与指定的模式匹配。使用格式:配。使用格式:条件字段条件字段 NOT LIKE 匹配模式匹配模式SQL中的有效模式包括:中的有效模式包括:%:可匹配任

16、意类型和长度的字符串:可匹配任意类型和长度的字符串。Like Like 李李%_(下划线):可匹配任何单个字符(下划线):可匹配任何单个字符。Like 71005_Like 71005_ :指定范围或集合中的任何单个字符。:指定范围或集合中的任何单个字符。Like a-dLike a-d:不属于指定范围或集合的任何单个字符:不属于指定范围或集合的任何单个字符例如:例如:1)查询所有姓)查询所有姓“张张”的学生信息的学生信息select * from 学生基本情况学生基本情况 where 姓名姓名 like 张张%4.2 SELECT语句的查询条件语句的查询条件6NULL搜索条件搜索条件空值比较

17、的关键字是空值比较的关键字是 IS NULL或或 IS NOT NULL。其中。其中NULL表示字段的数据未知或不确表示字段的数据未知或不确定。格式为:定。格式为:表达式表达式 IS NULL 或或 表达式表达式IS NOT NULL例如:查询缺少数学成绩的学生信息。例如:查询缺少数学成绩的学生信息。select * from 学生基本情况学生基本情况 where 数学成数学成绩绩 is null查询示例表查询示例表练习讨论练习讨论1.按按10%的比例显示本专业的男生信息;的比例显示本专业的男生信息;2.查询查询“管理学院管理学院”专业分布情况;专业分布情况;3.查询本专业学生来自哪些省份;查

18、询本专业学生来自哪些省份;4.查询英语不及格学生的信息,显示学号、姓名、专业、英语查询英语不及格学生的信息,显示学号、姓名、专业、英语原成绩、英语原成绩、英语+10、英语、英语*1.1等字段信息;等字段信息;5.显示管理学院学生中,不姓显示管理学院学生中,不姓“刘刘”和和“张张”的学生信息;的学生信息;6.查询查询“数学数学”在在65-75之间,而之间,而“英语英语”不在不在70-90之间的之间的学生信息;学生信息;7.查询查询“管理学院、能源学院、机械学院、人文学院管理学院、能源学院、机械学院、人文学院”学号在学号在01-07之间的学生信息。之间的学生信息。8.将学生的将学生的“学号、姓名、

19、性别、身份证号学号、姓名、性别、身份证号” 作为一列、作为一列、“院系名称、专业院系名称、专业”作为一列,各数据之间用作为一列,各数据之间用“,”分隔;列分隔;列名分别为名分别为“基本信息基本信息”、“隶属关系隶属关系”进行显示;进行显示;9.查询总成绩查询总成绩、=、(select avg(数学成绩数学成绩) FROM 学生基本情况学生基本情况 )思考:思考:1)如何查询本专业大学英语成绩)如何查询本专业大学英语成绩=60且低且低于平均分的学生信息?于平均分的学生信息?2)统计管理学院各专业高等数学低于平均分的人数。统计管理学院各专业高等数学低于平均分的人数。3)查询大学英语成绩最高分的学生

20、信息。)查询大学英语成绩最高分的学生信息。Exists子查询子查询3)使用)使用Exists的子查询的子查询使用使用Exists(或(或Not Exists)引入子查询时,就相)引入子查询时,就相当于进行一次存在测试。当于进行一次存在测试。外部查询的外部查询的Where子句测试子句测试子查询返回的行是否存在。子查询返回的行是否存在。子查询实际上不产生任何子查询实际上不产生任何数据,它只返回数据,它只返回True或或False。例如:查询成绩表中女生的学习成绩。例如:查询成绩表中女生的学习成绩。SELECT * FROM 成绩表成绩表 Where exists(select * FROM 学生基

21、本情况学生基本情况 where 学号学号=成绩表成绩表.学号学号 and 性别性别=女女)思考:思考:1)如何查询管理学院的学生成绩?)如何查询管理学院的学生成绩?2)查询本专业高等数学不及格的学生信息?)查询本专业高等数学不及格的学生信息?练习讨论练习讨论数据表名:数据表名:JBQK数据表名:数据表名:CJB练习讨论练习讨论n根据根据JBQK表、表、CJB表完成下列查询:表完成下列查询:n1.查询高等数学成绩高于平均成绩的学生信查询高等数学成绩高于平均成绩的学生信息,显示学号、姓名、专业、高等数学等;息,显示学号、姓名、专业、高等数学等;n2.查询信息管理专业男生的高等数学成绩、查询信息管理

22、专业男生的高等数学成绩、电子商务专业女生的高等数学成绩、能源学院电子商务专业女生的高等数学成绩、能源学院所有学生的数学成绩,显示显示学号、姓名、所有学生的数学成绩,显示显示学号、姓名、性别、院系、专业、高等数学等,按院系、专性别、院系、专业、高等数学等,按院系、专业排序;业排序;n3.查询与查询与“刘文东刘文东”同专业的学生信息,显同专业的学生信息,显示显示学号、姓名、专业、各门课程成绩。示显示学号、姓名、专业、各门课程成绩。基于查询的数据表基于查询的数据表1 基于查询生成新的数据表基于查询生成新的数据表如果需要将查询结果保存下来,使用如果需要将查询结果保存下来,使用INTO子句可以生成一个新

23、表并将结果保存在这个新子句可以生成一个新表并将结果保存在这个新的数据表中。的数据表中。命令基本格式:命令基本格式:Select 选择字段表选择字段表 Into 新的表名新的表名 FROM 已有的表已有的表 where 条件条件例如:例如:1)将)将“学生基本情况学生基本情况”表复制成表复制成jbqkSelect * Into jbqk from 学生基本情况学生基本情况2)统计各个院系英语成绩的平均分、最高分、最低分、考试统计各个院系英语成绩的平均分、最高分、最低分、考试人数,结果放在人数,结果放在Eng_tj表。表。SELECT 学生基本情况学生基本情况.院系名称院系名称, AVG(成绩表成

24、绩表.大学英语大学英语) AS 英语平均英语平均, MAX(成绩表成绩表.大学英语大学英语) AS 英语最高英语最高, MIN(成成绩表绩表.大学英语大学英语) AS 英语最低英语最低, COUNT(*) AS 考试人数考试人数INTO Eng_tjFROM 学生基本情况学生基本情况 INNER JOIN 成绩表成绩表 ON 学生基本情况学生基本情况.学号学号 = 成绩表成绩表.学号学号GROUP BY 学生基本情况学生基本情况.院系名称院系名称思考:思考:1)将管理学院学习成绩前)将管理学院学习成绩前10名学生的信息保存到数名学生的信息保存到数据表据表gl_10中,只保存学号、姓名、专业、各

25、门课程成绩。中,只保存学号、姓名、专业、各门课程成绩。2)如何将本专业不及格学生的信息保存在数据表)如何将本专业不及格学生的信息保存在数据表bjg_xs? ,保存学号、姓名、专业、各门课程成绩。保存学号、姓名、专业、各门课程成绩。3)将)将jbqk表的结构复制到表的结构复制到jb_jg中。中。将查询结果插入数据表将查询结果插入数据表2 向已有表插入数据向已有表插入数据用用Insert IntoSelect语句,可以将一个子语句,可以将一个子查询的结果添加到数据表中。查询的结果添加到数据表中。命令格式:命令格式:Insert Into 数据表数据表 Select 查询查询例如:创建临时数据表例如

26、:创建临时数据表stu_1,存放从基本,存放从基本情况表、成绩表中查询出来的学号、姓名、性情况表、成绩表中查询出来的学号、姓名、性别、年龄、总成绩、平均成绩等信息。别、年龄、总成绩、平均成绩等信息。create table #stu_1(学号学号 char(8),姓名姓名 nchar(4),性别性别 nchar(1),年龄年龄 tinyint,总成绩总成绩 int,平均成绩平均成绩 decimal(5,2)goinsert into #stu_1 select jbqk.学号学号,jbqk.姓名姓名,jbqk.性别性别,year(getdate()-year(出生日期出生日期),cjb.高等数

27、学高等数学+cjb.大学英语大学英语+cjb.计算机基础计算机基础+cjb.管理学管理学,(cjb.高等数学高等数学+cjb.大学英语大学英语+cjb.计算机基础计算机基础+cjb.管理学管理学)/4from 学生基本情况学生基本情况 jbqk inner join 成绩表成绩表 cjb on jbqk.学号学号=cjb.学号学号goselect * from #stu_1思考:如何将信息管理、电子商务专业学习成绩前思考:如何将信息管理、电子商务专业学习成绩前5名的学名的学生信息放到与基本情况表结构类似的数据表生信息放到与基本情况表结构类似的数据表inf_ec中?中?子查询修改记录子查询修改记

28、录3 用子查询修改记录用子查询修改记录Update 语句中,语句中,Set子句、子句、Where 子句均可以使用子查询。子句均可以使用子查询。例如:在基本情况表中添加字段例如:在基本情况表中添加字段“第第1学期总分学期总分”、“第第1学期平均学期平均”,并修改,并修改这些字段的值。这些字段的值。alter table 学生基本情况学生基本情况 add 第第1学期总分学期总分 smallint,第第1学期平均学期平均 decimal(5,2)goupdate 学生基本情况学生基本情况 set 第第1学期总分学期总分=(select cjb.高等数学高等数学+cjb.大学英语大学英语+cjb.计算

29、机基础计算机基础+cjb.管理学管理学 from 成绩表成绩表 cjb where 学生基本情况学生基本情况.学号学号=cjb.学号学号), 第第1学期平均学期平均=(select (cjb.高等数学高等数学+cjb.大学英语大学英语+cjb.计算机基础计算机基础+cjb.管理学管理学)/4 from 成绩表成绩表 cjb where 学生基本情况学生基本情况.学号学号=cjb.学号学号)goselect * from 学生基本情况学生基本情况思考:思考:1)对本专业高等数学不及格的学生,将数学成绩提高)对本专业高等数学不及格的学生,将数学成绩提高15%;2)将不是本专业学生的各门课程成绩清空

30、;)将不是本专业学生的各门课程成绩清空;子查询删除记录子查询删除记录4 用子查询删除记录用子查询删除记录Delete 命令的命令的where 子句可以使用子查询来从数据表中删子句可以使用子查询来从数据表中删除相关记录。除相关记录。例如:从基本情况表、成绩表中删除例如:从基本情况表、成绩表中删除“男生男生”的相关记录。的相关记录。delete from 成绩表成绩表 where exists(select * from 学生基学生基本情况本情况 jbqk where 成绩表成绩表.学号学号=jbqk.学号学号 and jbqk.性别性别=男男)godelete from 学生基本情况学生基本情况

31、 where 性别性别=男男goselect * from 学生基本情况学生基本情况select * from 成绩表成绩表思考:将本专业学生的成绩备份到思考:将本专业学生的成绩备份到dele_bak,并从,并从cjb中删中删除;同时在除;同时在jbqk表中添加字段表中添加字段Dele_flag 、dele_table ,并,并给给dele_flag赋值赋值1、给、给dele_table赋值备份表的名称。赋值备份表的名称。SQL查询的增强功能查询的增强功能1.COMPUTE子句子句2.使用使用COMPUTE和和COMPUTE BY子句既能浏览详子句既能浏览详细数据又可看到统计的结果。细数据又可

32、看到统计的结果。3.主要功能:主要功能:4.1)生成合计作为附加的汇总放在结果集的最后。)生成合计作为附加的汇总放在结果集的最后。5.2)当与)当与BY一起使用时,则在结果集生成控制中断一起使用时,则在结果集生成控制中断与小计。与小计。6.3)同一查询内可同时用)同一查询内可同时用COMPUTE和和COMPUTE BY子句。子句。7.4)如果使用)如果使用COMPUTE BY,则必须使用,则必须使用ORDER BY。COMPUTE子句子句其语法形式为:其语法形式为:COMPUTE 聚合函数聚合函数(column_name),n BY column_name ,n 注意:注意:nCOMPUTE

33、BY 子句不能与子句不能与SELECT INTO子句一起使用。子句一起使用。nCOMPUTE子句中的列必须出现在子句中的列必须出现在SELECT子句的列表中。子句的列表中。nCOMPUTE BY表示按指定的列进行明细汇总,使用表示按指定的列进行明细汇总,使用BY关键字时必须同时使用关键字时必须同时使用ORDER BY子句,并且子句,并且COMPUTE BY后出现的列必须具有与后出现的列必须具有与ORDER BY后出现的后出现的列相同的顺序,且不能跳过其中的列。列相同的顺序,且不能跳过其中的列。例如:如果例如:如果ORDER BY子句按照如下顺序指定排序列:子句按照如下顺序指定排序列:ORDER

34、 BY a,b,c则则COMPUTE BY后的列表只能是下面任一种形式:后的列表只能是下面任一种形式:BY a,b,cBY a,bBY aCOMPUTE子句子句应用举例:应用举例:1)对管理学院学生的学号、姓名、高等数学、)对管理学院学生的学号、姓名、高等数学、大学英语、数据库列出明细,并统计高等数学大学英语、数据库列出明细,并统计高等数学平均分、最高分及人数;平均分、最高分及人数;2)对管理学院学生按专业列出学号、姓名、)对管理学院学生按专业列出学号、姓名、专业、高等数学的明细,并统计高等数学的平专业、高等数学的明细,并统计高等数学的平均、最高、最低成绩;均、最高、最低成绩;3)按专业列出高

35、等数学的明细,并统计各专)按专业列出高等数学的明细,并统计各专业的平均、最高、最低成绩;然后计算全校的业的平均、最高、最低成绩;然后计算全校的平均、最高、最低成绩。平均、最高、最低成绩。WITH ROLLUP在在Group By子句后使用子句后使用with Rollup,将对,将对Group By指定的各列产生汇总行。指定的各列产生汇总行。例如:例如:1)统计各专业人数及总人数。)统计各专业人数及总人数。2)按专业统计男、女生人数,并统计专业)按专业统计男、女生人数,并统计专业总人数及学生的总人数。总人数及学生的总人数。3)按学院、专业统计数据库的平均、最高)按学院、专业统计数据库的平均、最高

36、分,同时统计各个学院以及全校的平均、最高分,同时统计各个学院以及全校的平均、最高成绩。成绩。WITH Cube在在Group By子句后使用子句后使用with Cube,将对,将对Group By指定的各列的所有可能组合均产生指定的各列的所有可能组合均产生汇总行。汇总行。例如:按专业统计男、女生人数,并统计专例如:按专业统计男、女生人数,并统计专业总人数及男、女生总人数、全部学生的总人业总人数及男、女生总人数、全部学生的总人数。数。Select 所学专业所学专业,性别性别,count(*) as 人数人数From jbqkGroup by 所学专业所学专业,性别性别 with cube常用字符

37、串函数常用字符串函数1.ASCII(C):返回字符串最左端字符的返回字符串最左端字符的ASCII值;值;例如:显示字符例如:显示字符A、a、0的的ASCII值值select ascii(A) as A,ascii(a) as a,ascii(0) as zero2.CHAR(N):返回返回n(0-255)对应的字符;对应的字符;例如:显示十进制数例如:显示十进制数65、97、48、32对应的字符对应的字符select char(65) ,char(97),char(48),char(32)3.STR(FLOAT,LEN,DECIMAL):将数转换成字将数转换成字符串;符串;FLOAT:表示要转

38、换的数值;:表示要转换的数值;LEN:转换后的字符串的长度;转换后的字符串的长度;DECIMAL:转换后的字符串中包含的小数位数。转换后的字符串中包含的小数位数。常用字符串函数常用字符串函数说明:说明:1)若没有给出长度,则对整数部分按默认长度)若没有给出长度,则对整数部分按默认长度10位进行转换;位进行转换;2)若给出的长度太短,则先满足整数部分,然后)若给出的长度太短,则先满足整数部分,然后是小数部分;是小数部分;3)若给出的长度不能满足整数部分的长度,则显)若给出的长度不能满足整数部分的长度,则显示示n个个*。例如:例如:select str(123.45), str(123.45,6,

39、2), str(123.45,5,2), str(123.45,3,2), str(123.45,2,2)思考:长度不够时,是否进行四舍五入?思考:长度不够时,是否进行四舍五入?常用字符串函数常用字符串函数4.SUBSTRING(C,START,LENGTH):截取子串;截取子串;其中:其中:C待截取的字符串;待截取的字符串; START截取字符的起始位置;截取字符的起始位置; LENGTH截取字符的长度。截取字符的长度。例如:例如:SELECT SUBSTRING(12345ABCDEF,1,2), SUBSTRING(12345ABCDEF,5,5), SUBSTRING(12345ABC

40、DEF,6,5), SUBSTRING(12345ABCDEF,10,5), SUBSTRING(12345ABCDEF,12,2)思考:思考:1)位置、长度参数是否可以省略?)位置、长度参数是否可以省略?2)显示基本情况表中,学号)显示基本情况表中,学号01开头的学生信息开头的学生信息3)根据身份证号,显示)根据身份证号,显示1988年出生的学生信息年出生的学生信息常用字符串函数常用字符串函数4.LEFT(C,LEN) :从左边开始截取给定长度从左边开始截取给定长度字符串;字符串;6.RIGHT(C,LEN) :从右边开始截取给定长从右边开始截取给定长度字符串;度字符串;7.LEN(C) :

41、返回字符串的字符个数(不包括返回字符串的字符个数(不包括尾部空格)尾部空格)8.LTRIM(C) :删除字符串左端空格;删除字符串左端空格;9.RTRIM(C):删除字符串右端空格;删除字符串右端空格;10. CAST(表达式表达式 as 类型类型):将表达式转换为将表达式转换为SQL的某种类型。的某种类型。字符函数应用举例字符函数应用举例1 显示姓名最后一个字为显示姓名最后一个字为“强强”的学生;的学生;select * from 学生基本情况学生基本情况 where 姓名姓名 like %强强%goselect * from 学生基本情况学生基本情况 where right(rtrim(姓

42、名姓名),1)=强强2 显示身份证号带显示身份证号带X的学生信息;的学生信息;select * from 学生基本情况学生基本情况 where 身份证号身份证号 like %X%goselect * from 学生基本情况学生基本情况 where right(rtrim(upper(身份证身份证号号),1)=X3 显示姓名为两个字的学生信息;显示姓名为两个字的学生信息;select * from 学生基本情况学生基本情况 where len(rtrim(姓名姓名)=24 将学号、姓名、数学成绩组成一个显示内容;将学号、姓名、数学成绩组成一个显示内容;select 学号学号+ +姓名姓名+str

43、(数学成绩数学成绩,5) as 组合显示组合显示 from 学生基本学生基本情况情况 思考:思考:1 如何查询姓名仅一个或两个字的学生信息?如何查询姓名仅一个或两个字的学生信息? 2 如何将学号、姓名、平均成绩进行组合显示?如何将学号、姓名、平均成绩进行组合显示? 3 如何显示如何显示“管院管院”学生的信息?学生的信息?字符函数应用举例字符函数应用举例写出下列语句的结果:写出下列语句的结果:1. select ascii(123)+ascii(char(65)+ len(str(100+23)+ len(ltrim(str(12*10+23+456/1000) as len12. select

44、 ascii(str(456)+ascii(ltrim(str(456)+ascii(rtrim(str(456) as len23. select ascii(str(456,3)+len(left(管理管理,2)+len(right(学院学院,2)+len(rtrim(str(789.123) as len34. declare s1 char(100),s2 char(50)set s1=西安科技大学管理学院西安科技大学管理学院set s2=信息管理与信息系统信息管理与信息系统select substring(s1,1,1)+substring(s1,3,1)+ substring(s1

45、,5,1)+substring(s2,1,1)+substring(s2,3,1)+char(48)+char(49)go 常用日期时间函数常用日期时间函数Getdate():返回当前系统的日期和时间;返回当前系统的日期和时间;Year(date):返回指定日期的年份;返回指定日期的年份;Month(date):返回指定日期的月份;返回指定日期的月份;Day(date):返回指定日期的某天;返回指定日期的某天;Dateadd(datepart,n,date):在指定日期上加上一在指定日期上加上一段时间,返回新的日期时间;段时间,返回新的日期时间;其中:其中:Datepart:yyyy;mm;d

46、d;ww/wk;hh;mi;ss;Datediff(datepart,startdate,enddate):返回两返回两个日期的日期和时间的差值。个日期的日期和时间的差值。Datename(datepart,date):返回指定日期部分的返回指定日期部分的字符串。字符串。日期时间函数举例日期时间函数举例1)select dateadd(yyyy,2,getdate()2)select 学号学号,姓名姓名,出生日期出生日期, datediff(yy,出生日期出生日期,getdate() as 年龄年龄 from 学生基本情况学生基本情况where month(getdate()=month(出生

47、出生日期日期)3) select 2年后的今天年后的今天是是+datename(dw,dateadd(yyyy,2,getdate() as 星期星期日期时间函数举例日期时间函数举例declare d datetime -声明局部变量声明局部变量set d=getdate() -将系统日期时间赋给变量将系统日期时间赋给变量select 今天是今天是+datename(yyyy,d)+年年+ datename(mm,d)+月月+ datename(dd,d)+日日+ datename(hh,d)+时时+ datename(mi,d)+分分+ datename(ss,d)+秒秒+ datename

48、(dw,d)日期时间函数举例日期时间函数举例说明下列语句的作用:说明下列语句的作用:1. select top 5 姓名姓名,datediff(yy,出生日出生日期期,getdate()as 年龄年龄 from 学生基本情况学生基本情况 order by 2 desc2. select 学号学号,姓名姓名,出生日期出生日期, year(getdate()-year(出生日期出生日期) as age from 学生基本情况学生基本情况 where year(出生日期出生日期) 1982 order by age desc3. select 学号学号,姓名姓名,出生日期出生日期 from 学生基学生基本情况本情况 where year(出生日期出生日期) between 1982 and 1985 order by 出生日期出生日期日期时间函数举例日期时间函数举例思考:思考:1 如何显示下一个月过生日的学生信息?如何显示下一个月过生日的学生信息?2 如何显示如何显示2008年年龄正好年年龄正好25岁的学生?岁的学生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论