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