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. ubuntu 下安装配置LAMP

    详情见: http://www.linuxeden.com/html/softuse/20130731/141934.html

  2. vue中添加echarts

    方法一:全局引入echarts 步骤: 1.全局安装 echarts依赖.        cnpm install echarts -- save 2.引入echarts模块,在Vue项目的main. ...

  3. node.js 模块和其下载资源的镜像设置

    以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题. 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 elect ...

  4. #include stdio.h(4)

    #include <stdio.h> int main() { //****************1.数组*************** //什么是数组:专门用来存放数据的 /* 格式 ...

  5. jquery的html()、text()、val()的区别和用法

    1.html() html()[无参]的使用方法是获取某元素内部的HTML代码,包括各种标签: 例:句1:<p>不知道大家高考的理综试卷里有没有关于科学家及其成就的选择题</p> ...

  6. Android GreenDao清空数据库的方法

    最近在做项目的时候,为了方便测试人员测试,在应用中加入正式库和测试库切换的功能.为了防止正式库和测试库切换带来的数据冲突,切换的时候必须把当前的数据库清空.代码如下: package com.exam ...

  7. python模块详解 shelve

    shelve模块是一个简单的k,v 将内存数据通过文件持久化的模块,可以持久化任何pickle可以支持的python数据.简单的说对 pickle的更上一层的封装. 写文件 import shelve ...

  8. JavaScript 如何编写计算器

    1.JavaScript制作计算器 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  9. 3.tomcat

    1.进入网站http://www.apache.org 2.选择 3.关闭防火墙才可以让别人访问自己

  10. 解决在php5中simple XML解析错误的问题

    2004年7月,php5正式版本的发布,标志着一个全新的PHP时代的到来.PHP5的最大特点是引入了面向对象的全部机制,并且保留了向下的兼容性.程序员不必再编写缺乏功能性的类,并且能够以多种方法实现类 ...