sql - 什么是无界查询?

标签 sql database

无界查询是没有WHERE param = value 语句的查询吗?

很抱歉这个简单。

最佳答案

无限查询是一种搜索条件不是特别具体的查询,因此可能会返回非常大的结果集。没有 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...);

假设我们想要拉入一个特定的交易,并且我们知道销售的 ID:

SELECT * FROM SALES_DATA WHERE ID_SALES_DATA = <whatever>

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

另一个有界查询的例子,但有一个大的结果集,当 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)

在这种情况下,查询应该为 23 区的每家商店返回 365(或更少,如果商店不是每天营业)行。如果该地区有 25 家商店,它将返回 9125 行或更少。

另一方面,假设我们的销售副总裁想要一些数据。他/她/不太确定想要什么,但他/她/很确定无论今年前六个月发生了什么……不太确定哪个年......也不确定地点 - 可能在 23 区(他/她/它在过去 6 年中与管理 23 区的个人发生争执,自从那场高尔夫锦标赛......好吧,没关系......但如果一个问题可以卡在 23 区主任的门上,那就这样吧!)......当然他/她/它想要所有细节,并把它放在他/她/它的 table 太甜了!因此我们得到一个看起来像这样的查询

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

这是一个无限查询的例子。它会返回多少行?好问题 - 这取决于业务状况、营业地点的数量、2 月的天数等。

更简单地说,如果您可以查看查询并非常清楚它将返回多少行(即使该数字可能相对较大),则该查询是有界的。如果你不能,那就是无限的。

分享和享受。

关于sql - 什么是无界查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068142/

相关文章:

node.js - MongoDB 查询返回空嵌套对象

MySQL:包括 COUNT 个 SELECT 查询结果作为列(不分组)

database - 在数据库中存储和索引二进制字符串

php - 通过比较两个数据库表来删除匹配值 Codeigniter/Mysql

java - 如何从与mysql中的jsp中的外键关联的两个表中检索数据

c++ - 设计问题: Updating database from a low latency C++ application

python - 将包含多个项目的列表插入 mysql 数据库

sql-server - 从 SQL Server 运行 PostgreSQL 存储过程

mysql - 缩短 sql 查询

sql - 具有一对多关系和 orderby 复杂表达式的 Linq SQL 错误