子查询指的是用括号括起来,并嵌入另一条语句里的那条 SELECT 语句。下面有一个示例,它实现的是找出与考试类别('T')相对应的所有考试事件行的 ID,然后利用它们来查找那些考试的成绩:

SELECT * FROM score WHERE event_id IN ( SELECT event_id FROM grade_event WHERE category = 'T' ) ;

1.1 带关系比较运算符的子查询

  运算符 =、<>、>、>=、< 和 <= 可用来对值之间的关系进行比较。当与标量子查询配合使用时,它们会将外层查询里所有与子查询的返回值有着特定关系的行找出来。例如:

SELECT * FROM score WHERE event_id=( SELECT event_id FROM grade_event WHERE event_id FROM grade_event WHERE date='2016-07-27' AND category = 'Q' );

  如果遇到问题可以通过在 WHERE 子句里使用某个聚合函数来解决,那么可以考虑用带关系比较运算符的标量子查询。例如,想要知道在 student 表里的那个学生出生最早,则可能会试着编写出下面这条语句:

SELECT * FROM student WHERE birth= ( SELECT MIN( birth ) FROM   student );

  可是这个办法是行不通的,因为不能在 WHERE 子句里使用聚合函数。(WHERE 子句的用途是确定应该选取哪些行,但 MIN() 的值只有在选取行之后才能确定下来。) 不过,可以使用像下面这样的子查询来产生一个最小的出生日期:

SELECT * FROM student WHERE birth = ( SELECT MIN(birth) FROM student );

  也可以使用其他聚合函数来解决类似问题。下面的这条语句使用了一个子查询来选取某次考试中高于平均分的分数:

SELECT * FROM score WHERE event_id=5 AND score > ( SELECT AVG(score) FROM score WHERE event_id = 5 );

  

  如果子查询返回的是一个行,那么可以用一个构造器来实现一组值(即元组)与子查询结果的比较。下面这条语句会返回多行与 'Lily' 出生在同一个 state  和 city 的学生的名字:

mysql> SELECT name,city,state FROM student
-> WHERE (city,state)=
-> (SELECT city ,state FROM student WHERE name = 'Lily');

MySQL数据库(11)----使用子查询实现多表查询的更多相关文章

  1. Django Mysql数据库-基于双下划线的跨表查询

    一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...

  2. MySQL数据库的创建和操作以及多表查询

    创建数据库: CREATE DATABASE 数据库名称; 查看所有的数据库: SHOW DATABASES; 操作指定数据库: USE 数据库名称; 查看当前所操作的数据库: SELECT DATA ...

  3. [MySQL数据库之记录的详细操作:增、改、删、单表查询、多表查询]

    [MySQL数据库之记录的详细操作:增.改.删.单表查询.多表查询] 记录详细操作 增.删.改 增: insert t1(字段1,字段2,字段3) values (值1,值2,值3), (值1,值2, ...

  4. mysql查询操作之单表查询、多表查询、子查询

    一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...

  5. mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长

    一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select  name fr ...

  6. 【MySQL】02_子查询与多表查询

    子查询 指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入. SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者 ...

  7. mysql数据库,当数据类型是float时,查询居然查询不出数据来

    mysql数据库,当数据类型是float时,查询居然查询不出数据来,类似如下: 以后mysql数据库不用float类型,而double类型可以查得出来.

  8. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  9. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

随机推荐

  1. Oracle PL/SQL学习之基础篇(1)

    1.PL/SQL,全称Procedure Language/SQL,过程化sql语言 PL/SQL的程序结构 declare --声明部分(包括变量.光标.例外声明) begin --语句序列(DML ...

  2. easyui实现多选框,并且获取值

    在easyui官方文档里面是没有combobox下拉框,可以进行多选的,但是其实是可以多选的, <td align="left">大区:   <input typ ...

  3. python实现计算器功能

    import re def strip_operate(exp): # 合并多余的操作符 exp = exp.replace("+-", "-") exp = ...

  4. LINQ to Entities does not recognize the method , and this method cannot be translated into a store expression 解决办法

    根据用户输入的起始日期,查询以起始日期开始的前20条记录,在ASP.NET MVC的Controller代码中这样写: var Logs = db.Log.Take(20); if (!string. ...

  5. vSphere通过Client创建Centos7主机

    准备: vSphere Client 客户端 Centos7官方镜像,本次采用的是CentOS-7-x86_64-Minimal-1511.iso 创建过程: 1.登录vSphere虚拟主机,输入账户 ...

  6. deepin安装php5.6

    sudo su -echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu xenial main" | tee -a /etc/a ...

  7. javascript的JSON对象

    JSON包含用于解析JSON(javascript object notation)的方法,将值转换成JSON.JSON不可以被调用或者用作构造函数. JSON对象保存在大括号内,JSON数组保存在中 ...

  8. 【es6】正则扩展

  9. JavaScript设计模式-14.组合模式实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Oracle 汉字转拼音触发器

    --函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...