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. sqlmap 命令笔记

    基础命令 注入 MySQL mssql access 直接爆表.然后你懂的BT5里面的话前面就要加pythonsqlmap.py -u url --dbs //爆数据库sqlmap.py -u url ...

  2. ping过程详解

    原出处:http://wanicy.blog.51cto.com/509018/335207/ PS:这里只是给出了ping ip地址的例子,没有给出ping域名的例子. ping 域名还有域名转换成 ...

  3. spring-boot学习之属性配置

    通过@value注解,将配置文件中的内容引入

  4. ngnix 反向代理

    1       课程目标 掌握nginx+tomcat反向代理的使用方法. 掌握nginx作为负载均衡器的使用方法. 掌握nginx实现web缓存方法. 2       nginx介绍 2.1    ...

  5. Vue.js 插件开发

    Vue.js 的插件应当有一个公开方法 install .这个方法的第一个参数是 Vue 构造器 , 第二个参数是一个可选的选项对象: MyPlugin.install = function (Vue ...

  6. ionic1跨域问题

    在使用ionic是遇到跨域问题 我自己尝试简单的单间一个能返回数据的后台服务器,ionic的www目录我使用一个ionic的livereload 来当做一个简易的web服务器,在使用ionic ser ...

  7. 跨平台图表控件TeeChart使用教程:导入XML数据

    TeeChart的最新版中包含了一个自动加载XML数据的新组件.这个组件的名字叫做TTeeXMLSource,用户可以在TeeXML.pas unit中找到这个组件. 加载XML图表所需的最小属性是& ...

  8. bootstrap中文文档阅读记录

    2017年1月12日20:26:26http://v3.bootcss.com/components/#navbar

  9. 1.jdk的安装

    1.下载jdk放到某(E)盘底下的(java)某文件夹里 2.配置环境变量 (1)配置JAVA_HOME,CLASSPATH,PATH三个变量 其中JAVA_HOME必须的 JAVA_HOME=E:\ ...

  10. phpstorm 2017.1 激活

    打开网址 http://idea.lanyus.com/ 选择获取注册码,复制生成的验证码 安装完成后,打开软件,依次选择菜单栏 Help -> Register-> Activation ...