无界查询是搜索条件不是特别具体的查询,因此可能返回非常大的结果集.没有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月份的天数等等.
更简单地说,如果你可以查看一个查询并且非常清楚它将返回多少行(即使这个数字可能相对较大),查询也是有界限的.如果你不能,它是无限的.
分享和享受.
| 归档时间: |
|
| 查看次数: |
2481 次 |
| 最近记录: |