MySQL 多种查询方法

这篇具有很好参考价值的文章主要介绍了MySQL 多种查询方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查询

作为案例的三个表
MySQL 多种查询方法
MySQL 多种查询方法
MySQL 多种查询方法

点击获取建表语句和表数据

1、单表查询

1.选择表中的若干列

1.查询指定列

select Sno,Sname from Student;

2.查询全部列

select*from Student;

3.查询经过计算的值

3.1、查询到同学的出生年份

select Sname,2022-Sage from student;

MySQL 多种查询方法
3.2、起别名,增加列,通过函数转换大小写

select Sname 姓名,'Brith',2022-Sage,lower(Sdept) from Student;

MySQL 多种查询方法

2.选择表中的若干元组

1.消除取值重复行

select distinct Sno from SC;

MySQL 多种查询方法
2.查询满足条件的元组

2.1、比较大小

select * from Student where Sage<20;

MySQL 多种查询方法
2.2、确定范围

select * from Student where Sage between 20 and 30;

MySQL 多种查询方法
2.3、确定集合

select * from Student where Sdept in ('CS','MA');

MySQL 多种查询方法
2.4、字符匹配

  • %(百分号)代表任意长度(长度可以为0)的字符串
  • _(下横线)代表任意单个字符
select * from Student where Sname like '刘%';
select * from Student where Sname like '刘_';

select * from Student where Sname not like '刘%';
select * from Student where Sname not like '刘_';

2.5、空值查询

select * from Student where Grade is null;
3.order by子句

用户可以用order by 子句对查询结果按照一个或多个属性列的升序(ASC)降序(DESC)排列,默认值升序

select * from SC order by Grade;

MySQL 多种查询方法

4.聚集函数
select count(*) from Student;
select count(Sno) from Student;
select avg(Grade) from SC;
select sum(Grade) from SC;
select max(Grade) from SC;
select min(Grade) from SC;

当聚集函数遇到空值时,除count(*)外,都跳过空值处理非空值
聚集函数只能用于select子句和group by中的having子句

5.group by分组
select Sno,count(*) from Student group by Sno;

MySQL 多种查询方法

select Sno from SC group by Sno having count(Sno)>3;

MySQL 多种查询方法

2、连接查询

若一个查询同时涉及两个以上的表,则称之为连接查询

1、等值与非等值连接查询
  • 连接查询的where子句中用来连接两个表的条件成为连接条件连接谓词
  • 当连接运算符为=号时,称为等值连接,使用其他运算符称为非等值连接

例1、查询每个学生及其选修课程的情况

select * from Student,SC where Student.Sno=SC.Sno;

MySQL 多种查询方法
把目标列中重复的属性列去掉则为自然连接

select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student,SC where Student.Sno=SC.Sno;

MySQL 多种查询方法

2、自身连接

连接操作不仅可以在两个表之间进行,也可以时一个表与自身进行连接,称之为表的自身连接
例2、查询每一门课的间接先修课(即先修课的先修课)

select first.Cno,second.Cpno from Course first,Course second where first.Cpno=second.Cno;

MySQL 多种查询方法

3、外连接

有时想以Student 表为主体列出每个学生的基本情况和选课情况。若某个学生没有选课,仍把Student的悬浮元组保存在结果关系中,而在SC表的属性上填空值NULL,这时就需要使用外连接

select * from Student left outer join SC on (Student.Sno=SC.Sno);

MySQL 多种查询方法
左外连接列出左边关系中所有元组,右外连接列出右边关系中所有的元组

4、多表连接

连接操作除了可以时两表连接、一个表与自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接
例4、查询每个学生的学号、姓名、课程名、成绩

select Student.Sno,Sname,Cname,Grade from Student,Course,Sc where Student.Sno=SC.Sno and SC.Cno=Course.Cno;

MySQL 多种查询方法

3、嵌套查询

在SQL语言中,一个select-from-where 语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询例如:
查询选修课程号为2的学生姓名

select Sname from Student where Sno in (select Sno from SC where Cno='2');

本例中,下层查询块 select sno from sc where cno=‘2’是嵌套在上层查询块select sname from student where sno in 的where条件中的,上层的查询块称为外查询父查询,下层查询块称为内查询子查询

子查询的select语句中不能使用 order by 子句,order by子句只能对最终查询结果排序

1、带有IN谓词的子查询

例1、查询与“刘晨”在同一个系学习的学生

select * from student where Sdept in (select Sdept from Student where Sname='刘晨');

MySQL 多种查询方法

本例中,子查询条件不依赖于父查询,称为不相关子查询

例2、查询选修了课程名为“信息系统”的学生学号和姓名

select Sno,Sname from Student where Sno in(select Sno from SC where Cno in (select Cno from Course where Cname='信息系统'));

MySQL 多种查询方法

2、带有比较运算符的子查询

带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户明确知道内层查询返回的是单个值时,可以用>、<、=、>=、<=、!=或<>等比较运算符

例3、找出每个学生超过他自己选修课程平均成绩的课程号

select Sno,Cno from SC x where Grade>(select avg(Grade) from SC y where y.Sno=x.Sno);

MySQL 多种查询方法
x 是表SC的别名,又称为元组变量,可以用来表示SC的一个元组,内层查询是求一个学生所有选修课平均成绩的,至于是哪个学生的平均成绩要看参数x.Sno的值,而该值是与父查询相关的,因此这类查询称为相关子查询

3、带有ANY或ALL谓词的子查询
>ANY 大于子查询结果中的某个值
>ALL 大于子查询结果中的所有值
<ANY 小于子查询结果中的某个值
<ALL 小于子查询结果中的所有值

>=ANY 大于等于子查询结果中的某个值
>=ALL 大于等于子查询结果中的所有值
<=ANY 小于等于子查询结果中的某个值
<=ALL 小于等于子查询结果中的所有值

例4、查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄

select Sname,Sage from Student where Sage<ANY(select Sage from Student where Sdept='CS') and Sdept!='CS';

MySQL 多种查询方法

4、带有EXISTS谓词的子查询

EXISTS代表存在量词,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”

例5、查询所有选修了1号课程的学生姓名

select Sname from Student where exists (select * from SC where Student.Sno=SC.Sno and Cno='1');

使用存在量词exists后,若内层查询结果非空,则外层的where子句返回真值,否者返回假值

例6、查询选修了全部课程的学生姓名
SQL中没有全称量词(for all),但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词,可以将题目转换成等价的存在量词的形式:没有一门课程是他不选修的

select Sname from Student where exists (select * from Course where exists (select * from SC where SC.Sno=Student.Sno and SC.Cno=Course.Cno));

MySQL 多种查询方法

4、集合查询

集合操作主要包括并操作NUION交操作INTERSERT差操作EXCEPT
例1、查询计算机科学系的学生及年龄不大于19岁的学生

select * from Student where Sdept='CS' union select * from Student where Sage<=19;

MySQL 多种查询方法
例2、查询计算机科学系的学生与年龄不大于19岁的学生的交集

select * from Student where Sdept='CS' intersect select * from Student where Sage<=19;

这实际上就行查询计算机科学系中年龄不大于19岁的学生

select *from Student where Sdept='CS' and Sage<=19;

MySQL 多种查询方法

例3、查询计算机科学系的学生与年龄不大于19岁的学生的差集

select * from Student where Sdept='CS' except select * from Student where Sage<=19;

这实际上就行查询计算机科学系中年龄大于19岁的学生

select *from Student where Sdept='CS' and Sage>19;

MySQL 多种查询方法文章来源地址https://www.toymoban.com/news/detail-441348.html

到了这里,关于MySQL 多种查询方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】学习连接查询和案例演示

    🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​ 💫个人格言:“没有罗马,那就自己创造罗马~” 内连接查询的是两张交集的部分。 SELECT 字段列表 FROM 表1 ,表2 WHERE 条件...; 通过内连接查询连接员工表和部门表,我们从查询结果看到只有

    2024年02月22日
    浏览(33)
  • 「 MySQL 入门」使用联表查询代替子查询的原因(附案例分析)

    参考鸣谢 MySQL Documentation PostgreSQL Documentation SQL Server Documentation 在关系型数据库中,查询是一项常见而重要的操作。在实际应用中,我们经常会遇到需要在多个表之间进行查询和关联的情况。传统的子查询是一种常见的解决方案,但随着数据量和复杂性的增加,使用联表查询

    2024年02月12日
    浏览(40)
  • 全网多种方法解决数据库有数据,但mybatis查询出来的值为Null、为空或不存在的问题

    今天在查询组件详情时,却报出如下错误: 接下里,我便详细分析出现该错误的原因。 首先 debug (断点),如下图所示: debug 结果是 appCustomComponent: null ,于是,找到 mybatis-plus 的打印的 mysql 语句,如下所示:

    2024年02月15日
    浏览(49)
  • Python3,多种方法,同时执行多条SQL语句,并把查询结果分别写入不同Sheet页,妥妥的学到了。

    小屌丝 :鱼哥,我想请教一个问题。 小鱼 :国庆假期你经历了什么,让你变得如此的 “ 善良 ”? 小屌丝 :别这么说,我一直很善良,至少,很正直… 小鱼 :打住,直接点, 你有什么需要帮助的? 小屌丝 :我就是想把查询的结果也入到excel表中 小鱼 :然后呢? 小屌丝 :

    2024年02月08日
    浏览(54)
  • MySQL修改root密码的多种方法,你掌握了吗

    前言 我们在工作中都会用到mysql数据库,也是最熟悉用的最多的,无论是在本地安装mysql还是在Linux安装mysql,都需要给数据库配置用户名和密码,时间一长我们就会忘记配置数据库的密码,那么这个时候我们会想到修改密码,下面就来给大家介绍修改mysql密码的三种方法 方法

    2024年02月16日
    浏览(40)
  • mysql —案例复杂查询+索引使用+DBeaver中创建索引

    接上章 我们 对一个简单的选课功能进行 设计分析 实际上在工作中 拿到一个需求,也是这样的一个分析过程 一个份 需求文档+原型 出来,只要是你负责这个模块,就需要你自己建表建库,设计接口文档,也许现在有的公司会有一个带你的大哥会帮你建表建库【甚至接口文档

    2024年02月13日
    浏览(42)
  • 【案例实战】NodeJS+Vue3+MySQL实现列表查询功能

    这篇文章,给大家带来一个列表查询的功能,从前端到后端的一个综合案例实战。 采用vue3作为前端开发,nodejs作为后端开发。 首先我们先来看一下完成的页面效果。点击分页,可以切换到上一页、下一页。搜索框可以进行模糊查询。 后端项目开发 好的,那么看完项目的演

    2024年02月06日
    浏览(45)
  • 【Mysql】X-DOC:Mysql数据库大量数据查询加速(定时JOB和存储过程应用案例)

    在某中台系统中,设计了大量的基础数据(维度数据、维度映射关系等)来支撑业务功能,业务表中存在大量的维度外键关联字段,其优点是可以实现前端的选择录入,数据校验,确保录入数据的准确性;缺点是在做业务报表时,需要做大量的维度关联(join)操作。 受限于

    2024年02月12日
    浏览(43)
  • 全网多种方法解决com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure的问题

    今天在使用 knife4j ,调用后端接口时,报出如下错误: 于是,赶紧查看控制台的错误信息,错误信息如下所示:

    2024年02月06日
    浏览(133)
  • python基础----05-----函数的多返回值、函数的多种参数使用形式、函数作为参数传递、lambda匿名函数

    分为以下四种。 位置参数调用函数时根据函数定义的参数位置来传递参数,传递的参数和定义的参数的顺序及个数必须一致。 函数调用时通过“键=值”形式传递参数。 作用:可以让函数更加清晰、容易使用,同时也清楚了参数的顺序需求。 注意: 函数调用时,如果有位置参

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包