实验5 SQL语言查询的综合练习(4)

2020-03-26 21:34

where sname like '刘%' 如图3- 1所示:

图3- 1所有姓刘的同学信息

名字必须是3个字: select * from s

where sname like '刘_ _' 如图3- 2所示:

图3- 2名字必须是3个字

如图所示,我们可以看到,查询出来的结果中不仅包含3个字的还包含2个字的,因此在百度的帮助下,我们找到另一种解决方案,如下:

select * from s

where sname like '刘%' and len(sname)=3 运行结果,如图3- 3所示:

图3- 3方案2

(2) 查找名字为刘某的学生信息,但是名字的第二个字不是“兰”

SQL语句: select * from s

where sname like '刘[^兰]%' 如 图3- 4所示:

图3- 4姓刘但第二个字不是‘兰’

4. 逻辑运算符(运算符的优先级为 NOT 、 AND 、OR,求值顺序自左向右,可以利用括号改变求

值顺序) 1) 逻辑运算符

逻辑运算符对某个条件进行测试,以获得其真实情况。逻辑运算符和比较运算符一样,返回带有 TRUE 或 FALSE 值的布尔数据类型。 运算符 ALL AND ANY BETWEEN EXISTS IN LIKE NOT OR SOME 2) 比较运算符

比较运算符测试两个表达式是否相同。除了 text、ntext 或 image 数据类型的表达式外,比较运算符可以用于所有的表达式。

运算符 =(等于) >(大于) <(小于) >=(大于或等于) <=(小于或等于) <>(不等于) !=(不等于) !< (不小于) !> (不大于) 等于 大于 小于 大于等于 小于等于 不等于 不等于(非 SQL-92 标准) 不小于(非 SQL-92 标准) 不大于(非 SQL-92 标准) 含义 含义 如果一系列的比较都为 TRUE,那么就为 TRUE。 如果两个布尔表达式都为 TRUE,那么就为 TRUE。 如果一系列的比较中任何一个为 TRUE,那么就为 TRUE。 如果操作数在某个范围之内,那么就为 TRUE。 如果子查询包含一些行,那么就为 TRUE。 如果操作数等于表达式列表中的一个,那么就为 TRUE。 如果操作数与一种模式相匹配,那么就为 TRUE。 对任何其它布尔运算符的值取反。 如果两个布尔表达式中的一个为 TRUE,那么就为 TRUE。 如果在一系列比较中,有些为 TRUE,那么就为 TRUE。

比较运算符的结果有布尔数据类型,它有三种值:TRUE、FALSE 及 UNKNOWN。那些返回布尔数据类型的表达式被称为布尔表达式。

和其它 SQL Server 数据类型不同,不能将布尔数据类型指定为表列或变量的数据类型,也不能在结果集中返回布尔数据类型。

当 SET ANSI_NULLS 为 ON 时,带有一个或两个 NULL 表达式的运算符返回 UNKNOWN。当 SET ANSI_NULLS 为 OFF 时,上述规则同样适用,只不过如果两个表达式都为 NULL,那么等号运算符返回 TRUE。例如,如果 SET ANSI_NULLS 是 OFF,那么 NULL = NULL 就返回 TRUE。

(1) 查找不是计算机学院和数学系的,成绩不及格或成绩为空的学生信息。

查找不是计算机学院和数学系的学生: select s.*,sc.grade from s,sc

where s.sno=sc.sno

and s.sdept<>'计算机学院' and s.sdept<> '数学系' 如图4- 1所示:

图4- 1查找不是计算机学院和数学系的学生

且成绩不及格或者成绩为空的学生信息: select s.*,sc.grade from s,sc

where s.sno=sc.sno

and s.sdept<>'计算机学院' and s.sdept<> '数学系' and (sc.grade <60 or sc.grade is null) 如 图4- 2所示:

图4- 2成绩不及格或者成绩为空

5. Group by 练习

1) 用 ROLLUP 汇总数据

在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。 CUBE 和 ROLLUP 之间的区别在于:

?

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

? ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

2) 用 CUBE 汇总数据

CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。

CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。

(1) 查询各学院男生和女生的人数。

SQL语句: select sdept

,sum(case when ssex='男' then 1 else 0 end) as '男生人数' ,sum(case when ssex='女' then 1 else 0 end) as '女生人数' from s

group by sdept 如图5- 1所示:

图5- 1各学院男生和女生的人数

(2) 查询各个学院男生和女生人数,只显示人数超过1人的统计信息。

SQL语句:

select sdept,count(*)as 人数,ssex from s

group by sdept,ssex having count(*)>1 如图5- 2所示:

图5- 2如题要求

(3) 查询各个学院男生、女生的人数及其总人数。(rollup或cube)

SQL语句:

select sdept

,sum(case when ssex='男' then 1 else 0 end) as '男生人数' ,sum(case when ssex='女' then 1 else 0 end) as '女生人数'

,(sum(case when ssex='男' then 1 else 0 end)+sum(case when ssex='女' then 1 else 0 end))as total from s

group by sdept 如图5- 3所示:

图5- 3如题要求

(4) 统计各门课各个学院选修的人数、各学院选课人数、总人数。

SQL语句:

select s.sdept ,count (S.Sno) as 选课人数 from s,sc

where s.sno= sc.sno

group by S.Sdept with cube 如图5- 4所示:

图5- 4各学院选课人数、总人数

(5) 分别统计各学院男生、女生的平均年龄。

SQL语句:

select ssex,sdept,avg(2014-year(sbirthday))as 平均年龄 from S

group by ssex,sdept 如图5- 5所示:


实验5 SQL语言查询的综合练习(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于Matlab的卫星中继通信链路仿真

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: