欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL使用子查询

程序员文章站 2024-01-15 21:39:58
...

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

一、利用子查询进行过滤

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

SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2';

执行结果:
MySQL使用子查询

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

执行结果:
MySQL使用子查询

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

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

执行结果:
MySQL使用子查询

列必须匹配:在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;      

执行结果:
MySQL使用子查询

相关标签: mysql 子查询