SQL中关于or用法的一个疑点,求大侠们指点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中关于or用法的一个疑点,求大侠们指点相关的知识,希望对你有一定的参考价值。

select...from...where 条件1 or 条件2
加入条件1 和条件2选出来的数据部分重复,会不会给出一个部分数据重叠的结果

比如说从一个表中选出年龄大于40岁或者性别是女的数据,出来的结果会不会既是女的且大于40 的那部分出来出现两次,sql是怎么处理的?

按照你叙述的,只需要满足其中一个条件就可以出来。
以例子来说,会返回只要大于40岁或者性别是女的数据都会出来,是一个结果集,不会出现2次。
说的更通俗点,就是循环扫描一个表,用下述所有条件去匹配,匹配成功就返回,否则过滤掉。
参考技术A 不会出现重复。
SQL会逐条扫描表中的记录,并逐条判断是否满足条件1或者条件2。整个过程只扫描表一次,所以不会有重复。
参考技术B 不会重复的
条件1 和 条件2 满足其一 条件为满足
如果满足两个,也是条件为满足
重点是查询出条件满足的记录,所以不会重复

SQL注入求指点

参考技术A 当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。

SQL注入大致方法:

1、猜表名And
(Select
count(*)
from
表名)<>0,猜列名And
(Select
count(列名)
from
表名)<>0,获得数据库连接用户名:and
user>0

2、后台身份验证绕过漏洞,'or'='or'后台绕过漏洞,利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误。

防止SQL注入:

  1.对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。

  2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

  3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

  4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

  5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

  6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。

以上是关于SQL中关于or用法的一个疑点,求大侠们指点的主要内容,如果未能解决你的问题,请参考以下文章

数据结构求两节点的最近共同祖先,用二叉链表作为存储结构,严蔚敏习题集答案如下,一疑点求解释

维度建模疑点

Spring 注解@Bean参数疑点

使用 ArrayBlockingQueue 和 mutex 的多线程代码中的疑点

疑点记录(扫盲)

关于山东大学(威海)全向组海韵三队提交的 RT-Thread 技术报告中的若干疑点