sql语句:or能用什么替换掉,显示相同结果,除了union all和union

sql语句:or能用什么替换掉,显示相同结果,除了union all和union,第1张

可以用in呀,or和in是相对的

select * from t1 where name in ('a','b')

你的要求真是多,干脆再除了写sql好吗?

再给你写个吧,利用自己关联

select * from t1 a,t2,b

where a.name=b.name(此处改成你自己的主键吧) and a.name ='a' and b.name='b'

与或非是逻辑判断的必须,如果真的需要很多or来判断,那么谁也没有办法。

一般优化or的办法是,减少or,也就是减少判断条件。这个不仅仅是数据库的问题,需要从业务等多方面来考虑。

比如,业务可以减少一个or,那么这就是最好的优化方式。

如果几个or字段都有索引,那么可以考虑分开查询,这样能走索引,因为or不走索引。也算优化。

缩小查询范围也算,虽然还是or,还是那么多条件,但是其他条件却可以,让数据量从10w,变为5千,这也是优化。

至于其他的方法,什么换个写法等等,大多数都是扯淡,没什么实际意义。

集合运算

         这是一种二目运算,一共有四种四种运算符:并,差,交,笛卡尔积;

语法:

         查询语句

                  [UNION | UNIONALL | INTERSECT | MINUS]

         查询语句

UNION(并集)

返回若干个查询结果,但是重复的不显示

Eg:SELECT *FROM dept

                  UNION

         SELECT*FROM dept WHERE deptno = 10

注:查询 *** 作编写的过程中尽量使用UNION , UNION ALL代替 OR,提高查询速度

例:

         查询工作是销售和clerk的;

         SELECT*

FROM emp WHEREjob = ‘saleman’ or job = ‘clerk’

另一种方式:

SELECT * FROMemp WHERE job = ‘SALESMAN’

         UNION

SELECT * FROMemp WHERE job = ‘CLERK’

UNION ALL(并集)

返回若干个查询结果,但是重复的也显示

Eg:SELECT * FROM dept

                  UNION ALL

         SELECT*FROM dept WHERE deptno = 10

MINUS(差集)

返回若干个结果中不同的部分;

Eg:SELECT * FROM dept

                   MINUS

         SELCT*FROM dept WHERE deptno = 10

INTERSECT(交集)

显示查询结果中相同的部分;

Eg:SELECT * FROM dept

                   INTERSECT

         SELCT*FROM dept WHERE deptno = 10

————————————————


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9908030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存