关于sql中or 和and的问题。(在线等)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于sql中or 和and的问题。(在线等)相关的知识,希望对你有一定的参考价值。
微软的SQL SERVER2000的联机从书上说:将两个条件结合起来。当在一个语句中使用多个逻辑运算符时,在 AND 运算符之后求 OR 运算符的值。但是,通过使用括号可以更改求值的顺序。
示例
下面的示例检索某些书名,这些书具有大于 $5,500 的预付款,并且这些书籍是商业书籍或心理学书籍。如果没有括号,那么 WHERE 子句就会检索预付款超过 $5,500 的所有商业书籍或者心理学书籍。
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, type
FROM titles
WHERE (type = 'business' OR type = 'psychology') AND
advance > $5500
ORDER BY title
GO
在他的说明中,我觉得有个地方是错的,但是我想微软怎么会出这样的错。于是向大家求证。我觉的他说的“如果没有括号,那么 WHERE 子句就会检索预付款超过 $5,500 的所有商业书籍或者心理学书籍。”这句是错的。而是“如果没有括号,那么 WHERE 子句就会检索预付款超过 $5,500 的所有心理学书籍和所有的商业书籍。”
看样子,微软的汉字做的不怎么样。希望民族企业挣点气,让我们也用用国人的产品。现在都为微软,IBM,ORACLE等马首是瞻,连它错了,我也不敢肯定。唉。。。。
首先,我要说微软的SQL SERVER2000的联机从书上说的“错!”。
第二,由于AND和OR的优先级不同,那么此Where条件就变成了相当于如下的表示:
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, type
FROM titles
WHERE type = 'business' OR (type = 'psychology'AND
advance > $5500)
ORDER BY title
GO
这样“(type = 'psychology'AND
advance > $5500) ”经运算后就变成了一个独立条件再与“type = 'business' ”进行 OR 运算。
第三,
AND的语义是:二者必须满足才为RTUE;
OR的语义是:二者只要有一个满足就为TRUE,言外之意,二者同时满足也为TRUE。
结论:
“如果没有括号,那么 WHERE 子句就会检索预付款超过 $5,500 的所有商业书籍或者心理学书籍。 ”
应改为:
“如果没有括号,那么 WHERE 子句就会检索预付款超过 $5,500 的心理学书籍或者所有商业书籍。 ” 参考技术A 建个数据库 验证一下就可以了 看看是不是微软错
关于SQL中 =:的含义
一个很恶臭的例子来说明 =: 在sql语句中是做什么用的
int number= 114514;
//众所周知野兽先辈的咆哮(世界级美声)是一串数字
var strSql = “select * from imn where 1=1”;
//imn表,表内有BelCanto(美声)列, where 1 = 1是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误(and 和 or 可在 where子语句中把两个或多个条件结合起来,这里相当于写了个没有意义但是必要的where),我们后面用and把strSql(sql语句)拼接起来
strSql += " and BelCanto= :yell ";
//BelCanto(美声),yell是一个不需要定义的临时变量
sqlParameter.Add(new OracleParameter("yell", number));
至于为什么是这个函数,等我把整个项目看完来这里补充,这里的意思是可以通过向 这行代码yell(不需要定义的临时变量)里传入number,来使上一行中 =:后的 yell 获得number的值。
以上是关于关于sql中or 和and的问题。(在线等)的主要内容,如果未能解决你的问题,请参考以下文章
SQL注入 当or、and等常用字符被过滤(less-25)