子查询(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. linux强制umount设备的方法

    假如挂载时使用了:mount /dev/sda1 /mnt/sda1 #查找占用设备的pid fuser -m /mnt/sda1 #假如此时得到的pid为12345 kill -9 12345 um ...

  2. Java高效编程之三【类和接口】

    本部分包含的一些指导原则,可以帮助哦我们更好滴利用这些语言元素,以便让设计出来的类更加有用.健壮和灵活. 十二.使类和成员的访问能力最小化 三个关键词访问修饰符:private(私有的=类级别的).未 ...

  3. 创建与删除SQL约束或字段约束

    1)禁止所有表约束的SQLselect 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'2)删除 ...

  4. 危险的 SQL

    看下这个 SQL , 有什么问题 ? <update id="update" parameterType="CreativeGroupDO"> up ...

  5. linux 使用串口连接设备console

    linux使用串口连接cisco设备的console   linux 自带一个串口命令:minicom,需要经过设置,之后就可以连接了.   传说是默认就可以,我可能RP不好,我必须要经过设置才可以. ...

  6. 【JQGRID DOCUMENTATION】.学习笔记.2.基本表格

    JqGrid的实例是一个JavaScript对象,带有属性,事件和方法.属性可以是字符串,数字,数组,布尔值或任何其他对象. 1 调用的约定: $("#grid_id").jqGr ...

  7. WWDC 2016 总结

    一年一次的WWDC,是开发者充值信仰的时刻,今天你的信仰充值了吗?欢迎在本文下面留言吐槽. 有外媒称,这届WWDC苹果将“fun”伪装成“innovation”,的确,看看另两家老对手,微软有黑科技H ...

  8. java面试每日一题10

    题目:利用递归方法求5! public class Recursion { public static void main(String args[]) throws NumberFormatExce ...

  9. c#播放器

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. Codeforces Round #336 Zuma

    D. Zuma time limit per test:  2 seconds memory limit per test:  512 megabytes input:  standard input ...