子查询指的是用括号括起来,并嵌入另一条语句里的那条 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. win10 ping不通所有地址

    电脑使用的很正常,是公司内网,但是在昨天测试数据库连接的时候,所有的地址都ping不通了.原先是可以ping通的,然后各种查,各种尝试. 清空dns缓存, cmd命令查看dns缓存:ipconfig ...

  2. 【App性能】:TraceView分析法

    抓取traceview的日志有两种方式, 1,是在代码中片段中添加: Debug.startMethodTracing(“hello”); ....... Debug.stopMethodTracin ...

  3. secureCRT scripts as vbs

    gdb multithread debug. lsusb.py # $language = "VBScript" # $interface = "1.0" Su ...

  4. (转)Mysql占用过高CPU时的优化手段

    Mysql占用CPU过高的时候,该从哪些方面下手进行优化?占用CPU过高,可以做如下考虑:1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processli ...

  5. 【Ubuntu】命令记录

    cp 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目 ...

  6. 浅谈js中的垃圾两种回收机制

    一.标记清除 标记清除的主要思想是先建立各个对象的关联,然后从根节点出发,使用广度优先搜索依次标记所有对象,那些不能被标记的对象就应该作为垃圾回收. 这种方式的主要缺点就是如果某些对象被清理后,内存是 ...

  7. Python2.7环境下安装pydbg

    From:http://blog.csdn.net/cheng_tian/article/details/7652058 最近在看<Python灰帽子:黑客与逆向工程师的Python编程之道&g ...

  8. 如何处理服务器SSL收到了一个弱临时Diffie-Hellman 密钥?

    当我们用火狐浏览器打开某个HTTPS网站时可能会失败,并且出现如下错误提示:         安全连接失败连接某个URL网址时发生错误. 在服务器密钥交换握手信息中 SSL 收到了一个弱临时 Diff ...

  9. 基于struts2注解@action的@Result跳转问题——跳转到另一个action

    初学ssh 基于注解的方式简单灵活,但是做一个例子的时候,添加用户AddUser 完成后 想页面跳转到 ListUser 这个action, 然后action 成功后 会跳转到list.jsp 显示 ...

  10. C# 之文件拖拽和pixturBox缩放与拖拽

    文件拖拽: 效果:将一个文件拖拽到窗体的某个控件时,将该控件的路径显示在该控件上,只要拿到了路径自然可以读取文件中的内容了. 将一个控件的属性AllowDrop设置为true,然后添加DragDrop ...