关于sql中or 和and的问题。(在线等)

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:19:32
微软的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 的心理学书籍或者所有商业书籍。 ”

建个数据库 验证一下就可以了 看看是不是微软错