第四章 MySQL高级查询(二)

第四章 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(别名);

时间: 2024-08-07 08:36:33

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

第三章 MySQL高级查询(一)

第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSERT,UPDATE,DELECT. 2.       DDL(Data Definition Language)(数据定义语言):创建或删除数据库对象操作,有CREATE,DROP,ALTER三个语法组成. 3.       DQL (STructured Query Language)(数据查询语

MySQL数据库 高级查询(二)

高级查询(二)  EXISTS 子查询 语法: SELECT ..... FROM  表名 WHERE EXISTS (子查询); EXISTS 关键字后面的参数是一个任意的子查询,如果该子查询有返回值,则EXISTS 子查询的结果为true,此时再执行外层查询语句.如果没有返回行,则EXISTS 子查询 的结果为false,此时外层语句不再执行查询.  NOT EXISTS 子查询 EXISTS 子查询和NOT EXISTS 子查询的结果只取决于是否有返回记录,不取决于这些记录的内容,所以EX

MySQL高级查询和编程基础

第一章 数据库设计 一.数据需求分析: 数据需求分析是为后续概念设计和逻辑结构设计做准备. 结构:(1)对现实世界要处理的对象进行详细的调查. (2)收集基础数.据. (3)对所收集的数据进行处理. (4)确定新的功能. 二.概念结构设计: 主要的五项概念:实体.属性.域.码.实体间联系. 实体之间的联系:(1)1:1 在任意一方建立另外一方的外键. (2)1:m 在多的一方建立一的外键. (3)m:n 建立第三张表,双方的主键在第三张表中作为外键. 三.使用E-R模型进行概念结构设计: E-R

MySql高级查询--连接查询

前言 我们使用SQL查询不能只使用很简单.最基础的SELECT语句查询.如果想从多个表查询比较复杂的信息,就会使用高级查询实现. 常见的高级查询包括多表连接查询.内连接查询.外连接查询与组合查询等,今天我们先来学习最常用.面试也很容易被问到的连接查询. 我们今天以一个简单的学生信息表(学生ID.学生姓名.学生性别)与一个学生成绩表(学生ID.学生成绩.成绩等级)作演示: student_info表: student_score表: 一.内连接(INNER JOIN) 1.等值连接 概述:指使用等

第二部分 应用篇 第五章 MongoDB高级查询

声明:该文章主要来自<MongoDB实战>一书内容,主要想通过该书学习MongoDB的相应知识,加深理解,故写在自己的博文当中,作为记录,在最后的章节中,会有一个自己集合MongoDB数据库应用的JavaEE的web应用. 本章将结合实际应用,重点阐述一些实际工作中最常用的方法. 面向文档的NoSQL数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能. MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似

mysql 高级查询

高级查询:1.连接查询select * from Info,Nation #这是两个表名,中间用逗号隔开形成笛卡尔积select * from Info,Nation where Info.nation=Nation.code select Info.code,Info.name,Info.sex,Nation.name as '民族',Info.birthday from Info,Nation where Info.nation=Nation.code select * from Info

mysql高级查询

高级查询: 1.连接查询 select * from Info,Nation #得出的结果称为笛卡尔积select * from Info,Nation where Info.Nation = Nation.Code join on连接 select * from Info join Nation #join连接select * from Info join Nation on Info.Nation = Nation.Code 2.联合查询 select Code,Name from Info

MySQL学习之路(五)MySQL高级查询

MySQL统计函数 count():统计数量: max():统计最大值: min():统计最小值: avg():统计平均数: sum():统计和: Select count(*) from student; MySQL排序 group by: order by: 默认是升序排序: Select * from student group by sid asc;--升序排序 Select * from student group by sid DESC;--降序排序 Select * from st

第四章 大高级网 OSPF高级设置 (二)

 OSPF 高级设置(二) 虚链路和路由汇总 实验要求: 1.配置路由地址 2.配置虚链路 3.验证 一.配置OSPF多区域 二.验证area0是否与area1和area2 互通 三.设置虚链路(将area1区域看做透明的) 四.验证 路由汇总 实验要求: 1.配置各路由器地址 2.配置 OSPF多区域 3.配置路由汇总 4.验证效果 一.配置路由地址 R1 R4 二.设置area0和area1 三.验证area0和area1互通 四.重分发 R3 五.验证 全网互通 六.查看路由表 七.路由汇