MySQL基础知识(四)——子查询和连接

【MySQL】左连接右连接内连接与Hash连接、子查询原理与实战(MySQL专栏启动)_左连接子查询 许多开发人员不自觉地认为JOIN 会降低 SQL 的性能效率,因此他们将多表 SQL 拆分为单表查询,认为这会影响SQL执行的效率,原因是开发人员不了解JOIN实现过程。Hash JOIN出现在MySQL 8.0的执行计划中,Hash JOIN 扫描关联的两个表:首先,在扫描驱动器表的过程中创建一个哈希表;本文介绍MySQL数据库中的左连接、右连接、内连接与Hash连接的工作原理,并分析子查询与 JOIN 的不同,根据本文所学提供一些工作中需要掌握的实战技巧。即使左表中没有匹配,也从右表返回所有的行。 阅读详情

一.子查询

先创建一张商品表,后续对其进行操作。

# 创建一个商品表,商品id:goods_id 商品名称:goods_name 商品分类:goods_cate 
# 商品品牌:brand_name 商品价格:goods_price 是否上架:is_show  是否已售空:is_saleoff
CREATE TABLE IF NOT EXISTS tbl_goods(
    goods_id    SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    goods_name  VARCHAR(150) NOT NULL,
    goods_cate  VARCHAR(40)  NOT NULL,
    brand_name  VARCHAR(40)  NOT NULL,
    goods_price DECIMAL(15,3) UNSIGNED NOT NULL DEFAULT 0,
    is_show     BOOLEAN NOT NULL DEFAULT 1,
    is_saleoff  BOOLEAN NOT NULL DEFAULT 0
  );

1.子查询定义

   (1) 定义:

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

        语法: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);

         其中SELECT * FROM t1,称为Outer Query/Outer Statement

         SELECT col2 FROM t2,称为SubQuery

  (2)要求:

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

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

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

  (3)返回值:

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

2.使用比较运算符的子查询

         使用比较运算符的子查询如=,>,<.>=,<=,<>,!=,<=>

        (1) 语法:operand comparison_operator subquery  

# 查商品表的平均价格
SELECT AVG(goods_price) FROM tbl_goods;
# 查商品表的平均价格,四舍五入保留两位小数
SELECT ROUND(AVG(goods_price),2) FROM tbl_goods;
# 上一步算出商品表商品平均价格为5845.10;查商品表价格大于平均水平的商品
SELECT * FROM tbl_goods WHERE goods_price >= 5845.10;
# 使用子查询查商品表价格大于平均水平的商品,比较运算可以产生子查询
SELECT * FROM tbl_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tbl_goods);

        (2)用ANY,SOME或ALL修饰的比较运算符

             语法:operand comparison_operator ANY (subquery)  

                        operand comparison_operator SOME (subquery)  

                       operand comparison_operator ALL (subquery)  

             ANY,SOME是符合任何一个就行,ALL是要符合所有,

            所以各个运算符和ANY,SOME,ALL关键字组合结果如下:

运算符/关键字ANYSOMEALL
>,>=最小值最小值最大值
<.<=最大值最大值最小值
=任意值任意值 
<>,!=  任意值

               如果使用运算符和子查询结果去比较,子查询结果不仅仅是一条会报错:

               ERROR 1242 (21000): Subquery returns more than 1 row

              这时候就要适当的使用ANY,SOME和ALL修饰比较运算符。

# 使用>ANY, 则大于最小值,即价格大于2899.000的结果集
SELECT * FROM tbl_goods WHERE goods_price > ANY(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# 使用>SOME, 和大于ANY一样,大于最小值,即价格大于2899.000的结果集
SELECT * FROM tbl_goods WHERE goods_price > SOME(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# 使用>ALL,要大于最大值,即价格大于9188.000的结果集
SELECT * FROM tbl_goods WHERE goods_price > ALL(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');

# 使用<ANY, 则小于最大值,即价格小于9188.000的结果集
SELECT * FROM tbl_goods WHERE goods_price < ANY(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# 使用<SOME, 和小于ANY一样,小于最大值,即价格小于9188.000的结果集
SELECT * FROM tbl_goods WHERE goods_price < SOME(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# 使用<ALL,要小于最小值,即价格小于2899.000的结果集
SELECT * FROM tbl_goods WHERE goods_price < ALL(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');

# 使用=ANY, 则等于3499.000   2899.000  9188.000  3699.000中的任意值
SELECT * FROM tbl_goods WHERE goods_price = ANY(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# 使用=SOME, 和等于ANY一样, 使用=ANY, 则等于3499.000   2899.000  9188.000  3699.000中的任意值
SELECT * FROM tbl_goods WHERE goods_price = SOME(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# 使用=ALL,是不会出现结果集的,因为不可能有一个价钱即等于3499.000,又等于 2899.000  9188.000  3699.000中的其他值
SELECT * FROM tbl_goods WHERE goods_price = ALL(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');

# 使用!=ALL,出现的结果集是不等于3499.000   2899.000  9188.000  3699.000这几个值外的其他值
SELECT * FROM tbl_goods WHERE goods_price != ALL(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');

3.使用[NOT] IN的子查询

          语法:operand comparison_operator [NOT] IN (subquery)

           =ANY运算符与IN等效

           !=ALL或<>ALL运算符与NOT IN等效

# IN,与使用=ANY结果等效, 则等于3499.000   2899.000  9188.000  3699.000中的任意值
SELECT * FROM tbl_goods WHERE goods_price IN (SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');
# NOT IN,与使用!=ALL结果等效,出现的结果集是不等于3499.000   2899.000  9188.000  3699.000这几个值外的其他值
SELECT * FROM tbl_goods WHERE goods_price NOT IN(SELECT goods_price FROM tbl_goods WHERE goods_cate = '台式机');

4.使用[NOT] EXISTS的子查询

          如果子查询返回任何行,EXISTS将返回TRUE;否则返回FALSE。

5.INSERT...SELECT   使用子查询将数据插入表中

            语法:INSERT [INTO] tbl_name[(col_name,...)] SELECT ...

# 将查询结果写入数据表
# 将原有表中的goods_cate值插入新的商品分类表
INSERT tbl_goods_cates (cate_name) SELECT goods_cate FROM tbl_goods GROUP BY goods_cate;

6.CREATE...SELECT 创建数据表同时将查询结果写入到数据表

            语法:CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] select_statement

# 创建一个商品品牌表,并将原有商品表中的品牌插入
CREATE TABLE tbl_goods_brands (
		brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
		brand_name VARCHAR(40) NOT NULL
		) 
SELECT brand_name FROM tbl_goods GROUP BY brand_name;
# 由于两个表的字段名称相同,所以要给两张表设置别名。使用内连接更新 tbl_goods的brand_name字段
UPDATE tbl_goods AS goods INNER JOIN tbl_goods_brands AS brands ON goods.brand_name = brands.brand_name SET goods.brand_name = brands.brand_id;
# 修改商品分类和商品品牌为数字型,因为数字型所占字符少
ALTER TABLE tbl_goods CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL, CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

若是两个表有相同字段名,一定要给两张表设置别名,否则会报错:ERROR 1052 (23000): Column 'brand_name' in on clause is ambiguous 

二.连接 

MySQL在SELECT语句,多表更新,多表删除语句中支持JOIN操作。

            语法:

             table_reference {[INNER | CROSS] JOIN | {LIFE | RIGHT} [OUTER] JOIN} table_reference ON conditional_expr

 1.连接类型

         INNER JOIN,内连接,在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。

         LEFT[OUTER] JOIN,左外连接。

         RIGHT[OUTER] JOIN,右外连接。

 2.连接条件

          使用ON关键字来设定连接条件,也可以使用WHERE来代替。

          通常使用ON关键字来设定连接条件,

          使用WHERE关键字进行结果集记录的过滤。          

 3.数据表参照

          table_reference 

          tbl_name [[AS] alias] | table_subquery [AS] alias 

          数据表可以使用tbl_name AS alias_name 或tbl_name alias_name 赋予别名

          table_subquery可以作为子查询使用在FROM语句中,这样的子查询必须为其赋予别名。

  4.内连接

          通常使用INNER JOIN。显示左表及右表符合连接条件的记录。

# 使用内连接查询商品表和商品分类表的交集
SELECT goods.goods_id,goods.goods_name,cates.cate_name FROM tbl_goods goods INNER JOIN tbl_goods_cates cates ON goods.cate_id = cates.cate_id;

         内连接补充:

         如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE字句中尝试以下操作:col_name IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连接条件的记录后停止搜做搜索更多的行。

 5.左外连接

         显示左表的全部记录和右表符合连接条件的记录。

# 使用左外连接查询商品表和商品分类表的交集,显示左表的全部信息和右表符合条件的信息,如果右表没有符合条件的记录,则返回空
SELECT goods.goods_id,goods.goods_name,cates.cate_name FROM tbl_goods goods LEFT JOIN tbl_goods_cates cates ON goods.cate_id = cates.cate_id;

 6.右外连接

         显示右表的全部记录和左表符合连接条件的记录。

# 使用右外连接查询商品表和商品分类表的交集,显示右表的全部信息和左表符合条件的信息,如果左表没有符合条件的记录,则返回空
SELECT goods.goods_id,goods.goods_name,cates.cate_name FROM tbl_goods goods RIGHT JOIN tbl_goods_cates cates ON goods.cate_id = cates.cate_id;

 7.多表连接 

# 多表连接要注意ON后面的连接条件
SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tbl_goods AS goods 
INNER JOIN tbl_goods_cates AS cates ON goods.cate_id = cates.cate_id 
INNER JOIN tbl_goods_brands AS brands ON goods.brand_id = brands.brand_id;

 8.外连接补充:

         A LEFT JOIN B join_condition

        数据表A中有的数据才能在结果集中显示出来,否则不能显示出来。

        数据表B的结果集依赖数据表A。

        数据表A的结果集根据左连接条件依赖所有数据表(B表除外)。

        左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。

        如果数据表A的记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的记录。

 9.自身连接:

     同一个数据表对其自身进行连接

# 创建一张类别表,有三个字段 类型Id:type_id  类型名称:type_name 父类名称:parent_id
   CREATE TABLE tbl_goods_types(
     type_id   SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     type_name VARCHAR(20) NOT NULL,
     parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0
  ); 
# 以子表作为左表,自身连接,查子类的父类名称
SELECT
	children.type_id,
	children.type_name,
	parent.type_name AS parent_type_name 
FROM
	tbl_goods_types AS children
	LEFT JOIN tbl_goods_types AS parent ON parent.type_id = children.parent_id;
# 以父表作为子表,自身连接,查子类的名称
SELECT
	parent.type_id,
	parent.type_name,
	children.type_name AS children_type_name 
FROM
	tbl_goods_types AS parent
	LEFT JOIN tbl_goods_types AS children ON parent.type_id = children.parent_id;
# 以父表作为子表,自身连接,查父类下子类的数目,并根据父表名称进行分类,根据父表id进行排序
SELECT
	parent.type_id,
	parent.type_name,
	count(children.type_name) AS children_type_count 
FROM
	tbl_goods_types AS parent
	LEFT JOIN tbl_goods_types AS children ON parent.type_id = children.parent_id 
GROUP BY
	parent.type_name 
ORDER BY
	parent.type_id;

 在使用GROUP BY想对结果集进行分组的时候,发生1055报错:

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'kimtest.parent.type_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

我使用的数据库版本是:8.0.11.

解决办法如下:

# 查看sql_model参数命令
SELECT @@SESSION.sql_mode;
# 由于sql_model参数命令中有ONLY_FULL_GROUP_BY影响导致了异常,所以去掉ONLY_FULL_GROUP_BY这个值
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这里有个小技巧,MySQL的所有报错都可以直接通过MySQL+编号来查找问题出现原因以及可解决办法.

MySQL 中 JOIN 和子查询的区别与使用场景 本文详细探讨了 MySQL 中 JOIN 和子查询的区别及其最佳使用场景。JOIN 用于基于条件组合多个表的数据,支持多种类型如 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN,通常性能更优,适合处理大数据集和复杂表关系。子查询则用于嵌套查询,适用于复杂筛选和计算逻辑,但可能影响性能。通过具体代码示例,本文展示了 JOIN 和子查询的不同应用场景,并建议根据实际需求选择合适的工具,以提高查询效率和代码可维护性。 阅读详情

相关推荐

MySQL外连接与子查询

外连接和子查询是 MySQL 查询中的两个核心工具。外连接可以帮助查找两个表中未匹配的数据,尤其在需要分析未关联信息时非常有用。而子查询则允许嵌套查询,使得复杂的数据过滤和动态条件查询更加简单直观。在实际应用中,这两种查询方法可以相辅相成,通过结合外连接和子查询,能够解决更加复杂的业务问题,实现高效的数据查询和分析。理解并熟练掌握这两种方法,将为数据库操作带来更多的灵活性和强大的功能。

Mr数据杨 1221

Mysql 设计超市经营管理系统,包括商品信息表(goods) 和 商品类型表(goodstype)

数据字典 表1:商品信息表(goods) 序号 字段名 说明 数据类型 约束 备注 1 goodsid 商品编号 Int 主键,自动增长 2 goodsname 商品名称 .

杨明金的博客 1万+

Hadoop实战:用MapReduce分析YouTube视频数据集(附完整代码)

本文提供了一个完整的Hadoop MapReduce实战教程,指导读者使用MapReduce框架分析YouTube视频数据集,统计不同视频类别的数量分布。教程涵盖从数据获取、预处理、HDFS操作到Java代码编写、作业提交及结果可视化的全流程,并附有完整代码,帮助开发者深入理解分布式计算思想。

lilh34434的博客 198

mysql商品查询_mysql的查询、子查询及连接查询(商城查询常用)

一、mysql查询的五种子句where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数)1、where常用运算符:比较运算符> , < ,= , != (< >),>= , <=in(v1,v2..vn)mysql>selectid,namefromuserwhereid...

weixin_32200323的博客 3024

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1514

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1123

MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)

同样的,使用goods表来练习子查询,表结构如下:    所有数据(cat_id与category.cat_id关联):    类别表:    mingoods(连接查询时作测试)       回到顶部 一、子查询 1、where型子查询:把内层查询的结果作为外层查询的比较条件 1.1 查询id最大的一件商品(使用排序+分页实现)   :mysql&gt; SELE...

遇见即为缘 1324

10-Oracle 23 ai Vector Search 概述和参数

企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation :RAG)功能,RAG能够将LLM的生成能力与知识库的精准资料库进行检索结合,将大模型部署在内部同时将私有的数据进行LLM的检索避免泄露企业专用的数据同时提高的准确性。于是如何将数据存入向量数据库以及向量查询等这些基本功能变得必备和重要。

远方的专栏 1292

连接查询的综合应用

连接查询的综合应用 综合使用连接查询,聚合函数和分组查询可以实现很多复杂的查询需求。 例如:(1)统计每件商品的销售数量和销售金额,要求按照销售量和销售金额升序显示商品名,销售量和销售金额。 由于需要统计每件商品的销售数量和销售金额,即便某种商品没有被订购过也需要显示,所以可以采用左连接的方式依次建立商品表和订单明细表的联系,SQL语句如下: SELECT goodsName 商品名, SUM(od.quantity) 销售量, SUM( od.quantity * g.unitPrice )

m0_58865332的博客 322

可乐学习NVMe之一:为什么SSD需要NVMe

1. NVMe SSD 结构简图 整体来看,NVMe SSD可以分为三部分,host端的驱动NVMe Driver、PCIe+NVMe实现的控制器以及NAND Flash+DDR4/DDR5存储介质。 芯片回片后Host侧软件或者驱动开发主要在应用层,通过一些测试工具进行benchmark跑分测试,performance性能分析,latency分析、stress-testing等等: 那么,接下来阐述为什么SSD需要NVMe,并再后续的文章介绍NVMe协议分析,个人针对协议的理解,如果有不当之处,还请各

Lucky 3166

在 SAP GUI Editor 中使用 OpenAI 自动生成 ABAP 代码 —— 技术实践与思考

在传统 SAP GUI Editor 场景下融入OpenAI开发者表达意图,模型负责实现。随着的持续演进,以及Joule等官方 Copilot 的加入,未来 ABAP 开发形态必将更加专注业务逻辑与架构设计,而把样板式编码交给 AI 自动完成。现在就动手试试,让你的下一段 ABAP 由 AI 来书写吧!

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 706

MySQL连接查询

1.什么是连接查询 连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。

weixin_52482601的博客 398

YOLOv11的流形学习压缩:局部线性嵌入(LLE)引导的特征降维,实现在CSP模块中嵌入流形结构保持约束

摘要 本文探讨了流形学习在YOLOv11目标检测模型中的应用,重点研究局部线性嵌入(LLE)方法对CSP模块的特征压缩优化。针对深度学习模型的高维特征冗余问题,LLE通过三个关键步骤实现非线性降维:寻找k近邻、计算重构权重和低维嵌入,相比传统PCA方法能更好地保持数据的局部结构。文章详细分析了LLE的数学原理和参数选择策略,并提出在YOLOv11的CSP模块中嵌入流形约束的创新设计。通过特征分割前、处理过程和融合阶段引入流形一致性损失函数,该方法能在降低特征维度的同时保持原始流形结构,从而提升模型的计算效率

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1380

MySQL基础知识学习——多表查询(内连接 外连接 自连接)、子查询(四)

多表关系 多表查询 内连接 外连接 自连接 子查询 定义 多表查询——子查询 子查询(匹配一个值)子查询(匹配多个值)子查询实例(去重、不去重、标量子、列子、行子查询)

weixin_45496521的博客 449

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 855

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL基础(六)-----子查询和连接查询

子查询简而言之就是在一个查询里面再嵌套一个或者多个查询语句; 连接查询指的就是将多个表或者单个表连接在一起进行查询

leen的博客 5007

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

mysql子查询和连接查询的区别吗_子查询和联表查询的区别和优化

一 子查询1 MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作2 子查询虽然很灵活,但是执行效率并不高3 执行子查询时,SQL语句中进行嵌套了SQL语句,这就类似于循环了4例如有两张表,我先查一张表,查一次,然后拿这个结果去筛选查另一张表,查两次二 连接查询(join)1 可以使用连接查询(JOIN)代替子...

weixin_35743986的博客 7676

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mysql 连接查询和子查询

连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当查询数据时,通过连接操作查询出存放在多个表中的不同实体的信息。当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询。本节将介绍多表之间的内连接查询、外连接查询以及复合条件连接查询。

一路向前 1323

MySQL基础-子查询

子查询概念:子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较子查询的基本语法结构:说明:子查询(内查询)在主查询之前一次执行完成子查询的结果被主查询(外查询)使用子查询要包含在括号内建议将子查询放在比较条件的右侧,便于阅读。

~ 1万+

MySQL 实验 11:数据查询(4)—— 连接查询与子查询

介绍 MySQL 的连接查询以及子查询

睿思达DBA 2630

MySQL 连接查询与子查询全解析

介绍了MySQL中处理多表数据的两种核心技术:连接查询和子查询。

wsygjbr的博客 1005

MySQL 子查询(四)子查询的优化、将子查询重写为连接

  MySQL 5.7 ref ——13.2.10.10优化子查询 十、子查询的优化   开发正在进行中,因此从长远来看,没有什么优化建议是可靠的。以下列表提供了一些您可能想要使用的有趣技巧。See also Section8.2.2, “Optimizing Subqueries, Derived Tables, and View References”.   10.1 优化子查询中行的...

weixin_30344131的博客 257

【MySQL】子查询、合并查询、表的连接

实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。子查询出现的两种场景:1.在where后出现充当筛选筛选条件。在实际应用中为了合并多个select的结果,可以使用集合操作符union、union all。该操作符用于取得两个select结果的并集。如果联合查询,左侧的表完全显示。如果联合查询,右侧的表完全显示。自动去掉结果集中的重复行。自动去掉结果集中的重复行。表的连接分为内连接和外连接。返回一行记录的子查询。

2401_84568462的博客 1372

MySQL:子查询(全面详解)

本博主将用优快云记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

m0_74823963的博客 3247

[mysql]相关子查询

我们前面把单行子查询和多行子查询就已经说完了,我们现在要把继续把相关子查询的内容给大家说明白,因为之前用的都是不相关子查询的案例,我们来谈一谈相关子查询,记住单行子查询和多行子查询是可以进行相关子查询,只是我们刚才写的案例都是相关子查询的案例.我们看一下,如果子查询的执行依赖于外部查询,用到了外部的表,每次查询的时候都要执行一次外部查询,那么这样的子查询就被我们叫做关联子查询,下面列出了子查询的步骤,比如我们之前的案例,查询比abel这个人工资高的员工姓名和工资。

qq1021091799qq的博客 1655

MySQL的子查询和连接知识

MySQL子查询与连接 子查询: 1.子查询是指出现在【其他SQL语句内】的SELECT子句 eg: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement) SELECT column1 FROM t2

YangJack-前端开发 1402
上一篇: MySQL基础知识(三)——数据表记录读写操作
下一篇: MySQL基础知识(五)——函数
田小江爱分享
博客等级 码龄10年 34粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值