数据库
首页 > 数据库> > mysql-子查询以及使用相关子查询在外部进行引用的可能性

mysql-子查询以及使用相关子查询在外部进行引用的可能性

作者:互联网

我正在刷新我的SQL.
我正在阅读有关子查询的信息,以及在相关子查询之外进行引用的可能性.
例:

SELECT *  
FROM ORDERS O  
WHERE 'ROAD BIKE' =  
(SELECT DESCRIPTION FROM PART P WHERE P.PARTNUM = O.PARTNUM)  

这与联接等效:

SELECT O.ORDEREDON, O.NAME,  
O.PARTNUM, O.QUANTITY, O.REMARKS  
FROM ORDERS O, PART P  
WHERE P.PARTNUM = O.PARTNUM AND P.DESCRIPTION = 'ROAD BIKE'  

我的问题是我没有得到第一个表格,以及何时/为什么使用它.外部引用的查询什么时候有用?

解决方法:

订单具有零件编号的引用,因此“订单”表具有零件编号的外键.

我们需要零件号为“ Road Bike”的所有订单.

第一种形式首先对每个记录进行子查询,以检查O.PARTNUM是否为“ Road Bike”的零件号.

想到的方法是,主要查询是遍历Orders表中的每个记录.在每个记录上,它都会执行一个子查询,在查询中使用它的PARTNUM字段.因此,如果在子查询中使用了订单记录的PARTNUM,请选择在具有该PARTNUM的PART表中查找记录,然后选择DESCRIPTION字段.然后,主查询的where子句检查“ Road Bike”是否等于从子查询返回的DESCRIPTION.

我建议不要使用第一种形式,因为它是一个相关查询,出于性能原因,应避免使用相关查询,因此请使用第二种形式.第一种形式的更好版本是:

SELECT *  
FROM ORDERS O  
WHERE O.PARTNUM =  
(SELECT P.PARTNUM FROM PART P WHERE DESCRIPTION = 'ROAD BIKE')

这不是相关查询.数据库可以执行一次子查询,以“ ROAD BIKE”作为描述获取记录的PARTNUM,然后在条件WHERE O.PARTNUM等于子查询结果的情况下运行主查询.

标签:correlated-subquery,subquery,sql,mysql
来源: https://codeday.me/bug/20191031/1974326.html