SQL单表查询(2)

对查询结果排序

◆使用ORDER BY子句
-- 可以按一个或多个属性列排序
-- 升序:ASC;降序:DESC;缺省值为升序
◆ 当排序列含空值时
-- ASC:排序列为空值的元组最后显示
-- DESC:排序列为空值的元组最先显示
eg**:** 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

sql 复制代码
SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;

Sdept为主排序,Sage为次要排序,当系相同才按年龄排序。

使用集函数

5 类主要集函数
-- 统计个数
COUNT < 列名 >
-- 计算列总和
SUM < 列名 >
-- 计算列平均值
AVG < 列名 >
-- 求列最大值
MAX < 列名 >
-- 求列最小值
MIN < 列名 >
eg: 查询选修了课程的学生人数

sql 复制代码
SELECT COUNT(DISTINCT Sno)
FROM SC;

注: DISTINCT 以避免重复计算学生人数

对查询结果分组

用途
-- 细化集函数的作用对象
• 未对查询结果分组,集函数将作用于整个查询结果
• 对查询结果分组后,集函数将分别作用于每个组
◆使用GROUP BY子句分组
-- 分组方法:按指定的一列或多列值分组,值相等的为一组
-- 使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数
eg: 求各个课程号及相应的选课人数

sql 复制代码
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno

◆ 使用HAVING短语筛选最终输出结果
-- 只有满足HAVING短语指定条件的组才输出
◆ HAVING短语与WHERE子句的区别:作用对象不同
-- WHERE子句作用于基表或视图,从中选择满足条件的元组
-- HAVING短语作用于组,从中选择满足条件的组
eg: 查询选修了 3 门以上课程的学生学号

sql 复制代码
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >=3

查询格式总结

相关推荐
lzhdim8 小时前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室8 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
TDengine (老段)9 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
YOU OU10 小时前
Spring IoC&DI
java·数据库·spring
Muscleheng11 小时前
Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
数据库·postgresql
罗超驿11 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
jran-11 小时前
Redis 命令
数据库·redis·缓存
小江的记录本12 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
June`12 小时前
多线程redis下如何解决aof重写和rdb持久化的数据一致性问题
数据库·redis·缓存
二宝哥13 小时前
离线安装maven
java·数据库·maven