MySQL子查询的实现示例!

MySQL子查询的实现示例!

MySQL中的子查询是一个强大的功能,本文主要介绍了MySQL子查询的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

MySQL中的子查询是一个强大的功能,子查询是指在一个查询语句中嵌套另一个查询语句的情况。嵌套查询中的内部查询语句可以使用外部查询语句的结果来进行过滤、联接或作为子查询的值,它允许我们在一个查询内部嵌套另一个查询。通过子查询可以实现多表查询

子查询可以在 SELECTUPDATE 、DELETE 、FROM 等语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在 WHERE 子句中。

 

子查询的类型

  • 标量子查询:返回单个值的子查询,常用于比较操作。
  • 列子查询:返回一列值的子查询,常用在IN、ANY、ALL等比较操作中。
  • 行子查询:返回一行数据的子查询,通常与单行比较操作符(如=)一起使用。
  • 表子查询:返回多行多列数据的子查询,结果集通常被当作一个临时表在FROM子句中引用。

子查询语句

子查询语句需要使用圆括号括起来,子查询的结果通常被用作外部查询的条件或数据源

1
2
3
4
SELECT lastName, firstName
FROM employees
WHERE officeCode IN
(SELECT officeCode FROM offices WHERE country = 'USA');

2024080410412928

MySQL会先执行子查询语句,并将查询结果返回到父查询,执行父查询。

子查询的功能也可以通过表连接完成,但是子查询会使 SQL 语句更容易阅读和编写。

一般来说,表连接(内连接和外连接等)都可以用子查询替换,但反过来却不一定,有的子查询不能用表连接来替换。子查询比较灵活、方便、形式多样,适合作为查询的筛选条件,而表连接更适合于查看连接表的数据。

FROM 子句中的子查询

可以在 FROM 子句中使用子查询(Subquery),使用它来创建一个派生表(Derived table)或临时表,然后将该表与其他表进行连接或联接操作

1
2
3
4
5
6
7
SELECT t1.column1, t2.column2
FROM (SELECT column1 FROM table1 WHERE condition) AS t1
JOIN table2 AS t2 ON t1.column1 = t2.column1;
'''
子查询根据给定的条件检索column1,将子查询结果命名为t1,在父查询中将t1当作一张表使用,与t2进行连接,使用公共列进行联接操作。
'''
1
2
3
4
5
6
SELECT t1.column1, t1.column2
FROM (
SELECT column1, column2
FROM table1
WHERE column3 IN (SELECT column3 FROM table2 WHERE condition)
) AS t1;

WHERE 子句中的子查询

在子查询的 WHERE 子句中,可以使用各种条件表达式和逻辑运算符来指定筛选条件。根据具体的需求,可以在子查询中使用 WHERE 子句来进行以下操作:

  • 单个条件筛选:
1
2
3
SELECT column1, column2
FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);
  • 多个条件筛选:
1
2
3
SELECT column1, column2
FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE condition1 AND condition2);
  • 范围筛选:
1
2
3
4
5
6
SELECT column1, column2
FROM table1
WHERE column1 IN
(SELECT column1 FROM table2
WHERE column2 BETWEEN value1 AND value2
);
  • 子查询中的多级嵌套:
1
2
3
4
SELECT column1, column2
FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE column2 IN (SELECT column2 FROM table3 WHERE condition)
);

子查询中的 IN 、NOT IN 子句

在子查询中,可以使用 IN 和 NOT IN 运算符来进行集合匹配和排除的操作,判断目标列是否在子查询集合中。

子查询中的 EXISTS 子句

子查询中,EXISTS 和 NOT EXISTS 是用于判断子查询是否返回数据的条件运算符。通常以关联子查询形式使用。

若返回结果为true,则会继续执行父查询,否则不执行。

1
2
3
SELECT column_list FROM table_name
WHERE
EXISTS / NOT EXISTS (condition)

EXISTS用于判断指定的子查询是否返回了至少一行结果。如果子查询返回了至少一行结果,那么EXISTS

NOT EXISTS则相反,用于判断指定的子查询是否不返回任何行结果。如果子查询没有返回任何行结果,那么NOT EXISTS条件会被认为是满足的。

关联子查询

关联子查询(Correlated Subquery)是指在子查询中引用了外部查询的列或表,在父子查询之间建立了相关联关系

关联子查询可根据外部查询的每个结果进行计算和筛选,因此它的执行频率与外部查询的结果集大小相关。

语法结构:

1
2
3
4
5
6
7
8
SELECT column1, column2
FROM table1
WHERE condition
AND column3 OPERATOR (
SELECT column4
FROM table2
WHERE table2.column5 = table1.column6
);

关联子查询常用的运算符包括 INANYALL 等用于比较和筛选数据的操作符。根据具体的需求,关联子查询可以在 SELECTWHEREHAVING 等子句中使用。

注意,关联子查询的性能通常较低,因为它会根据外部查询的结果执行多次。为了优化性能,可以考虑使用其他表达方式或采取其他优化措施,如合理使用联接操作、索引优化等。

注意事项

  • 数据量和性能:子查询可能会引入额外的开销,特别是在处理大量数据、结果集很大时。对于复杂的查询,子查询可能会增加查询的执行时间。要确保子查询的效率,并根据需要考虑优化查询或使用其他查询方法。
  • 嵌套层数:过多的嵌套子查询可能导致查询难以理解和管理,导致查询复杂度增加。可以考虑使用连接操作(JOIN)或其他查询优化技术来改进查询性能。
  • 子查询结果的准确性:在使用子查询时,必须确保子查询返回的结果是准确的。这包括正确的筛选条件、关联关系以及使用正确的聚合函数(如果适用)等。如果子查询结果不准确,可能会导致整个查询结果不正确。
  • 子查询的引用:在某些情况下,可能需要在子查询中引用外部查询的列或条件。确保正确地使用别名(ALIAS)和适当的查询引用方式,以避免语法错误和结果不符合预期。
  • 子查询的优化:在某些情况下,子查询可以通过调整查询逻辑、使用临时表或引入适当的索引等方法进行优化。考虑优化子查询以提高查询性能和效率。
  • 只出现在子查询中而没有出现在父查询中的表不能包含在输出列中
    多层嵌套子查询的最终数据集只包含父查询(即最外层的查询)的 SELECT 子句中出现的字段,而子查询的输出结果通常会作为其外层子查询数据源或用于数据判断匹配。

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

大强考研英语词汇5500精讲!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>