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 编程—— 第四章 高级查询(二)的更多相关文章

  1. JAVA / MySql 编程—— 第三章 高级查询(一)

    1.        修改表: (1)修改表名语法: ALTER TABLE <旧表名> RENAME [ TO ] <新表名>: 注意:其中[TO]为可选参数,使用与否不影响结 ...

  2. JAVA / MySql 编程——第七章 JDBC

    1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力:         ●Java是通过JDBC技术实现对各种数据 ...

  3. JAVA / MySql 编程——第五章 事务、视图、索引、备份和恢复

    1.事务(Transaction): 事务是将一系列数据操作绑成一个整体进行统一管理. 如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分. 如果事务执行是遇到错误 ...

  4. JAVA / MySql 编程——第六章 Mysql 创建账户的相关命令

    1.        创建普通用户: 语法: CREATE USER `user`@`host` [IDENTIFIED 'password'];   //user:用户名,host:主机名,passw ...

  5. java面向对象编程——第四章 类和对象

    OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ...

  6. Scala 基础(十二):Scala 函数式编程(四)高级(二)参数(类型)推断、闭包(closure)、函数柯里化(curry)、控制抽象

    1  参数(类型)推断 参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以 ...

  7. 《Java程序设计》第四章-认识对象

    20145221<Java程序设计>第四章-认识对象 总结 教材学习内容总结 类与对象 定义:对象是Java语言中重要的组成部分,之前学过的C语言是面向过程的,而Java主要是面向对象的. ...

  8. [Java并发编程(四)] Java volatile 的理论实践

    [Java并发编程(四)] Java volatile 的理论实践 摘要 Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 ...

  9. 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API

    https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...

随机推荐

  1. 微信小程序获取数据、处理数据、绑定数据关键步骤记录

    onload:function(event){ var inTheatersUrl ="https://api.douban.com"+"/v2/movie/in_the ...

  2. hystrix应用介绍(一)

    声明:本文仅做个人的一次接口重构过程记录,期间参考了一些写的不错的博客,如果存在抄袭,请留言. hystrix基本介绍 hystrix 是一个开源的容灾框架,目的是为了解决当依赖服务出现故障或者接口响 ...

  3. java并发编程 volatile关键字 精准理解

    1.volatile的作用 一个线程共享变量(类的成员变量.类的静态成员变量等)被volatile修饰之后,就具有以下作用: 1)并发中的变量可见性(不同线程对该变量进行操作时的可见性),即一个线程修 ...

  4. Python之人工智能:PyAudio 实现录音 自动化交互实现问答

    Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...

  5. CSS Grid 布局学习笔记

    CSS Grid 布局学习笔记 好久没有写博客了, MDN 上关于 Grid 布局的知识比较零散, 正好根据我这几个月的实践对 CSS Grid 布局做一个总结, 以备查阅. 1. 基础用法 Grid ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——翻译:ArcGIS Runtime SDK for Android 10.2.7发布

    ArcGIS Runtime SDK for Android v10.2.7 released by Dan O'Neill on October 1, 2015(发布时间:2015年10月1日) W ...

  7. Struts2_默认Action

    配置Struts2默认跳转的Action <package name="default" namespace="/" extends="stru ...

  8. Spring Boot项目Circular view path问题解决

    使用Spring Boot创建Spring MVC项目,访问url请求出现问题:Circular view path 1.问题描述 控制台打印: javax.servlet.ServletExcept ...

  9. java多线程安全

    class Ticket implements Runnable { public int sum=10; public void run() { while(true) { if(sum>0) ...

  10. Git-实验报告

    “Git 实战教程”实验报告 基本用法(下) 二.比较内容 1.比较提交 - Git Diff git diff命令的作用是比较修改的或提交的文件内容. 如何查看缓存区内与上次提交之间的差别呢?需要使 ...