MySQL使用子查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaoxd200808501/article/details/78401912

说明:本文所使用的数据库样例表创建脚本下载地址:https://github.com/zhaoxd298/mysql_scripts

一、利用子查询进行过滤

  在数据库操作中可能会经常碰到需要的数据需要通过查询多个关系表才能得到,即可能某条查询需要用到其他查询语句的结果,请分析下面两个例子:

SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2';

执行结果:
这里写图片描述

SELECT cust_id
FROM orders
WHERE order_num IN (20005, 20007);

执行结果:
这里写图片描述

  第二条查询中用到了第一条的结果。如果是在应用程序中的话需要先保存第一次的查询结果,然后再根据保存的结果查询第二次,这无疑增加了应用程序的难度,MySQL支持将第一条查询语句作为第二条的子查询语句,组合后的查询语句如下:

SELECT cust_id
FROM orders
WHERE order_num IN (SELECT order_num
                    FROM orderitems
                    WHERE prod_id = 'TNT2');

执行结果:
这里写图片描述

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

二、作为计算字段使用子查询

  下面例子中在计算字段使用子查询:

SELECT cust_name,
       cust_state,
       (SELECT COUNT(*)
        FROM orders
        WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;      

执行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zhaoxd200808501/article/details/78401912