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. PHPcms的安装步骤

    http://www.phpcms.cn 制作良好习惯: 1.备份 2.随时保存 3.注释 在自己的PHP环境里 简历一个文件夹 比如命名为YiNong 访问安装地址,http://localhost ...

  2. c# 的默认访问修饰符(转)

    c# 的访问修饰符是private 还是 internal? 准确的说,不能一概而论. 类(class)或结构(struct)如果不是在其它类或结构中的话,它的访问类型要不就是internal, 要不 ...

  3. (转)Entity Framework4.1实现动态多条件查询、分页和排序

    原文:http://www.cnblogs.com/ahui/archive/2011/08/04/2127282.html EF通用的分页实现: 1 2 3 4 5 6 7 8 9 10 11 12 ...

  4. JNA简单使用

    近期使用Java开发有关于摄像机接收到数据的上传,因为摄像机处理图像是用C语言实现的,所以开发需要用到JNA,实现JAVA对C语言的回调,因为具体的开发方式官方文档里面有示例,所以本文只是简单的把需要 ...

  5. bootstrap导航栏的辛酸史

    昨天本来想完成test10的页面内容的,但是给老铁拉出去打麻将呢.不过还好昨天写了一些内容.现在奉上.不作更改. 今天完成的事情:(实现了test9的响应式导航栏的垂直平分和下拉列表的居中问题.) 我 ...

  6. svg保存为图片下载到本地

    今天给大家说一个将svg下载到本地图片的方法,这里我不得不吐槽一下,为啥博客园不可以直接上传本地文件给大家用来直接下载分享呢,好,吐槽到此为止! 这里需要用到一个js文件,名字自己起,内容如下: (f ...

  7. 【起航计划 025】2015 起航计划 Android APIDemo的魔鬼步伐 24 App->Notification->Notifying Service Controller service中使用Notification

    这个例子介绍了如何在Service中使用Notification,相关的类为NotifyingController和NotifyingService. 在Service中使用Notification的 ...

  8. JavaScript平台Platypi悄然登场

    几个月前,一个新的JavaScript平台Platypi悄然诞生.它为开发者提供的不仅仅是一套标准的MVC框架而已,由于它是基于TypeScript构建的,因此对开发者而言在熟悉之中透露出与众不同的感 ...

  9. instanceof和相关函数

    instanceof:如果左边对象是右边类型所表示类(或任意一子类)的一个实例,则返回true,否则false.判断左边真实类型是不是右边的类或它的派生类. //实例一 Object o= new L ...

  10. Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?

    各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...