sql语句中的逻辑运算:或、与、异或

文章转自:爱符号  http://www.afuhao.com/article_articleId-165.shtml


在讲SQL语句前,看看C#中,关于 或、与、异或 的操作吧,其它语言类似,就不多写了。javascript java 这些都是支持这个的


逻辑 或 操作

[csharp]
  1. int i= 1 | 3;//或,结果是3,因为3里面包括1  
  2. int i= 1 | 2;//或,结果是3,1与2,所以是3  
  3. int i= 0 | 1;//或,结果是1,0不会影响任何结果  
  4. //其实 或 的操作需要先了解一些位操作  
  5. //一般这种唯一值是成2倍增长的,比如说:  
  6. //1 ,1*2=2,2*2=4,4*2=8,8*2=16,16*2=32....  
  7. //1   2         4         8        16         32  
  8. //原因:1 与2 的交集是3,所以3不能作为唯一值,所以是4,  
  9. // 1,2,4之间的交集会有很多,5,6 ,7 ,都会被占用,所以8才是唯一的,  
  10. //这个需要好好的体会  
  11. //其实按照数学的排列组合更加容易理解  
  12. //1 和 2 来随意组合就是:1+0=1,2+0=2,1+2=3,所有只有3种可能  
  13. //1 和 2 和 4 就会更多了  
  14. //   1+0=1,1+2=3,1+4=5,2+0=2,2+4=6,1+2+4=7,所有下一个只有8了  

逻辑 与 操作


[csharp] 
  1. //异和或类似,但有些相反  
  2. int i = 3 & 1;//结果是1,因为3里面包括1的,如果想得到3,就是 3 & 3  
  3. //为什么要这样做?比如你知道两个变量,想判断其中一个变量是否被包含,就需要这样判断  
  4.   
  5. //再来看看  或   
  6. int i = 1 | 2 | 4;//结果是 7  
  7. //那么如何知道 i  中已经有 2?  
  8. int j= i & 2;//结果j 为2就表示包含  
  9. //经常用于if判断  
  10. if ( (i & 2 )==2){  
  11.     //注意 i & 2 要括起来,否则就会变成  i  & ( 2 == 2)了,  
  12. }  


再来看看 逻辑 异或 操作吧


[js]
  1. //要理解异或,必须得明白  或  
  2. //所以下面的结果,可能会有些纳闷,  
  3. int i = 3 ^ 1;//2,为什么呢?因为3是 1 | 2 得到的,那么拉成一条直线来看,它们的序列是 1、2、3,所以1 和 3 里面只有2没有出了,所以结果就是2  
  4. //明白没有?两数之间 肯定有一种 或 的关系存在,异或就是两数之间剩下的那个数  
  5.   
  6. //来看一组数据  
  7. //1 ^ 1; 1 | 0 =1,所以为 0  ;1 ^ 4;1 ^ 5;  
  8. //1 ^ 2; 1 和 2 都是独立的序列,所以1 | 2 =3,所以结果是3;   
  9. //1 ^ 3; 3 是 1 | 2 的结果,所以是2  
  10. //1 ^ 4; 1 和 4 都是独立的序列,所以 1 | 4,所以结果是5  
  11. //1 ^ 5; 5 是 1 | 4 的结果,所以是4  
  12.   
  13. //还在头晕吗?,回味一下 或 的操作,再来看看 异或吧  




下面来看看sql语句中的 异 或吧

[sql] 
  1. --       或    与   异或  
  2. select 1 | 2, 1 & 2, 1 ^ 2  
  3. --       3  ,   0  ,   3  
  4.   
  5. select 1 | 3, 1 & 3, 1 ^ 3  
  6. --       3  ,   1  ,   2  
  7.   
  8. select 3 | 3, 3 & 3, 3 ^ 3  
  9. --       3  ,   3  ,   0  
  10.   
  11. select 1 | 0, 1 & 0, 1 ^ 0    -- 1 ^ 0 为1 的原因是 1 | 1 是0,也就是说 1 | 0 为1  
  12. --       1  ,   0  ,   1  


细细体会一下吧,不明白吗?

再体会一下,如果还不会,就过段时间来看吧。


这类操作经常用于权限判断,组合值判断。


文章转自:爱符号  http://www.afuhao.com/article_articleId-165.shtml

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值