ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL基础之MySQL必知必会(十四)使用子查询

2020-07-24 21:34:41  阅读:276  来源: 互联网

标签:语句 cust 必知 MySQL 查询 必会 WHERE SELECT name


子查询

SELECT语句是SQL的查询语句, 目前我们所看到的SELECT语句都是简单查询, 即从单个数据库表中检索数据的单条语句。

任何SQL语句都是查询。但查询一般指的都是SELECT语句

SQL还允许创建子查询, 即嵌套在其他查询中的查询。

 

利用子查询进行过滤

可以使用子查询把3个查询组合成一条语句。

MariaDB [crashcourse]> SELECT cust_name, cust_contact FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2'));
+----------------+--------------+
| cust_name      | cust_contact |
+----------------+--------------+
| Coyote Inc.    | Y Lee        |
| Yosemite Place | Y Sam        |
+----------------+--------------+
2 rows in set (0.001 sec)

MariaDB [crashcourse]> 

在WHERE中子句中使用子查询能够编写出功能强大并且灵活的SQL语句。对于能嵌套的子查询的数目没有限制, 不过在实际使用时由于性能的限制, 不能嵌套太多的查询。

在WHERE子句中使用子查询, 应该保证SELECT语句具有WHERE子句相同数目的列, 通常子查询将返回单个列并且与单个列匹配, 但如果需要时也可以使用多个列。

使用子查询并不总是执行这种类型的数据检索的最有效的方法, 应该它的性能较低

 

作为计算字段使用子查询

使用子查询的另一方法是创建计算字段

MariaDB [crashcourse]> SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_id) AS orders FROM customers ORDER BY cust_name;
+----------------+------------+--------+
| cust_name      | cust_state | orders |
+----------------+------------+--------+
| Coyote Inc.    | MI         |      2 |
| E Fudd         | IL         |      1 |
| Mouse House    | OH         |      0 |
| Wascals        | IN         |      1 |
| Yosemite Place | AZ         |      1 |
+----------------+------------+--------+
5 rows in set (0.003 sec)

MariaDB [crashcourse]> 

子查询中的WHERE子句与前面使用的WHERE子句稍有不同, 因为它使用了完全限定列名。如果不使用完全限定列名那么会产生歧义, 从而导致结果错误。

虽然子查询在构造这种SELECT语句时极有用, 但必须注意限制有歧义性的列名。

 

标签:语句,cust,必知,MySQL,查询,必会,WHERE,SELECT,name
来源: https://www.cnblogs.com/featherwit/p/13374643.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有