精华内容
下载资源
问答
  • mysql查询语句where后面加if判断 说明:WHERE IF(条件, true执行条件, false执行条件 )SELECT * FROM book WHERE IF(price > 120, btypeid=10, btypeid=11); 以上sql查询语句,意思是查price字段大于120,当price...

    mysql查询语句where后面加if判断

    f117161d257f4d277cbd4406c640fc2d.png

    说明:WHERE  IF(条件,  true执行条件, false执行条件 )

    SELECT * FROM book WHERE IF(price > 120, btypeid=10, btypeid=11);

    167f982135fe193e672d44b5bc4d714c.png

    以上sql查询语句,意思是查price字段大于120,当price大于120为真时,再找btypeid等于10的行记录,

    当price大于120为假时,再找btypeid等于11的行记录。什么意思呢?咱们换句话说吧!

    意思就是当price大于120为真时,执行语句为where price>120 and btypeid=10;

    当price大于120为假时,执行语句为where price<120 and btypeid=11;准确来说应该是where price<=120 and btypeid=11;

    其实说白了,SELECT * FROM  book WHERE IF(price > 120,  btypeid=10,  btypeid=11);这条sql语句等价于如下sql语句

    select * from book where price > 120 and btypeid =10 unionselect * from book where price < 120 and btypeid = 11;

    b6721cff26a0fbe5c469b0fbea23f7c9.png

    准确的来说是select * from book where price > 120 and btypeid =10 unionselect * from book where price <=120 and btypeid = 11;

    cf11bee620ef72b1d1d9442f86bb141f.png

    以下sql语句同理,只不过是多了一个limit 0,1;取前面1条记录。

    SELECT * FROM book WHERE IF(price > 120, btypeid=10, btypeid=11) limit 0,1;

    8adba98c3c35776acd5f720c0f2fd3ba.png

    展开全文
  • where后面加"1=1"还是不加 比如现在有一个场景,DB数据库中有一张博客表(blog),想把blog表中的所有记录查询出来,那么可以有两种方式操作。一种写法是where关键词什么也不加,另一种写法是where关键词后面加"1=1",...

    where后面加"1=1"还是不加
    比如现在有一个场景,DB数据库中有一张博客表(blog),想把blog表中的所有记录查询出来,那么可以有两种方式操作。一种写法是where关键词什么也不加,另一种写法是where关键词后面加"1=1",写法如下:
    where关键词什么也不加

    select * from blog;
    

    where关键词后面加 “1=1”

    select * from blog where 1 = 1;
    

    这两种SQL语句查询所得到的结果完全没有区别。那为什么要在where关键字后面添加"1=1"呢?
    我们知道1=1表示true,即永真。如果使用不恰当会造T0级错误。例如在编写SQL语句时进行where条件查询时配合or运算符会得到意向不到的结果,结果会让你哆嗦。不信,往下看:
    例如,当我们要删除博客ID称为“202102111501”的记录,我们可以这样写:

    delete from blog where blogId = "202102111501"
    

    如果这个时候如果在where语句后面加上 or 1=1会是什么后果?

    delete from blog where blogId = "202102111501" or 1 = 1
    

    本来只要博客ID称为“202102111501”的记录,结果因为添加了or 1=1的永真条件,会导致整张表里的记录都被删除了。那你可就闯祸了。
    不用where 1=1 在多条件查询的困扰
    举个例子,如果你想查看当前博客中某条评论记录时,那么按照平时的查询语句的 动态构造,代码大体如下:

    String sql="select * from blog where";
    if ( condition 1) {
      sql = sql + " blogID = 202102111501";
    }
    if (condition 2) {
      sql = sql + " and commentID = 150101";
    }
    

    复制代码
    如果上述的两个if判断语句均为true时,那么最终的动态SQL语句为:

    select * from table_name where blogID = 202102111501 and commentID = 150101;
    

    可以看出来这是一条完整的正确的SQL查询语句,能够正确执行。
    如果上述的两个if判断语句均为false时,那么最终的动态SQL语句为:

    select * from table_name where;
    

    此时我们看看这条生成的SQL语句,由于where关键字后面需要使用条件,但是这条语句根本不存在,所以该语句就是一条错误语句,不能被执行,不仅报错,同时还查不到任何数据。
    使用where 1=1 的好处
    如果我们在where条件后加上1=1,看看它的真面目:

    String sql="select * from blog where 1=1";
    if ( condition 1) {
      sql = sql + " and blogID = 202102111501";
    }
    if (condition 2) {
      sql = sql + " and commentID = 150101";
    }
    

    当condition 1和condition 2都为真时,上面被执行的SQL代码为:

    select * from blog where 1=1 and blogID = "202102111501" and commentID = 150101;
    

    可以看出来这是一条完整的正确的SQL查询语句,能够正确执行。
    如果上述的两个if判断语句均为false时,那么最终的动态SQL语句为:

    select * from table_name where 1=1;
    

    现在,我们来看这条语句,由于where 1=1 是为True的语句,因此,该条语句语法正确,能够被正确执行,它的作用相当于:sql=“select * from table”,即返回表中所有数据。
    当在where关键字后面添加1=1时,如果此时查询时不选择任何字段时,那么必将返回表中的所有数据。如果是按照某个字段进行单条查询时,那么就会此时的条件进行查询。
    说到这里,不知道您是否已明白,其实,where 1=1的应用,不是什么高级的应用,也不是所谓的智能化的构造,仅仅只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态SQL语句的一种方法。
    使用where 1=1 的坏处
    我们在写SQL时,加上了1=1后虽然可以保证语法不会出错!

    select * from table_name where 1=1;
    

    但是因为table中根本就没有名称为1的字段,该SQL其实等效于select * from table,这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢。
    所以在查询时,where1=1的后面需要增加其它条件,并且给这些条件建立适当的索引,效率就会大大提高。
    作者:迈莫coding
    链接:https://juejin.cn/post/6931197275175649287/
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • mysql查询语句where后面加if判断

    万次阅读 2019-09-16 04:48:31
    mysql查询语句where后面加if判断 说明:WHERE IF(条件, true执行条件, false执行条件 ) SELECT * FROM book WHERE IF(price > 120, btypeid=10, btypeid=11); 以上sql查询语句,意思是查price字段大于120...

    mysql查询语句where后面加if判断

    说明:WHERE  IF(条件,  true执行条件, false执行条件 )

    SELECT * FROM  book WHERE IF(price > 120,  btypeid=10,  btypeid=11);

    以上sql查询语句,意思是查price字段大于120,当price大于120为真时,再找btypeid等于10的行记录,

    当price大于120为假时,再找btypeid等于11的行记录。什么意思呢?咱们换句话说吧!

    意思就是当price大于120为真时,执行语句为where price>120 and btypeid=10;

    当price大于120为假时,执行语句为where price<120 and btypeid=11;准确来说应该是where price<=120 and btypeid=11;

    其实说白了,SELECT * FROM  book WHERE IF(price > 120,  btypeid=10,  btypeid=11);这条sql语句等价于如下sql语句

    select * from book where price > 120 and btypeid =10 union select * from book where price < 120 and btypeid = 11;

    准确的来说是select * from book where price > 120 and btypeid =10 union select * from book where price <=120 and btypeid = 11;

    以下sql语句同理,只不过是多了一个limit 0,1;取前面1条记录。

    SELECT * FROM  book WHERE IF(price > 120,  btypeid=10,  btypeid=11) limit 0,1;

    展开全文
  • where后面加判断

    2017-10-20 15:16:09
    [color=#FF0000]where b.code=case when @[DepartmentId]=‘NB001000’then '50'+cast(CardId as varchar) else '5'+cast(CardId as varchar) end[/color] and a.EmpSysID is not null ) as info where not ...
  • on 后面 直接条件的话,不会对左边的表产生影响,on条件是在左关联时候的条件,不管如何都会返回左边表中的记录 where 条件 才会对左边的表 生效。where条件是关联查询之后的条件

    on 后面 直接加条件的话,不会对左边的表产生影响,on条件是在左关联时候的条件,不管如何都会返回左边表中的记录

    where 加条件 才会对左边的表 生效。where条件是关联查询之后的条件

    展开全文
  • commit on后面加and select * from testA a left join testB b on a.id = b.id and b.age=10 on后面加where select * from testA a left join testB b on a.id = b.id where b.age=10 on 是用于消除笛卡儿积的,表...
  • 碰巧在项目中遇到了一个sql,是left join和where的条件限制的区别,想了好半天,这里做一下笔记,万一以后忘记了方便查看。 话不多说,直接上测试数据和sql,然后对我的理解进行分析下。 student表和grade表 ...
  • 用两张表来解释 left join on [条件] 和where后面加条件的区别 student_info 表数据 student_score表数据 这个一张学生表,一张学生成绩表: 我们现在测试left join SELECT c.number AS Cnumber, s.* FROM ...
  • 怎么在where后面加if???

    千次阅读 2019-04-11 14:37:04
    用三元表达式吧,如果姓名=‘张三’那么查找年龄大于18岁的,如果不等于‘张三’就找小于等于18岁的 ...select * from students where (name !== ‘张三’) ? students.age<=18 : students.age>18; ...
  • right join: ④:where 条件的结果 相当于对③中left join 查询出的中间表的数据过滤 相当于对③中 right join查询出的中间表数据过滤(同时对为空的字段进行空处理) 二:结论 ①:left join或right join 后面的...
  • 我有表a 我想在where 里面 判断某字段如果为空 就做一个操作,不为空 做另一个操作 我写了语句但是不对 select t.* from tsq_question t where t.bizid='3e9ed81c0637' and case when t.tryclose_time is null ...
  • WHERE 异动日期>='2017-01-01' AND 异动日期<='2017-04-01' OR 操作时间>='2017-01-01' AND 操作时间<='2017-04-01' and b01_dept_code like '101%' ORDER BY 类型,所属公司,A0190 --- 需求 ---1...
  • where后面加EXEC('')

    2013-12-17 09:44:28
    where 1=1 exec(@where) EXEC P_Report_System ' and ecoa.codename = ''C'' ' (8 行受影响) 消息 156,级别 15,状态 1,第 1 行 关键字 'and' 附近有语法错误。 这样总是不行,求了解的大哥大姐...
  • 下面以实际例子介绍'当在查询中使用中文时,有时会查询不到数据,实际记录中是有对应的记录的,一般是'由于编码问题,可以在中文字符前面N,如: N‘李%’'使用通配符%,查询StudentName中第一个字是李,后面任意多...
  • 因为我们不确定那个标签里的条件是满足的,随意where后面第一满足的条件前就多了一个and关键字,所以就通常情况下就会在where后面加上一个1=1恒成立的条件。 注:这里如果大家不使用 1=1的话,可以使用标签,来替换...
  • 在编程过程当中,忽然看到有一段SQL语句中where的字段后面跟着(+),以前没写过这样的sql语句,于是起了好奇之心,想探究一下这个语句的作用是什么。 举一个例子,如SQL: select a.*,b.* FROM tmp_0813001 a,...
  • 2 AND soc.sys_code = s.sys_code AND s.store_code = soc.store_code LEFT JOIN tpl_md_company e ON c.vendor_code = e.comp_code WHERE soc.oc_id IN ( '200526103125' ) //如果soc.status等于2021,那么就按照s....
  • left join on后条件与where条件

    千次阅读 2019-08-27 14:59:53
    left join on后加条件与where后加条件left join on后加条件where后加条件 left join on后加条件 在left join on后面加条件...在where后面加条件的话,是对筛选之后的最终结果进行一定的限制,是会影响左标(主表)的. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 736
精华内容 294
关键字:

where后面加