第四章 MySQL高级查询(二)

一.EXISTS子查询

在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false。除此之外,exists也可以作为where语句的子查询,语法如下:

SELECT ……FROM 表名 WHERE  EXISTS(子查询)

EXISTS关键字后面的参数是一个任意的子查询,如果该子查询没有返回行,则EXISTS子查询的结果为true,此时再执行外层查询语句。如果EXISTS子查询结果为false,此时外层语句不再执行查询。

例:检查Logic Java课程最近一次考试,如果成绩有80以上者,则显示分数排在前5位的学员和分数。

SELECT `studentNo` AS 学号,`studentResult` 成绩 FROM `result`

WHERE EXISTS(

         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;

二.NOT EXISTS子查询

EXISTS 和IN一样,同时允许添加NOT关键字实现取反操作,NOT EXISTS表示不存在

例:检查Logic Java课程最近的一次考试,如果全部没有通过考试(60分及格线),则认为考试偏难,计算该次考试的平均分+5.

分析:所有人都没有通过考试,则“不存在成绩大于60的学生”,可以采用NOT  EXISTS检测。

SELECT AVG(studentresult)+5 AS 平均分 FROM resulf

WHERE NOT EXISTS(

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')

)

三.子查询的注意事项

  1. 1.       子查询语句可以嵌套在SQL语句中任何表达式出现的位置。

语法:     SELECT * FROM (子查询) AS 表的别名;

A)如果子查询结果为单行单列,则可以不用指定列的别名。

B) 如果子查询结果为多行多列,必须为表指定别名。

  1. 2.       只出现在子查询中而没有出现在父查询中的表不能包含在输出列中。

常见错误: SELECT * FROM (SELECT *  FROM  ‘表名’);错误

这个子查询的错误在于主查询语句的FROM子句是一个子查询语句,返回的是大于单行单列的数据,应该为子查询结果集指定别名。正确的代码如下:

语法:      SELECT * FROM (SELECT * FROM `表名`) AS TEMP(别名);

第四章 MySQL高级查询(二)的更多相关文章

  1. accp8.0转换教材第4章MySQL高级查询(二)理解与练习

    知识点:EXISTS子查询.NOT EXISTS子查询.分页查询.UNION联合查询 一.单词部分 ①exist存在②temp临时的③district区域 ④content内容⑤temporary暂时 ...

  2. 第三章 MySQL高级查询(一)

    第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...

  3. accp8.0转换教材第3章MySQL高级查询(一)理解与练习

    一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...

  4. MySQL高级查询(二)

    EXISTS 和NOT EXISTS子查询 EXISTS子查询 语法:   SELECT ……… FROM 表名 WHERE EXISTS (子查询); 例: SELECT `studentNo` A ...

  5. mysql 高级查询二

    各种showshow columns from my_student;show grants for root;show aviables;show processlist;show table st ...

  6. MySQL高级查询与编程笔记 • 【目录】

    章节 内容 实践练习 MySQL高级查询与编程作业目录(作业笔记) 第1章 MySQL高级查询与编程笔记 • [第1章 数据库设计原理与实战] 第2章 MySQL高级查询与编程笔记 • [第2章 数据 ...

  7. MySQL 高级查询操作

    目录 MySQL 高级查询操作 一.预告 二.简单查询 三.显示筛选 四.存储过程 五.查询语句 1.作为变量 2.函数调用 3.写入数据表 备注 附表一 附表二 相关文献 博客提示 MySQL 高级 ...

  8. python进阶09 MySQL高级查询

    python进阶09 MySQL高级查询 一.筛选条件 # 比较运算符 # 等于:= 不等于:!= 或<> 大于:> 小于:< 大于等于>= 小于等于:<= #空: ...

  9. 第09章 MySQL子查询

    第09章 MySQL子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入. SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要 ...

随机推荐

  1. web项目的发布

    1.我们将web项目布署到IIS上之前需要将我们的源码发布,然后再将发布后的代码布署到II上 2.首先在VS上打开我们的应用程序,在WEB层上右键->发布,会弹出一个"发布web&qu ...

  2. Tomca软件介绍和安装

    Web开发入门 软件的结构: C/S (Client - Server  客户端-服务器端) 典型应用:QQ软件 ,飞秋,红蜘蛛. 特点: 1)必须下载特定的客户端程序. 2)服务器端升级,客户端升级 ...

  3. 201521123002 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 作业参考文件下载 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能 ...

  4. 201521123098 《Java程序设计》第3周学习总结

    1. 本周学习总结 1. 学习了类的创建: 2. 学会利用快捷方式完成变量的getter和setter的设定: 3. 学会了静态变量和非静态变量的区别和定义: 4. 学习了构造函数的基本编写方法. 大 ...

  5. 201521123106 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  6. Junit4学习(五)Junit4测试套件

    一,背景 1,随着开发规模的深入和扩大,项目或越来越大,相应的我们的测试类也会越来越多:那么就带来一个问题,假如测试类很多,就需要多次运行,造成测试的成本增加:此时就可以使用junit批量运行测试类的 ...

  7. 数据库复用代码【c3p0配置文件、数据库连接池】

    前言 为了复用,记载一些以前写过的工具类.方法 c3p0配置文件[c3p0-config.xml] <?xml version="1.0" encoding="UT ...

  8. OpenShift中的持续交付

    上一文中讲述了如何在AWS下搭建OpenShift集群.这篇文章将目光转向如何在OpenShift中实现CI/CD以及产品环境的部署. 持续交付 如果要打造一个持续交付的流水线,首先要考虑多环境的问题 ...

  9. hadoop超租约报错:

    解决方法:修改linux打开文件最大限制Java代码 echo "fs.file-max = 65535" >> /etc/sysctl.conf echo " ...

  10. 谈javascript变量声明

    之前的面试中遇到过一道面试题 var a =10;(function(){ console.log(a); var a =20;})() 短短5行代码log的结果是什么? 如果把var a = 20; ...