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 ...
随机推荐
- 类模版的static成员
类模版中声明static成员 template <class T> class Foo { public: static size_t count() { ++ctr; cout < ...
- Newtonsoft.Json解析json字符串和写json字符串
写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ...
- ASP.NET前端调用后台方法
<script> function MyConfirm() { if (confirm('存在重复记录,覆盖点继续,不覆盖追加保存点取消')) { ...
- 树莓派直连线连接PC
刚入手树莓派一天不到,SSH树莓派一直用的是路由+无线网卡的配置.想到明天就要出差了,本想把树莓派也带去,可宾馆的房间只有一个网口,通常都是兄弟们连接小型无线路由用的,连接树莓派似乎成了一个难题.于是 ...
- 转:解决“arcsde服务启动又停止的问题” - shmiloy001的专栏 - 博客频道 - CSDN.NET
)查看原因 该问题产生的原因可查看文件:F:\Program Files\ArcGIS\ArcSDE\ora11gexe\etc\sde_esri_sde.log 文件中提示密码失 ...
- selenium找不到元素
1.页面元素处于不显示状态时,找不元素.必须使元素处于显示状态.使用js 或者 元素的点击事件等方式可以实现. " src="index.php?m=Index&a=Men ...
- Odoo (OpenERP/TinyERP)-10.0 (Debian 8)
平台: Ubuntu 类型: 虚拟机镜像 软件包: odoo-10.0 commercial erp odoo open source openerp tinyerp 服务优惠价: 按服务商许可协议 ...
- php的yii框架开发总结8
EMailer是一个简单的封装PHPMailer类.利用这个扩展可以实现发邮件的功能. 下载地址:http://www.yiiframework.com/extension/mailer/ 下载解压把 ...
- java工程师要求
高级JAVA研发工程师 8000-15000元/月 职位信息 职位描述 岗位要求:1.五年以上软件研发经验,两年以上软件架构设计经验:2.精通weblogic.jboss tomcat.websphe ...
- Python基础学习之序列(2)
通用序列操作 所有序列类型都可以进行某些特定的操作.这些操作包括:索引(indexing).分片(sliceing).加(adding).乖(multiplying)以及检查某个元素是否属于序列的成员 ...