求教一个mysql语句or的问题。
php吧
全部回复
仅看楼主
level 5
jxdz232601 楼主
有3个条件:条件1、条件2和条件3,
其中条件3有两种情况:条件3_1和条件3_2
一种or用法是:
(条件1 and 条件2 and 条件3_1) or (条件1 and 条件2 and 条件3_2)
另外一种:
条件1 and 条件2 and (条件3_1 or 条件3_2)
请问,这2种情况查询出来的结果是一样吗?
2013年07月16日 05点07分 1
level 9
先仔细分析优先级。
2013年07月16日 05点07分 2
level 11
括号里的会先比较吧
2013年07月16日 09点07分 3
level 3
这不就是高中学的交集和并集的知识么?难道你不懂 ?
2013年07月16日 09点07分 4
。。。。。。。。。。。。。。。。。。我不懂。这不是集合问题。这是运算问题
2013年07月16日 16点07分
level 9
一种or用法是:
(条件1 and 条件2 and 条件3_1) or (条件1 and 条件2 and 条件3_2)
另外一种:
条件1 and 条件2 and (条件3_1 or 条件3_2)
-----------------------------------------------------
结果当然会不一样。
把第一个中换成这样:
(true) OR (true)
第二个换成:
true AND true AND true
你发现什么没有。
第一个条件是 左边和右边任意成立
第二个条件是 3个and全部成立
---------------------------------------
举个例子:
我如果要查出 语文、数学、英语都及格或者其中任意一门为空的同学
第一种写法:
语文>=60 OR 语文 IS NULL
AND
数学>=60 OR 数学 IS NULL
AND
英语>=60 OR 英语 IS NULL
第二种写法:
(语文>=60 OR 语文 IS NULL)
AND
(数学>=60 OR 数学 IS NULL)
AND
(英语>=60 OR 英语 IS NULL)
下面是图片解释
2013年07月16日 16点07分 9
level 9
数据结构如下:
第一种:
语文>=60 OR 语文 IS NULL
AND
数学>=60 OR 数学 IS NULL
AND
英语>=60 OR 英语 IS NULL
这是第三种:
(语文>=60 OR 语文 IS NULL)
AND
(数学>=60 OR 数学 IS NULL)
AND
(英语>=60 OR 英语 IS NULL)
2013年07月16日 16点07分 10
level 9
你看这两个结果哪个更加符合我题目要求
我想只要你不会NC,一定会说是第二个。加上了括号哪个
因为括号括起来 就像是相当于告诉 Mysql。这是一个整体,你要一起运算和判断
如果不加上去。就不一样
你知道小学的加减乘除吧
如果你一道题目不先计算括号内的数字,结果会有错的。所以,这里也是一样
2013年07月16日 16点07分 11
level 9
还有一件事情。你永远不可能记住符号优先级。
选择一个最容易记住的算法,这才是
正确的
。 就算死记住也没什么用处
只要知道 AND是两边都等于
OR 是符合其中一个
() 会优先计算
(()) 嵌套多个括号会从里面到外面计算
即可
2013年07月16日 16点07分 12
level 9
我刚刚写的
TRUE AND TRUE OR TRUE AND TRUE OR TRUE AND TRUE
TRUE AND TRUE AND TRUE
第一个你自己看看,就会发现。你压根是白打了
第二个就清晰了。3个大条件成立
2013年07月16日 16点07分 13
level 9
但是呢,这个情况也不一定。
只能告诉你,你最好是都试试,看看逻辑对不对。
毕竟我说的是一个比较普遍的情况。
也有这两个写法查出来的结果集一致的。
但是我想不到这个特别的例子。抱歉,水平有限
2013年07月16日 16点07分 14
level 9
OR是一个天使,也是一个恶魔
一个OR可以让不成立的条件成立
也可以让一个麻烦的SQL语句简单化。
看你怎么用了
2013年07月16日 16点07分 15
level 9
在顺便讲一个例子:
(用户名='name' AND 密码='pass') OR 1=1
用户名='name' AND 密码='pass' OR 1=1
用户名='name' AND (密码='pass' OR 1=1)
用户名='name' AND 密码='pass' AND 1=1
哈哈。 如果你的登录程序出现
第一个情况,你完了。不用用户名和密码也能登录了
第二个情况,也一样。
第三个情况,只需要用户名对了即可
第四个情况,用户名和密码都必须对了
1=1 是很多程序都会出现的东西。1=1是一个必然条件,查询的时候,不会拖累MYSQL。这个是为了能够用程序动态链接条件才用的。
2013年07月16日 16点07分 16
level 12
高手多啊
2013年07月16日 17点07分 17
level 4
and优先于or
2013年07月16日 23点07分 18
- -不一定 、。如果有括号另当别论
2013年07月17日 02点07分
这是SQL语句,主要是逻辑正确。谁优先都没有关系。 知道 AND OR () > < >= <= !=【<>】 基本上够用了
2013年07月17日 02点07分
level 5
jxdz232601 楼主
其实题目的意思是:
我要查询到的结果必须满足有3个条件要求,
一是,条件1必须满足
二是,条件2必须满足
三是,条件3满足情况1或情况2都可。
我后来测试了一下,
(条件1 and 条件2 and 条件3_1) or (条件1 and 条件2 and 条件3_2)

条件1 and 条件2 and (条件3_1 or 条件3_2)
结果是一样的,
9楼说不一样,我看了下,是说的加不加括号,结果不一样,后面那种情况,
“条件1 and 条件2 and (条件3_1 or 条件3_2) ”不加括号,结果肯定是不一样,
不过就我列出的这两个用法,结果应该是一样的,就和13L说的一样,但是由于第一条语句条件1和条件2都判断了2次,所以效率没有第二条语句好。
2013年07月17日 02点07分 19
[黑线]你是效率党么..........如果带上括号当然会运算慢。 但是我第一个要求是实现效果。
2013年07月17日 15点07分
你要根据实际情况来看。我刚刚说的情况的话。你的写法恐怕无法符合题目要求。没有实际题目,我不敢说2个结果是一样还是不一样
2013年07月17日 15点07分
而且你楼顶的题目让我很蛋疼.........................无法直视
2013年07月17日 15点07分
如果按照你题目说的 我肯定是写第二个。因为 两个条件没有重复的 直接: 条件1 AND 条件2 AND (情况1符合 OR 情况2符合) 第一个就太夸张了。就是等于把3个条件相乘开一样。...也行
2013年07月17日 15点07分
level 9
从数学上分析是一样的
2013年07月17日 10点07分 20
level 4
运行下试试呗,然后分析比啥都强,别遇到问题就问
2013年07月18日 00点07分 21
1