子查询指的是用括号括起来,并嵌入另一条语句里的那条 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 FROMstudent-> WHERE (city,state)=

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

mysql子查询存到另一张表_MySQL数据库(11)----使用子查询实现多表查询相关推荐

  1. mysql子查询存到另一张表_MySQL多表查询与子查询

    多表查询 多表查询实际上根据查询要求先将两个表连接起来,形成一张新表,再在新表中查询出满足条件的记录多表查询可分为连接查询和子查询. 一. 连接查询(可分为外连接和内连接)关于外链接的几点说明: A. ...

  2. mysql 表字段信息从一张表迁移到另一张表_MySQL(数据库)笔记

    ###数据库 之前通过流去操作文件保存数据库的弊端: 1.执行效率低 2.开发成本高 3.一般只能保存小量数据 4.只能保存文本数据 ####什么是DB - DataBase 数据库:代表文件集合 # ...

  3. mysql查询添加数据库表_MySQL数据库篇之表的增删改查

    主要内容: 一.表介绍 二.创建表 三.查看表结构 四.修改表结构 五.复制表 六.删除表 1️⃣ 表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称 ...

  4. mysql查询每个用户第一条数据_MySQL数据库订单表按用户邮箱字段分组查询每个用户的第一条记录...

    程序开发或者一些数据统计时,在MySQL中使用GROUP BY分组是很常用的SQL语句.那么,如果如下的简单示例订单数据表,我们现需要使用GROUP BY分组后查询每个用户的第一个订单记录,应该如何实 ...

  5. oracle查询两列合并成一列_MySQL复合索引和单列索引的单表查询分析

    本文由读者小平同志投稿,小平是一位非常朴实认真的猿,现于某上市证券公司做微服务开发,对 MySQL 优化有深入研究,小平的博客地址是https://blog.csdn.net/weixin_41193 ...

  6. mysql数据库什么情况下会锁表_mysql数据库锁的产生原因及解决办法

    数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性 ...

  7. 《数据库概论》实验(2):交互式SQL--创建表《数据库概论》 实验(3)-交互式SQL--简单查询 《数据库概论》实验(4):交互式SQL--复杂查询

    <数据库概论>实验(2):交互式SQL--创建表 一. 创建数据库 create database test;  /创建test数据库 二.创建表 create table student ...

  8. mysql权限表_MySQL 数据库赋予用户权限操作表

    MySQL清空数据库的操作:truncate table tablename; MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据 ...

  9. mysql客户端新建一个表_MySQL 建库、建用户及建表事项

    1,MySQL建库语句比较简单,一句话: 1 create database tppamltest3 2,创建用户及授权: 1 insert into mysql.user(Host,User,Pas ...

最新文章

  1. Oracle Golden Gate 系列 小结
  2. c、c++---linux上的GetTickCount函数
  3. 春节将至 香港推广“绿色年宵”呼吁惜物减废
  4. sklearn集合算法预测泰坦尼克号幸存者
  5. babyion 加载obj模型_在vue中使用babylonjs引入3d模型,打印mesh数据正常且无报错,但未在场景中显示,请问是什么环节出现了问题?...
  6. C++之顺序性容器vector、list、deque的五种定义方式
  7. 研发全球化再升级,华为已悄然布局16家海外研究所
  8. python udp 丢包_Python语言---TCP、UDP
  9. PHP里 date() 函数与 strtotime() 函数笔记
  10. OpenCV中Mat,图像二维指针和CxImage类的转换
  11. 541.反转字符串||
  12. JSON转Model内部实现解析
  13. 【京东助手】滑稽东试用助手 V1.6.0
  14. WPF中使用Aforge控件
  15. 虚拟机一直光标闪,进不去,解决方法之一。
  16. 【Statistics】HYPOTHESIS TEST(SIGNIFICANCE TEST)
  17. 3Dmax调整材质的纹理方向有哪些步骤
  18. 企业技术中台架构全景图(多图)
  19. C++ Boost库:简介和第一个示例程序
  20. ATTCK红日靶场二

热门文章

  1. SpringCloud之Hystrix
  2. Android分享-微信、Facebook、Google
  3. 框架之---Django
  4. 管理序列+序列的伪列+修改序列+删除序列
  5. gitlab的升级【二】旧数据的备份和新数据的恢复
  6. Day05 - Python 常用模块
  7. Java新手小程序之三
  8. JAVA项目中出现部分中文乱码问题
  9. jquery 批量上下移动
  10. swoole 内存Memory