MySQL如何在select中用索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL如何在select中用索引相关的知识,希望对你有一定的参考价值。
参考技术A 在字段上加上索引,查询的时候,满足一定条件就可以使用索引:比如 create table test (id int,name varchar(10));
然后在id上加索引 create index test_index on test(id);
查询的时候 select * from test where id=?就会走索引,如果 是select * from test where name=?
就不走索引,
也有很多情况下索引虽然存在但是却不会生效,具体什么情形下索引无效,需要你自己再去查资料,情况很多,说不完本回答被提问者采纳
MySql查询在Select中用空字符串替换NULL
【中文标题】MySql查询在Select中用空字符串替换NULL【英文标题】:MySql Query Replace NULL with Empty String in Select 【发布时间】:2012-03-22 13:48:15 【问题描述】:如何用空字符串替换 select 中的 NULL 值? 输出“NULL”值看起来不太专业。
这是非常不寻常的,根据我的语法,我希望它可以工作。 我希望能解释为什么它没有。
select CASE prereq WHEN (prereq IS NULL) THEN " " ELSE prereq end from test;
原始表格的外观、我想要的以及实际打印的示例:
original wanted what actually prints
-------- ------ ---------------------
value1 value1
NULL NULL
value2 value2
NULL NULL
正如您所看到的,它与我想要的相反,因此我尝试将 IS NULL 翻转为 IS NOT NULL,当然这并没有解决它。我也试过交换when case的位置,还是不行。
似乎下面给出的 3 个解决方案都可以完成任务。
select if(prereq IS NULL ," ",prereq ) from test
select IFNULL(prereq,"") from test
select coalesce(prereq, '') from test
【问题讨论】:
我认为(prereq IS NULL)
应该只是阅读NULL
【参考方案1】:
试试这个,这也应该摆脱那些空行:
SELECT prereq FROM test WHERE prereq IS NOT NULL;
【讨论】:
这是过滤我不认为 OP 之后的输出 这是我基于他的例子的解决方案。我真的不明白空行比 NULL 值更专业的原因。【参考方案2】:试试下面;
select if(prereq IS NULL ," ",prereq ) from test
【讨论】:
null 时如何省略? (不选择它?)【参考方案3】:试试COALESCE
。它返回第一个非 NULL 值。
SELECT COALESCE(`prereq`, ' ') FROM `test`
【讨论】:
【参考方案4】:SELECT COALESCE(prereq, '') FROM test
Coalesce 将返回从左到右传递给它的第一个非空参数。如果所有的争论都是空的,它会返回空,但我们在那儿强制一个空字符串,所以不会返回空值。
另请注意,标准 SQL 支持 COALESCE 运算符。 IFNULL 的情况并非如此。因此,使用前者是一个好习惯。此外,请记住,COALESCE 支持超过 2 个参数,它会遍历它们,直到找到非空重合。
【讨论】:
同意 IFNULL 的 MySQL 特性值得注意。它适用于 OP 案例,但可能不适用于其他案例。【参考方案5】:如果你真的必须输出每个值,包括 NULL 值:
select IFNULL(prereq,"") from test
【讨论】:
如果你使用 IFNULL 和 groupBy,那么应该有一个别名:select IFNULL(prereq,"") as n from test group by n.【参考方案6】:其中一些内置函数应该可以工作:
COALESCE(值,...)
返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。
IS NULL
测试一个值是否为NULL。
IFNULL(expr1,expr2)
如果 expr1 不为 NULL,IFNULL() 返回 expr1;否则返回 expr2。
【讨论】:
【参考方案7】:原始形式几乎完美,您只需在 CASE 之后省略 prereq:
SELECT
CASE
WHEN prereq IS NULL THEN ' '
ELSE prereq
END AS prereq
FROM test;
【讨论】:
【参考方案8】:我在数据库的非必填字段中有空值(NULL 作为默认值)。它们不会导致值“null”显示在网页中。但是,当通过网页输入表单创建数据时,会设置“null”值。这是由于 JavaScript 在通过 AJAX 和 jQuery 提交数据时采用 null 并将其转录为字符串“null”。确保这不是基本问题,因为简单地执行上述操作只是实际问题的创可贴。我还实施了上述解决方案 IFNULL(...) 作为双重措施。谢谢。
【讨论】:
【参考方案9】:UPDATE your_table set your_field="" where your_field is null
【讨论】:
我没有很好地理解这个问题,对不起!这用空值替换空值,但要解决您的问题,请检查我的第二个答案。【参考方案10】:select IFNULL(`prereq`,'') as ColumnName FROM test
此查询正在选择“prereq”值,如果任何一个值为 null,它会根据需要显示一个空字符串 因此,它显示所有值,但 NULL 显示为空白
【讨论】:
考虑添加对这段代码的作用的解释。代码示例可能会立即有用,但从长远来看,解释会更有用。以上是关于MySQL如何在select中用索引的主要内容,如果未能解决你的问题,请参考以下文章