update B b set b.value=(select max(a.value) from A a where b.key=a.key) where exists(select 1 from A...c where b.key=c.key) UPDATE A a,(select a....`key`,b.`value` from A INNER JOIN B on a.`key`=b.`key`) b SET a.`value` = b.`value` WHERE a....`key` = b.`key` 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119566.html原文链接:https://javaforall.cn
子查询 2.1 概述 2.2 分类 2.3 标量子查询 2.4 列子查询 2.5 行子查询 2.6 表子查询 ️全篇总结 前言 在SQL查询中,自连接、联合查询和子查询是常用的高级查询技巧,能够帮助我们处理复杂的数据关联和逻辑运算...自连接可以让我们在同一张表中进行多次关联查询,联合查询可以将多个查询结果合并为一个结果集,而子查询则允许我们在查询中嵌套其他查询,实现更复杂的逻辑操作。...a left join emp b on a.managerid = b.id; 注意事项: 在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字 段。...dept d on e.dept_id = d.id ; ️全篇总结 本篇详细介绍了自连接、联合查询和子查询在SQL中的语法结构、分类和常见应用。...通过学习本文,希望这些可以帮你掌握如何使用自连接来处理同一张表中的多次关联查询,如何使用联合查询将多个查询结果合并为一个结果集,以及如何使用子查询实现复杂的逻辑操作。
保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) · 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 · 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期...(时间戳)为后缀 · 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索 引失效,导致查询效率降低) 二、数据库基本设计规范 1...表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) · 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,...则在b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。
,并且最后不要超过32个字符 · 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 · 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) · 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,...则在b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。...在Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。
,并且最后不要超过 32 个字符•临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀•所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...禁止给表中的每一列都建立单独的索引 5.6 版本之前,一个 sql 只能使用到一个表中的一个索引,5.6 以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个 Innodb 表必须有个主键 Innodb 是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) •重复索引示例:primary key(id)、index(id)、unique index(id)•冗余索引示例:index(a,b,...拆分复杂的大 SQL 为多个小 SQL •大 SQL 逻辑上比较复杂,需要占用大量 CPU 进行计算的 SQL•MySQL 中,一个 SQL 只能使用一个 CPU 进行计算•SQL 拆分后可以通过并行执行来提高处理效率
,并且最后不要超过 32 个字符 临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...禁止给表中的每一列都建立单独的索引 5.6 版本之前,一个 sql 只能使用到一个表中的一个索引,5.6 以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个 Innodb 表必须有个主键 Innodb 是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) 重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c...拆分复杂的大 SQL 为多个小 SQL 大 SQL 逻辑上比较复杂,需要占用大量 CPU 进行计算的 SQL MySQL 中,一个 SQL 只能使用一个 CPU 进行计算 SQL 拆分后可以通过并行执行来提高处理效率
bak_为前缀并以日期 (时间戳) 为后缀•所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低) --...禁止给表中的每一列都建立单独的索引 5.6 版本之前,一个 sql 只能使用到一个表中的一个索引,5.6 以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个 Innodb 表必须有个主键 Innodb 是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) •重复索引示例:primary key(id)、index(id)、unique index(id)•冗余索引示例:index(a,b,...拆分复杂的大 SQL 为多个小 SQL •大 SQL 逻辑上比较复杂,需要占用大量 CPU 进行计算的 SQL•MySQL 中,一个 SQL 只能使用一个 CPU 进行计算•SQL 拆分后可以通过并行执行来提高处理效率
bak_为前缀并以日期(时间戳)为后缀 5、所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低) 二、数据库基本设计规范...推荐:MySQL 索引B+树原理,以及建索引的几大原则。 3、每个Innodb表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,则在...b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。...UNION ALL而不是UNION 1、UNION会把两个结果集的所有数据放到临时表中后再进行去重操作 2、UNION ALL不会再对结果集进行去重操作 15、拆分复杂的大SQL为多个小SQL 1、大SQL
【建议】如果对时间精度有要求,建表的时候请注意一下时间精度,比如 timestamp 与 timestamp(3);【强制】无特殊需求,严禁使用分区表字段设计【强制】各表之间相同意义的字段必须同名【建议...两种都保存日期和时间信息,毫秒部分最高精确度都是6位数。建议使用TIMESTAMP(3)。A....TIMESTAMP的插入和查询受时区的影响。如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。【建议】如无特殊需要,字段建议使用NOT NULL属性,可用默认值代替NULL。...,否则大概率会拖慢SQL执行【建议】合理利用覆盖索引,联合索引,避免过多的单列索引,合理使用索引来避免排序和临时表的使用【建议】对超过30个字符长度的列创建索引时,考虑使用前缀索引,比如 idx_cs_guid2...DBA参与【建议】对单表的多次alter操作必须合并为一次操作【强制】分库分表情况下,确保所有库表字段顺序一致【强制】所有数据库账号必须在主库创建【强制】禁止在数据库中存放业务逻辑SQL【建议】对特别重要的库表
,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...占用4字节和INT相同,但比INT可读性高 超出TIMESTAMP取值范围的使用DATETIME类型存储 经常会有人用字符串存储日期型的数据(不正确的做法) 缺点1:无法用日期函数进行计算和比较 缺点...禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个Innodb表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...拆分复杂的大SQL为多个小SQL 大SQL逻辑上比较复杂,需要占用大量CPU进行计算的SQL MySQL中,一个SQL只能使用一个CPU进行计算 SQL拆分后可以通过并行执行来提高处理效率 ---- 数据库操作行为规范
,并且最后不要超过 32 个字符 临时库表必须以 tmp为前缀并以日期为后缀,备份表必须以 bak为前缀并以日期 (时间戳) 为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...禁止给表中的每一列都建立单独的索引 5.6 版本之前,一个 sql 只能使用到一个表中的一个索引,5.6 以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个 Innodb 表必须有个主键 Innodb 是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) 重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c...拆分复杂的大 SQL 为多个小 SQL 大 SQL 逻辑上比较复杂,需要占用大量 CPU 进行计算的 SQL MySQL 中,一个 SQL 只能使用一个 CPU 进行计算 SQL 拆分后可以通过并行执行来提高处理效率
bak_为前缀并以日期(时间戳)为后缀 5、所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低) 二、数据库基本设计规范...3、每个Innodb表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,则在...b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。...UNION ALL而不是UNION 1、UNION会把两个结果集的所有数据放到临时表中后再进行去重操作 2、UNION ALL不会再对结果集进行去重操作 15、拆分复杂的大SQL为多个小SQL 1、大SQL
,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致...占用4字节和INT相同,但比INT可读性高 超出TIMESTAMP取值范围的使用DATETIME类型存储 经常会有人用字符串存储日期型的数据(不正确的做法) 缺点1:无法用日期函数进行计算和比较 缺点...禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个Innodb表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...拆分复杂的大SQL为多个小SQL 大SQL逻辑上比较复杂,需要占用大量CPU进行计算的SQL MySQL中,一个SQL只能使用一个CPU进行计算 SQL拆分后可以通过并行执行来提高处理效率 ---- 数据库操作行为规范
,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...2)禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。...3)每个Innodb表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...一个SQL只能利用到复合索引中的一列进行范围查询 如 有 a,b,c列的联合索引,在查询条件中有a列的范围查询,则在b,c列上的索引将不会被用到, 在定义联合索引时,如果a列要用到范围查找的话,就要把a...UNION ALL 不会再对结果集进行去重操作。 15)拆分复杂的大SQL为多个小SQL 大SQL:逻辑上比较复杂,需要占用大量CPU进行计算的SQL。
并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...占用4字节和INT相同,但比INT可读性高 超出TIMESTAMP取值范围的使用DATETIME类型存储 经常会有人用字符串存储日期型的数据(不正确的做法) 缺点1:无法用日期函数进行计算和比较 缺点...禁止给表中的每一列都建立单独的索引 5.6版本之前,一个sql只能使用到一个表中的一个索引,5.6以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。 3....每个Innodb表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。每个表都可以有多个索引,但是表的存储顺序只能有一种。...拆分复杂的大SQL为多个小SQL 大SQL逻辑上比较复杂,需要占用大量CPU进行计算的SQL MySQL中,一个SQL只能使用一个CPU进行计算 SQL拆分后可以通过并行执行来提高处理效率 ---- 数据库操作行为规范
,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换...表必须有个主键 Innodb是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,则在...b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。...UNION ALL而不是UNION UNION会把两个结果集的所有数据放到临时表中后再进行去重操作 UNION ALL不会再对结果集进行去重操作 15、拆分复杂的大SQL为多个小SQL 大SQL:逻辑上比较复杂
,并且不要超过32个字符 临时数据库命名要以tmp_ 开头并以日期为后缀,备份表以 bak 为前缀并且以日期为后缀 所有存储相同数据的列名和列类型必须一致(一半作为关联列类型不一致会自动进行数据类型隐形转换...如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,则在...b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。...在Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...UNION ALL而不是UNION 1、UNION会把两个结果集的所有数据放到临时表中后再进行去重操作 2、UNION ALL不会再对结果集进行去重操作 15、拆分复杂的大SQL为多个小SQL 1、大SQL
领取专属 10元无门槛券
手把手带您无忧上云