子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句。

如:

SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
其中 SELECT * FROM t1,称为Outer Query/Outer Statement
SELECT col2 FROM t2,称为SubQuery

子查询指嵌套在查询内部,且必须始终出现在圆括号内。

子查询可以包含多个关键字或条件,如DISTINCT/GROUP BY/ORDER BY/LIMIT/函数等;

子查询的外层查询可以是:SELECT, INSERT, UPDATE, SET 或Do。

子查询可以返回标量、一行、一列或子查询。

  • 使用比较运算符的子查询

    • 使用比较运算符的子查询:=, >, <, >=, <=, <>, !=, <=>
    • 语法结构:operator comparison——operator SubQuery
    • ANY, SOME, ALL关键字
  • 使用[NOT] IN的子查询
    • operand comparison_operator [NOT] IN (subquery) = ANY 运算符与IN等效
    • !=ALL 或 <>ALL 运算符与NOT IN等效。

多表更新

  • 基本命令:
  • UPDATE table_references
    SET col_name1={expr1|DEFAULT}
    ...
    [WHERE where_condition] //表的参照关系
    table_reference
    {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}
    table_reference
    ON condition_expr //For example:
    UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate=cate_name
    SET goods_cate=cate_id;

多表连接

  • MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。
  • 基本命令:
  • table_reference
    {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}
    table_reference
    ON condition_expr table_reference
    tbl_name [[AS] alias] | table_subquery [AS] alias 数据表可以使用tbl_name AS alias_name 或 tbl_name alias_name 赋予别名。
    table_subquery可以作为子查询使用在FROM子句中,这样的子查询必须为其服务别名。
  • INNER JOIN,内连接,在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
  • LEFT [OUTER] JOIN,左外连接
    • A LEFT JOIN B join_condition
    • 数据表B的结果集依赖于数据表A;
    • 左外连接条件决定如何检索数据表B(在没有WHERE条件的情况下)
  • RIGHT [OUTER] JOIN,右外连接
    • 通常使用ON关键字来设定条件;
    • 使用WHERE关键字来进行结果集记录的过滤。
  • 表的自身连接
  • 多表删除:通过一个表模拟多个表,删除表中的重复记录

    • DELETE tbl_name[.*] [, tbl_name[.*]] ...
      FROM table_references
      [WHERE where_condition] //For example:
      DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id, goods_name FROM tdb_goods GROUP BY goods_name HAVING (COUNT(goods_name) >=2)) AS t2
      ON t1.goods_name=t2.goods_name WHERE t1.goods_id > t2.goods_id;

MySQL(五) —— 子查询的更多相关文章

  1. mysql in 子查询 效率慢 优化(转)

    mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...

  2. MySQL 行子查询(转)

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  3. MySQL FROM 子查询

    FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subq ...

  4. MySQL 表子查询

    MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title conten ...

  5. MySQL 行子查询

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  6. Mysql in子查询中加limit报错

    Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...

  7. MySql优化子查询

    用子查询语句来影响子查询中产生结果rows的数量和顺序. For example: SELECT * FROM t1 WHERE t1.column1 IN (SELECT column1 FROM ...

  8. Mysql的子查询相关知识,少但是精

    Mysql子查询 概念分析: 根据相关性分: (1)不相关子查询:一条Sql语句中含有多条SELECT语句,先执行子查询,再执行外查询,子查询可对立运行 关键字:(1)先子查询,再外查询 (2)可以对 ...

  9. 聊聊MySQL的子查询

    1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...

随机推荐

  1. 【python cookbook】【字符串与文本】14.字符串连接及合并

    问题:将许多小字符串合并成一个大的字符串 解决方案: 1.针对少数量的字符串:+ 2.针对大量的字符串对象的连接,更高效的方法:join() 3.更加复杂的字符串:format() >>& ...

  2. 【python cookbook】【字符串与文本】7.定义实现最短匹配的正则表达式

    问题:使用正则表达式对文本模式匹配,将识别出来的最长的可能匹配修改为找出最短的可能匹配 解决方法:在匹配模式中的*操作符后加上?修饰符 import re # Sample text text = ' ...

  3. python编码:gbk编码与解码

    从RF输入的中文会进行unicode编码:u'\u6587\u4ef6\u5230\u8fbe\u6210\u529f' 从orc数据库查询到的中文会进行gbk编码得到ASCII:'\xce\xc4\ ...

  4. 【python cookbook】【数据结构与算法】2 从任意长度的可迭代对象中分解元素

    从某个可迭代对象中分解出N个元素,但是可迭代对象的长度可能超过N,会出现“分解值过多”的异常: 使用“*表达式”来解决该问题: Python 3.4.3 (v3.4.3:9b73f1c3e601, F ...

  5. React笔记_(2)_react语法1

    这一节内容主要以了解为主. 渐渐的体会react的语法和其特性. ① htmlAndJs 混合编写 react和以往的前后台书写方式不一样. 在之前的多个语言中,讲求的是将页面代码和js代码逻辑分开, ...

  6. Linux/Unix中的#!和!#

    是不是在Terminal输入命令的时候,输入了很长的一个路径,然后发现还有在同一条命令中再输一次的时候很恼火,其实Shell是提供了trick的,就是使用!#(和#!不同哦) 习惯写脚本的猿,通常对于 ...

  7. MAVEN修改localRepository不起作用

    MAVEN修改localRepository不起作用 环境:win10 改用其他盘符都可以,唯独C:\Users\Administrator\.m2\repository不起作用,应该是win10权限 ...

  8. MySQL start and stop

    一.本文说明 本实验主要是演示MySQL的四种启动方式,附带停止的操作. 二.mysqld mysqld is the MySQL server   mysqld reads options from ...

  9. JavaEE基础(八)

    1.面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以分为局部 ...

  10. ecshop后台增加栏目查询会员是否重复注册

    ecshop的后台要查询哪些会员是否有重复注册时,可以利用特定的栏目来判断~ 譬如会员电话... 修改前请务必先备份下列档案!!! admin/users.php admin/templates/us ...