什么是无限查询?

cw8*_*w84 7 sql database

它是没有'WHERE param = value'语句的查询吗?

为此简单道歉...

Bob*_*ica 8

无界查询是搜索条件不是特别具体的查询,因此可能返回非常大的结果集.没有WHERE子句的查询肯定会属于这个类别,但我们暂时考虑其他一些可能性.假设我们有如下表格:

CREATE TABLE SALES_DATA
  (ID_SALES_DATA      NUMBER PRIMARY KEY,
   TRANSACTION_DATE   DATE NOT NULL
   LOCATION           NUMBER NOT NULL,
   TOTAL_SALE_AMOUNT  NUMBER NOT NULL,
   ...etc...);

CREATE TABLE LOCATION
  (LOCATION  NUMBER PRIMARY KEY,
   DISTRICT  NUMBER NOT NULL,
   ...etc...);
Run Code Online (Sandbox Code Playgroud)

假设我们想要提取特定交易,并且我们知道销售的ID:

SELECT * FROM SALES_DATA WHERE ID_SALES_DATA = <whatever>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,查询是有界的,我们可以保证它将拉入一行或零行.

另一个有界查询的例子,但结果集很大,就是当23区的主管说"我想看看去年每天在我所在地区的每家商店的总销售额"时产生的结果,这将是喜欢

SELECT LOCATION, TRUNC(TRANSACTION_DATE), SUM(TOTAL_SALE_AMOUNT)
  FROM SALES_DATA S,
       LOCATION L
  WHERE S.TRANSACTION_DATE BETWEEN '01-JAN-2009' AND '31-DEC-2009' AND
        L.LOCATION = S.LOCATION AND
        L.DISTRICT = 23
  GROUP BY LOCATION,
           TRUNC(TRANSACTION_DATE)
  ORDER BY LOCATION,
           TRUNC(TRANSACTION_DATE)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,查询应返回区域23中每个商店的365(或更少,如果商店不是每天开放)行.如果区域中有25个商店,它将返回9125行或更少.

另一方面,假设我们的销售副总裁想要一些数据.他/她/它不太确定想要什么,但他/她/它很确定无论发生在一年的前六个月......不确定一年......并且不确定关于位置,或者 - 可能在23区(他/她/与过去6年经营23区的个人发生争执,自那场高尔夫锦标赛以来......好吧,没关系......但如果问题可以挂在23区的导演的门上,那么就这样吧!)......当然他/她/它想要所有的细节,并把它放在他/她/它的办公桌上甜蜜的!因此我们得到一个类似的查询

SELECT L.DISTRICT, S.LOCATION, S.TRANSACTION_DATE,
       S.something, S.something_else, S.some_more_stuff
  FROM SALES_DATA S,
       LOCATIONS L
  WHERE EXTRACT(MONTH FROM S.TRANSACTION_DATE) <= 6 AND
        L.LOCATION = S.LOCATION
  ORDER BY L.DISTRICT,
           S.LOCATION
Run Code Online (Sandbox Code Playgroud)

这是无限查询的示例.它会返回多少行?好问题 - 这取决于商业条件如何,开放的地点数量,2月份的天数等等.

更简单地说,如果你可以查看一个查询并且非常清楚它将返回多少行(即使这个数字可能相对较大),查询也是有界限的.如果你不能,它是无限的.

分享和享受.