JAVA / MySql 编程—— 第四章 高级查询(二)
1、 EXISTS和NOT EXISTS子查询:EXISTS关键字用来检测数数据库对象是否存在。
★EXISTS和NOT EXISTS的结果只取决于是否有返回记录,不取决于这些记录的内容,
所以EXISTS或NOT EXISTS子查询后SELECT语句中的字段列表通常是无关紧要的。
●EXISTS子查询:
|
在执行CREATE或DROP语句前,可以使用EXISTS语句判断该数据库对象是否存在,返回值是true或false。 Eg:如果存在数据表temp,则先删除它,然后重新创建。 DROP TABLE IF EXISTS temp; |
|
EXISTS也可以作为WHERE语句的子查询, 语法: SELECT …… FROM 表名 WHERE EXISTS(子查询) ◆EXISTS关键字后面的参数是一个任意的子查询,如果该子查询有返回值,则EXISTS子查询的结果为true,此时在执行外层查询语句。 如果字查询没有返回行,则EXISTS子查询的结果为false,此时外层与不在执行查询。 |
|
Eg:检查Logic Java课程最近一次考试。如果有成绩达到80分以上者,则显示分数排在前5名学员的学号和分数 SELECT `studentNo` AS 学号,`studentResult` 成绩 FROM `result` WHERE EXISTS ( #查询Logic Java最后一次考试成绩大于80的记录 SELECT * FROM `result` WHERE `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java' ) AND `examDate` = ( SELECT MAX(`examDate`) FROM `result` WHERE `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java') ) AND `studentResult` > 80) AND `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java') ORDER BY `studentResult` DESC LIMIT 5; #按成绩降序排序,显示前5名 |
|
Eg:
|
●NOT EXISTS子查询
|
EXISTS和IN一样,同样允许添加NOT关键字实现取反操作,NOT EXISTS表示不存在。 |
|
Eg:/*如果没有考试通过的学员,则平均分加5分*/ SELECT AVG(studentresult)+10 AS 平均分 FROM result WHERE NOT EXISTS ( #查询Logic Java最后一次考试成绩小于60的记录 SELECT * FROM `result` WHERE `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java' ) AND `examDate` = ( SELECT MAX(`examDate`) FROM `result` WHERE `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java') ) AND `studentResult` > 60) AND `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java') AND `examDate` = ( SELECT MAX(`examDate`) FROM `result` WHERE `subjectNo` = ( SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java') ); |
2、 子查询注意事项:
|
1) 子查询语句可以嵌套在SQL与语句中任何表达式出现的位置: 在SELECT语句中,子查询可以被嵌套在SELECT语句的列、表和查询条件中, 即SELECT子句FROM子句、WHERE子句、GROUP BY子句和HAVING子句。 ❤嵌套在SELECT语句的SELECT子句中的子查询语句如下。 语法: SELECT (子查询) FROM 表名; ❤嵌套在SELECT语句的FROM子句中的子查询语句如下。 语法: SELECT * FROM (子查询) AS 表的别名; |
|
2)只出现在子查询中而没有出现在父查询中农的表不能包含在输出列表中 多层嵌套子查询的最终数据集值包含父查询(即最外层的查询)的SELECT子句中出现的字段, 子查询的输出结果通常会作为其外层子查询数据源或用于数据判断匹配。 |
JAVA / MySql 编程—— 第四章 高级查询(二)的更多相关文章
- JAVA / MySql 编程—— 第三章 高级查询(一)
1. 修改表: (1)修改表名语法: ALTER TABLE <旧表名> RENAME [ TO ] <新表名>: 注意:其中[TO]为可选参数,使用与否不影响结 ...
- JAVA / MySql 编程——第七章 JDBC
1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力: ●Java是通过JDBC技术实现对各种数据 ...
- JAVA / MySql 编程——第五章 事务、视图、索引、备份和恢复
1.事务(Transaction): 事务是将一系列数据操作绑成一个整体进行统一管理. 如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分. 如果事务执行是遇到错误 ...
- JAVA / MySql 编程——第六章 Mysql 创建账户的相关命令
1. 创建普通用户: 语法: CREATE USER `user`@`host` [IDENTIFIED 'password']; //user:用户名,host:主机名,passw ...
- java面向对象编程——第四章 类和对象
OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ...
- Scala 基础(十二):Scala 函数式编程(四)高级(二)参数(类型)推断、闭包(closure)、函数柯里化(curry)、控制抽象
1 参数(类型)推断 参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以 ...
- 《Java程序设计》第四章-认识对象
20145221<Java程序设计>第四章-认识对象 总结 教材学习内容总结 类与对象 定义:对象是Java语言中重要的组成部分,之前学过的C语言是面向过程的,而Java主要是面向对象的. ...
- [Java并发编程(四)] Java volatile 的理论实践
[Java并发编程(四)] Java volatile 的理论实践 摘要 Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 ...
- 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API
https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...
随机推荐
- GitKraken使用教程-基础部分(5)
7. 提交代码 1) 查看文件改动 修改了某个文件后,在程序右侧会出现已修改文件的列表(如图 1‑1),这里以Test.git 为例,修改了19264.h 的文件编码,将其改为utf8.Unstage ...
- HDU 4357——String change——————【规律题】
String change Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 【转】带你正确的使用List的retainAll方法求交集
一. retainAll 方法 public boolean retainAll(Collection<?> c) { //调用自己的私有方法 return batchRemove(c, ...
- php cur错误:SSL错误 unable to get local issuer certificatebool
采集https链接时出现的问题 办法:跳过SSL证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLO ...
- CSS3制作3D旋转视频展示区
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Sharepoint 2013企业内容管理学习笔记(二) 全自动化内容管理
全自动化内容管理 所谓全自动化内容管理啊,其实对于用户来说,就更简单便捷有爱了,用户只需要把文件上传到部门网站的放置库中,文件就会快速自动躺到企业记录中心的某个归档记录库了,怎么样,很方便,有没有,很 ...
- spring-cloud构架微服务(2)-全局配置二
接上篇,实际项目中,可能会遇到有些配置项,例如:邮件地址.手机号等在服务已经上线之后做了改动(就当会出现这种情况好了).然后你修改了配置信息,就得一个一个去重启对应的服务.spring-全局配置提供了 ...
- check_mk 分布式监控
http://mathias-kettner.com/checkmk_wato_distributed.html peer(贵族) 管理多个slave 复制配置文件 /etc/check_mk/con ...
- polyfill 一个解决兼容的绝佳方案
polyfill为何物 Polyfill你可以理解为“腻子”,就是装修的时候,可以把缺损的地方填充抹平. 举个例子,html5的storage(session,local), 不同浏览器,不同版本,有 ...
- hive自定义UDTF函数叉分函数
hive自定义UDTF函数叉分函数 1.介绍 从聚合体日志中需要拆解出来各子日志数据,然后单独插入到各日志子表中.通过表生成函数完成这一过程. 2.定义ForkLogUDTF 2.1 HiveUtil ...
