第四章总结

 单表查询
SQL查询语句的基本结构包括3个子句:select、from、where,其中

1.select子句对应于关系代数中的投影运算,用来指定查询结果中所需的属性表达式
2.from子句对应于关系代数中的笛卡尔积,用来给出查询所涉及的表,表可以是基本表、视图、查询表
3.where子句对应于关系代数中的选择运算,用来指定查询结果元组所需要满足的选择条件
对于SQL语句select、from子句是必须的,其他是可选的
基本语法:

select A1, A2, A3, ..., An
from R1, R2, ..., Rn
where PA1,A2, ..., An代表需要查找的属性或表达式
R1, R2, ..., Rn代表查询所涉及的表
P代表谓词(即选择条件),如果省略where子句,表示P为真
SQL查询结果允许包含重复元组

选择运算
where子句可以实现关系代数中的选择运算,用于查询满足选择条件的元组

where子句中常用的查询条件运算符如下:

比较范围:>, >=, <, <=, =, <>(或!=)
范围查询:between… and
集合查询:in
空值查询:IS null
字符匹配查询:like
逻辑查询:and, or,not

 比较运算

定义

使用比较运算符:>, >=, <, <=, =, <>(或!=)实现相应的比较运算

 范围查询

定义

between… and可用于查询属性值在某一个范围内的元组,
not between… and可用查询属性值不在某一个范围内的元组

举例

在score表中查询成绩在80~90分之间的同学学号、课程号、成绩

select studentNo, courseNo, score
from Score
where score between 80 and 90

 集合查询
定义

in可用于查询属性值在某个集合内的元组
not in可用于查询属性值不在某个集合内的元组

适用范围

in后面可以是具体的集合
in后面也可以是查询出来的元组集合

当in后面的集合是具体的集合

在score表中查询选修了001,005,003课程的同学学号、课程号、相应成绩

select studentNo, courseNo, score
from Score
where courseNo in ('001', '005', '003')、

空值查询
定义

SQL支持空值查询
空值表示未知或不确定的值,空值为null
is null用于查询属性值为空值 (is不能用=替换)
not is null用于查询属性值不为空值

举例

在course表中查询先修课程为空值的课程信息

select *
from Course
where priorCourse is null

 字符匹配查询
1. 定义
对于字符型数据,like可用于字符匹配查询

like的语法格式:

[not] like <匹配字符串> [escape <换码字符>]
2. 查询含义
查询指定属性列值与<匹配字符串>相匹配的元组

<匹配字符串>可以是一个具体的字符, 也可以包括通配符%和_
    
    符号%表示任意长度的字符串
    符号_表示任意一个字符

3. 举例

查询没有具体长度的字符串

在class表中查询班级名称中含有会计的班级信息

select *
from Class
where className like '%会计%'

逻辑运算

使用and、or、not逻辑运算符分别实现逻辑与、或、非运算

排序运算
定义

SQL支持排序运算,通过使用order by子句实现
其语法为:

 order by <表达式1> [asc|desc]
 
 默认情况下按升序排序
 表达式1:可以是属性、函数、表达式
 
 若表达式1后面还有表达式2的话表示:
 先按表达式1排序,再在表达式1值相等的情况下按表达式2排序
 

查询表
定义

SQL中from子句后面可以是基本表、视图、查询表

举例

查询1905年出生的女学生基本信息

select studentNo, studentName, birthday
from (select * from Student where sex='女') A
where year(birthday)=1905

等价于
select studentNo, studentName, birthday
from Student
where year(birthday)=1905 and sex='女'

注:from子句之后是一个查询表,表示对该查询的查询结果——查询表进行查询,必须为查询表取一个别名(该名称称为元组变量)

 聚合查询
SQL通过聚合函数实现统计功能,通过分组子句实现分类功能,将统计和分组组合在一起实现查询功能

 聚合函数
1. SQL提供的聚合函数如下:
count( [distinct | all] * | <列名> )

  统计关系的元组个数或一列中值的个数
1
sum([distinct | all] <列名>)

  统计一列中值的总和(此列必须为数值型)
1
avg([distinct | all] <列名>)

  统计一列中值的平均值(此列必须为数值型)
1
max([distinct | all] <列名>)

  统计一列中值的最大值


min([distinct | all] <列名>)

 统计一列中值的最小值

注:

默认是没有distinct即all谓词,表示不能消除<列名>取重复值的元组
指定了distinct就是在计算时首先消除<列名>取重复值的元组

2. 举例
例一:查询学生总人数

情况一
select count(*)
from Student


情况二
select count(*) 学生人数
from Student

总结:

 使用聚合函数的时候,对计算列要取一个别名,便于理解

 在聚合函数遇到空值时,除了count(*)外所有的函数皆跳过空值
1
2
3
例二:查询选课总人数

情况一
select count(studentNo) 学生人数
from Score


情况二
select count(distinct studentNo) 学生人数
from Score

总结:使用聚合函数的时候,为了消除重复元组,必须使用distinct短语

 分组聚合
在SQL查询中,往往需要对数据进行分组运算,分组运算的目的是为了
细化聚合函数的作用对象

如果不分组查询,聚合函数将作用域整个查询结果。查询结果是按组聚合输出

如果对查询结果进行分组,则聚合函数分别作用与每个组,查询结果是按组聚合输出

1. SQL语句中通过使用group by 和having子句来实现分组运算
group by 子句

  作用:对查询结果按某一列或某几列进行分组,值相等的分为一组

having子句

  作用:对分组的结果进行选择,仅输出满足条件的组
          必须与group by子句配合使用

2. 举例

查询每个同学的选课门数、平均分、最高分

select studentNo, count(*) 门数, avg(score) 平均分, max(score) 最高分
from Score
group by studentNo

注:查询的结果按学号分组,将相同学号值的元组作为一组,然后对每组进行相应的计数、求平均值、求最大值
 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值