SQL:访问数据库一次,得到数据条数AND数据

SQL: Access database once and get the number of data AND the data

我是 SQL 的新手,我一直想知道是否有一种有效的方法可以在一个 SQL 命令中获取与条件匹配的数据数量和数据。

具体来说,我要实现的是:

  1. 检查 table 中是否存在满足用户输入条件的记录
  2. 如果是,请显示数据。否则,显示 "No data found".

就这么简单,但是以我目前的SQL知识,只能想出一个办法,而且还需要2条SQL命令,我不是真的很开心。我在想的是:

/*First, count the number of data satisfying the condition.
  If this returns 0, show "No data found" */
SELECT COUNT(*) FROM Table WHERE Condition = "XXX"

/*If the first SQL command returns 1 or greater, retrieve all data 
  and show them */
SELECT * FROM Table WHERE Condition = "XXX"

然而,这两个SQL命令几乎是一样的,唯一的区别是第一个有COUNT(),这是访问table两次。 这是否可以进一步简化,以便我可以通过一个 SQL 命令实现我想要实现的目标?或者有没有其他方法可以更有效地实现这一目标?谢谢你。

编辑: 谢谢大家。供您参考,我正在编写一个访问数据库的 C# 程序。我已经在某处使用过 COUNT(*),并且我能够通过以下方式检索数据计数:

string str = "SELECT COUNT(*) FROM Table WHERE condition = 'XXX'";
com = new OleDbCommand(str, connection); 
int count = (int)com.ExecuteScalar();
return count;

但是如果一个 SQL 命令 returns 同时计算计数和数据,我如何才能将数据检索到一个变量中?

SELECT COUNT(*), * FROM Table WHERE 条件 = "XXX"

如果你想在给定条件下选择所有列的同一个查询中获取计数,那么你可以考虑使用 COUNT() 作为应用于整个 table 的分析函数。

SELECT t.*,
    COUNT(*) OVER () cnt
FROM Table t
WHERE Condition = "XXX"

Demo

如果您使用游标 class 从客户端 运行 连接您的 SQL,游标可能会提供一个 rowcount 属性来标识受影响的行数.如果是这样,那么您可以简单地 运行 SELECT * FROM Table WHERE Condition = 'XXX'; 并获取从游标中选择的数字或行。

我完全不明白您为什么需要 COUNT(*),但也许还有更多未提供的要求?

如果 SELECT * 结果集为空,则表示没有记录,您可以显示一条消息说明这一点。如果结果集不为空,则可以处理并显示数据。