当前位置:网站首页>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(*)的区别 |
文章存在不足的地方 欢迎指出。
边栏推荐
猜你喜欢
Informatics orsay a tong (1258: 【 9.2 】 digital pyramid)
李沐动手学深度学习V2-BERT预训练和代码实现
"A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
ssdp协议搜索GB28181设备
TodoList案例
一款免费的容器安全 SaaS 平台使用记录
Li Mu hands-on deep learning V2-BERT pre-training and code implementation
用了TCP协议,就一定不会丢包吗?
AI Scientist: Automatically discover hidden state variables of physical systems
【数据分析】:什么是数据分析?
随机推荐
.NET性能优化-你应该为集合类型设置初始大小
李沐动手学深度学习V2-bert和代码实现
特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)
ALV report learning summary
奥特学园ROS笔记--7(289-325节)
网络协议介绍
新增指令 v-memo
C语言中变量在内存中的保存与访问
SQL Server安装教程
TPAMI2022 | TransCL: based on the study the compression of the Transformer, more flexible and more powerful
Thread线程类基本使用(下)
基于 flex 布局实现的三栏布局
TodoList案例
信息系统项目管理师必背核心考点(五十八)变更管理的主要角色
Parse common methods in the Collection interface that are overridden by subclasses
实现fashion_minst服装图像分类
Helm基础知识
【实战 已完结】WPF开发自动化生产管理平台
你所不知道的C#中的细节
"Weekly Translate Go" This time we have something different!-- "How to Code in Go" series launched