SQL:访问数据库一次,得到数据条数AND数据
SQL: Access database once and get the number of data AND the data
我是 SQL 的新手,我一直想知道是否有一种有效的方法可以在一个 SQL 命令中获取与条件匹配的数据数量和数据。
具体来说,我要实现的是:
- 检查 table 中是否存在满足用户输入条件的记录
- 如果是,请显示数据。否则,显示 "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"
如果您使用游标 class 从客户端 运行 连接您的 SQL,游标可能会提供一个 rowcount
属性来标识受影响的行数.如果是这样,那么您可以简单地 运行 SELECT * FROM Table WHERE Condition = 'XXX';
并获取从游标中选择的数字或行。
我完全不明白您为什么需要 COUNT(*)
,但也许还有更多未提供的要求?
如果 SELECT *
结果集为空,则表示没有记录,您可以显示一条消息说明这一点。如果结果集不为空,则可以处理并显示数据。
我是 SQL 的新手,我一直想知道是否有一种有效的方法可以在一个 SQL 命令中获取与条件匹配的数据数量和数据。
具体来说,我要实现的是:
- 检查 table 中是否存在满足用户输入条件的记录
- 如果是,请显示数据。否则,显示 "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"
如果您使用游标 class 从客户端 运行 连接您的 SQL,游标可能会提供一个 rowcount
属性来标识受影响的行数.如果是这样,那么您可以简单地 运行 SELECT * FROM Table WHERE Condition = 'XXX';
并获取从游标中选择的数字或行。
我完全不明白您为什么需要 COUNT(*)
,但也许还有更多未提供的要求?
如果 SELECT *
结果集为空,则表示没有记录,您可以显示一条消息说明这一点。如果结果集不为空,则可以处理并显示数据。