当前位置:网站首页>SQL基础练习题(mysql)
SQL基础练习题(mysql)
2022-08-02 20:13:00 【Arenaschi】
首先详细讲一下group by :
概述:“group by” 就是根据“by”指定的规则对数据进行分组,所谓分组就是将一个“数据集”划分成若个个“小区域”,然后针对若干个“小区域”进行数据处理
group by 与聚合函数 使用的比较多
group by 语句中SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包括在聚合函数中,常见的聚合函数如下表:
Having与Where的区别
- where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
count(1)、count(*)与count(列名)的区别
-- 当表的数据量大的时候,
后面是练习题:
练习题目:
我们要用到4张表
--1.学⽣表
Student(SId,Sname,Sage,Ssex)
--SId 学⽣编号,Sname 学⽣姓名,Sage 出⽣年⽉,Ssex 学⽣性别
--2.课程表
Course(CId,Cname,TId)
--CId 课程编号,Cname 课程名称,TId 教师编号
--3.教师表
Teacher(TId,Tname)
--TId 教师编号,Tname 教师姓名
--4.成绩表
SC(SId,CId,score)
--SId 学⽣编号,CId 课程编号,score 分数
-- 数据SQL
-- 学⽣表 Student
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex
varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙⻛' , '1990-12-20' , '男');
insert into Student values('04' , '李云' , '1990-12-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '⼥');
insert into Student values('06' , '吴兰' , '1992-01-01' , '⼥');
insert into Student values('07' , '郑⽵' , '1989-01-01' , '⼥');
insert into Student values('09' , '张三' , '2017-12-20' , '⼥');
insert into Student values('10' , '李四' , '2017-12-25' , '⼥');
insert into Student values('11' , '李四' , '2012-06-06' , '⼥');
insert into Student values('12' , '赵六' , '2013-06-13' , '⼥');
insert into Student values('13' , '孙七' , '2014-06-01' , '⼥');
-- 科⽬表 Course
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语⽂' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
-- 教师表 Teacher
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
-- 成绩表 SC
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
#. 查询报物理课程的学生人数
SELECT count(*) from student as stu right JOIN
(SELECT studentNo from result where subjectNo=1 )t ON stu.studentNo = t.studentNo;
#.查询男生、女生人数
SELECT count(1) from student where sex ='男'
union
SELECT count(1) from student where sex ='女'
#. 查询至少有一门课与"袋鼠"同学所学相同的同学的信息
SELECT * from student where studentNo in (
SELECT DISTINCT studentNo from result where subjectNo = (SELECT DISTINCT subjectNo from result where result.studentNo =(
SELECT stu.studentNo from student stu where stu.studentName ='袋鼠'
)));
#.查询每个科目最高分的学生(无最高分的并列情况)
SELECT * from student RIGHT JOIN(
SELECT subjectNo,max(res.studentResule) from result res GROUP BY subjectNo)t ON student.studentNo = t.subjectNo;
注意:因为在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:
函数 | 作用 | 支持性 |
---|---|---|
sum(列名) | 求和 | |
max(列名) | 最大值 | |
min(列名) | 最小值 | |
avg(列名) | 平均值 | |
first(列名) | 第一条记录 | 仅Access支持 |
last(列名) | 最后一条记录 | 仅Access支持 |
count(列名) | 统计记录数 | 注意和count(*)的区别 |
文章存在不足的地方 欢迎指出。
边栏推荐
- js Fetch返回数据res.json()报错问题
- php 单引号 双引号 -> => return echo
- J9 Digital Currency Theory: Identifying Web3's New Scarcity: Open Source Developers
- Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
- PG's SQL execution plan
- 你是几星测试/开发程序员?技术型选手王大拿......
- 新增指令 v-memo
- 信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
- ALV report learning summary
- DataGrip 安装教程 详细版
猜你喜欢
开关、电机、断路器、电热偶、电表接线图大全
Electron User Guide Beginning Experience
"A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
unittest自动化测试框架总结
php 单引号 双引号 -> => return echo
实现fashion_minst服装图像分类
浅议.NET遗留应用改造
成为黑客不得不学的语言,看完觉得你们还可吗?
数字孪生助力智慧城市可视化建设
Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
随机推荐
二丙二醇甲醚醋酸酯
ABAP grammar small review
Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
KDD 2022 | 深度图神经网络中的特征过相关:一个新视角
用了TCP协议,就一定不会丢包吗?
golang 源码分析:juju/ratelimit
实现fashion_minst服装图像分类
Li Mu hands-on deep learning V2-BERT pre-training and code implementation
[AnXun cup 2019] easy_web
Electron User Guide Beginning Experience
LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路
C语言中变量在内存中的保存与访问
Digital twins help visualize the construction of smart cities
SQL Server安装教程
.NET性能优化-你应该为集合类型设置初始大小
Solve the docker mysql can't write Chinese
postgresql autovaccum自动清理
Async的线程池使用的哪个?
go——垃圾回收机制(GC)
MSTP与STP