博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL学习(七)高级查询
阅读量:2055 次
发布时间:2019-04-28

本文共 2072 字,大约阅读时间需要 6 分钟。

1.什么是单个数据点?

数据点就是数据表中的每一个空格内的数据,都可以简称为数据点。
例如: select Name from TA where Id=1
2.什么是一列数据?
一列数据就是一个列名下的一列数据;
例如:select Id from TA where Type=‘酒类’//type在数据库里可以理解为列名
3.where子查询
#例题:查询出学生”张耀仁”的同班同学
通过子查询,子查询查询到张耀仁的班级编号,在通过这个班级编号来从父查询进行查询
select studentname from studentinfo where classid=(select classid from studentinfo where studentname=‘张耀仁’);
4.inner join on 和子查询的区别
例题:考试刚好等于55分的学生名单学习课程是java

第一种方法 自连接 通过inner join 来对三个表进行连接,通过外键来进行交接,然后进行条件判断来输入即可

select * from studentinfo s inner join exam e on s.studentid=e.studentid inner join subjectinfo sub on e.subjectid=sub.subjectid where e.exam=55 and sub.subjectname=‘java’;

第二种方法 子查询 首先获取到父查询里的studentid 从exam表中获取,那么子查询里面就首先要查询exam表中的studentid我们才能知道考55分的学生名单,接着在exam表中可以看到还连接着课程表 那么我们直接在里面继续嵌套子查询来获取subjectid 最后通过子查询获取到成绩55分,并且学习的课程是java了我们在通过父查询进行汇总;

#切记 子查询跟比较运算符使用的时候 最好要确保数据只有一条,如果大于一条了 会提示子查询返回多行

select studentname from studentinfo where studentid=(select studentid from exam where exam=55 and subjectid=(select subjectid from subjectinfo where subjectname=‘java’));
特别注意:子查询内如果有运算比较符的话 那么要确保他要查询的内容只是一条如果子查询返回多条数据的话 就会报错。

和 not in;

例题:考试刚好等于55分的学生名单学习课程是java 通过in来演示

如果说我们的考试成绩里面有很多人了 这时候如果使用= < > 这些比较运算符来进行子查询的话 会报错,那么我们通过in就可以来避免这些错误,使用in就可以输出多行数据了;

select studentname from studentinfo where studentid in(select studentid from exam where exam=55 and subjectid in(select subjectid from subjectinfo where subjectname=‘java’));

not in 和in想要的效果相反.
6.EXISTS
例题:查询成绩表中科目编号为2的考试成绩中是否存在不及格的学生,如果存在不及格的学生就将参加科目编号2考试的学生编号和成绩全部查询显示出来。

通过 exists来进行判断 判断里面代码是否返回行,如果有一条返回行了那么则为true 然后此时父查询开始进行查询

select * from exam where subjectid=2 and exists(select studentid from exam where exam=<60)

not exists 跟exists效果相反

7.ALL、ANY/SOME的子查询

ALL用在子查询前,通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一行进行比较,只要有一次比较的结果为 FALSE,则 ALL测试返回FALSE。ALL要求子查询必须返回而且只能返回一个字段。
语法:表达式或字段 比较运算符 ALL(子查询);

简单来说 all是干嘛的,>ALL 表示大于每一个值。换句话说,它表示大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。

ANY与子查询在一起使用时,按照比较运算符、表达式或字段对子查询的结果的每一行进行一次计算和比较。只要有一次满足条件,那么ANY的结果就是真。当子查询每行的结果与ANY前面的表达式或字段比较结果全为假时,则结果为假。

语法:表达式或字段 比较运算符 ANY/SOME(子查询)

简单来说any,他和all的作用是相同的唯一不同的就是他进行比较的时候只要子查询有一次满足条件了,那么他就为true了;

转载地址:http://yjnlf.baihongyu.com/

你可能感兴趣的文章
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>