关于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)

关于Sql语句中关键字OR

sql中同时使用and和or运算符

在子句查询 SQL 服务器中结合 OR 和 AND [关闭]

PHP判断语句,and和or的使用

SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”