是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?

Posted

技术标签:

【中文标题】是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?【英文标题】:Is it possible to use "WHERE" clause to select all records in SQL Statement? 【发布时间】:2013-10-25 20:37:08 【问题描述】:

晚上好,我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录?

下面是一些解释:

随机SQL语句(Java)-(JSP示例),正常情况

String SqlStatement = "SELECT * FROM table_example WHERE First_Col = '<%=passVar%>' ";
db.query(SqlStatement );
//........
//........

如果passVar为'ALL',当passVar = All时需要提示所有记录呢?我知道我可以使用 if-else 并检查 passVar 是否为“ALL”然后查询 without-WHERE 语句 以使其工作..

**without-WHERE statement (Java)-(JSP example)**
if(<%=passVar%> == "ALL") 
   SqlStatement = "SELECT * FROM table_example";
 else 

   SqlStatement = "SELECT * FROM table_example WHERE First_Col = '<%=passVar%>' ";

但是我可以只编写一条 SQL 语句来提示所有记录吗?如下所示:

(Java)-(JSP示例)

String ShowAll = "";
if(<%=passVar%> == "ALL") 
    ShowAll = *;

 else 
    ShowAll = <%=passVar%>;

SqlStatement = "SELECT * FROM table_example WHERE First_Col = ShowAll ";

【问题讨论】:

您还在 JSP 中放置 scriptlet 代码吗?数据库调用?太可怕了。 大声笑,我只能遵守公司的规则……真的很抱歉…… 【参考方案1】:

试试WHERE 1=1::

Select * from myTable  WHERE 1=1

【讨论】:

OP 如何在脚本中插入它以仅使用一个查询?【参考方案2】:

尝试使用通配符值'%',但我建议在此处使用工厂来创建 SQL 语句,您尝试执行的操作有点味道。

【讨论】:

【参考方案3】:

考虑在查询本身内移动特殊情况,例如

SELECT * FROM table_example WHERE '<%=passVar%>' IN ('ALL', First_Col)

【讨论】:

【参考方案4】:

这也有效:

WHERE columnname LIKE '%'

NULL 值除外。

【讨论】:

谢谢,我会试试...只是为了验证一下,如果我们将列名设为 LIKE '%',它是否会检索以''(空格)开头的数据? 是的,它会这样做 是否也可以包含 NULL 值?【参考方案5】:

您可以做的其他事情是将代码和 SQL 组合成一个查询。这意味着 IF..ELSE 将使用 SQL 语言。

查看这些链接了解更多信息:mysqlUsing If else in SQL Select statement

【讨论】:

【参考方案6】:

最好区分这两种情况并从中进行 2 次查询。

如果没有 where 条件,则数据库不需要评估它(可能更快) 源代码/调试输出更清晰。

【讨论】:

是的,目前我使用两个查询...但是我的一个朋友提到,当程序变大/更大时,最好找到一种方法来进行一次查询而不是 2 或更多,它是可选的...谢谢... 你知道 - 这对我来说非常有意义,我完全停止了这种思路,只是又提出了一个问题。几行额外的代码与调试条件查询的噩梦之间的区别是显而易见的。【参考方案7】:

在sqlserver上你可以制作proc:

create proc select_all_on_null
@a int
as
begin
  select * from Records where (@a is null or Record_id=@a )
end

当您选择成为您的程序时:

make @a in null will select all 

如果我是numder,将选择具有此ID的行

【讨论】:

【参考方案8】:

where 1=1 对我有用,虽然使用了 where 子句,但所有记录都被选中。

你也可以试试

SELECT * FROM Customers
WHERE CustomerID=CustomerID; /* query */

或 [any_column_name]=[column_name_in_LHL]

(LHL=左侧。)

复制查询并 click here to try code

【讨论】:

以上是关于是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 在 WHERE IN 子句中使用 CASE 语句

SQL WHERE 子句中的 IF 语句

是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?

SQL:WHERE 子句中的 IF/CASE 语句

MySQL-SQL语句命令

在 WHERE 子句中使用函数编写 SQL SELECT 语句是不是有 Django 等效项?