精华内容
下载资源
问答
  • SQL之WHERE语句
    2021-04-21 05:39:02

    SQL语句是数据库查询语句,可以应用在各种数据库操作软件中,比如Mysql,Oracle,因此SQL语句学一套就基本可以通用了。这篇文章主要总结一下Where的用法,文章持续更新。

    一般的结构查询语句的结构如下:

    SELECT *

    FROM table_a

    WHERE x=y

    其中,以上语句的select,from,where是不区分大小写的,一般分行写select,from,where语句。select一般是查询结果要展示的字段,from后一般是要查询的表名,where是进行行数据筛选的条件。

    一般的用法有:对比:=,!=,>,<

    包含:in,not in,exists,not exists

    模糊匹配:like

    空值判断:is null, is not null

    范围匹配:between ... and ...

    多条件且、或:and,or

    1.对比

    =是精确匹配的意思,比如:where name='zhangsan'则是筛选出所有name='张三'的行,除数字外必须带引号。(!=就是除了=之外的所有行)

    >和

    2.包含

    in和not in分别是包含和不包含的意思,用法:where name in('zhangsan', 'lisi'),可筛选出name='zhangsan'和'lisai'的所有行。

    exists和not exists等同于in和not in,不同的是使用时服务器使用效率不同,一般在多表匹配的时候会区别一下。可以先看以下例子:

    1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;

    2) select * from T1 where T1.a in (select T2.a from T2) ;

    T1数据量小而T2数据量非常大时,T1    exits 效率高

    T1数据量非常大而T2数据量小时,T1>>T2 时,2) in 的查询效率高。

    3.模糊匹配

    如果你只想匹配字段值的一部分,则要用like:where name like '%zhang%'或where name like 'zhang_'

    %代表不限数量的匹配字符数,_代表单个字符的匹配。比如zhang%可以匹配出zhangsan, zhangsi等,而zhang_只能匹配出如zhangx这种的字符。

    4.空值判断

    null是数据为空时的一种状态,not null是不为空的状态,这两种状态可以用来做筛选:where name is null,筛选出name为空的行,where name is not null,筛选出name不为空的行。

    5.范围判断

    BETWEEN x1 AND x2 是指筛选出值在x1到x2之间的数据行,如:where id between 1 and 95,筛选出id为1~95的行。需要注意的是,不同的数据库对于between的用法有一点点差异,有的是[1,95],有的是(1,95)等,这点知道就行了,我用的Mysql是[]形式的。

    6.多条件且、或

    and 用来连接条件,表示多条件必须满足。or用来连接条件,表示满足任一即可。如:where name='zhangsan' and number=94,只会筛选出name和number同时满足了条件的数据行。而:where name='zhangsan' or number=94 则会筛选出name='zhangsan' 或者number=94满足任一条件的数据行。

    那么多个and和or一起使用时怎么办呢,一般优先级是and>or,如:name='zhangsan' and number=94 or number=95,就会解析为(name='zhangsan' and number=94) or (number=95)。因此,为了避免不确定性,我们可以在查询条件中加入括号来对条件进行组合。例如:where (name='zhangsan' or name='lisi') and number = 100 。

    更多相关内容
  • 这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如: String sql="select * from table...where 1=1 是为了避免where 关键字后面的第一个直接就是 “and”而导致语

    这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:

    String sql="select * from table_name where 1=1";
    if( conditon 1) {
      sql=sql+"  and  var2=value2";
    }
    if(conditon 2) {
      sql=sql+"  and var3=value3";
    }
    

    where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。

    动态SQL中连接AND条件

    where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。

    where后面总要有语句,加上了1=1后就可以保证语法不会出错!

    select * from table where 1=1
    

    因为table中根本就没有名称为1的字段,所以该SQL等效于select * from table,

    这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢,

    建议查询时增加必输项,即where 1=1后面追加一些常用的必选条件,并且将这些必选条件建立适当的索引,效率会大大提高

    拷贝表

    create table table_name  as  select  *  from  Source_table  where  1=1;
    

    复制表结构

    create table table_name  as  select  *  from  Source_table  where  1 <> 1;
    

    来源:cloud.tencent.com/developer/article/1475146
    在这里插入图片描述
    欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升•职场突围•思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长

    展开全文
  • where 1=1 是什么鬼?

    2021-01-02 10:45:00
    作者:三哥cloud.tencent.com/developer/article/1475146这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 ...

    作者:三哥

    cloud.tencent.com/developer/article/1475146

    这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:

    String sql="select * from table_name  where 1=1";
    
    if( conditon 1) {
    
      sql=sql+"  and  var2=value2";
    
    }
    
    if(conditon 2) {
    
      sql=sql+"  and var3=value3";
    
    }
    

    where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。

    动态SQL中连接AND条件

    where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。

    where后面总要有语句,加上了1=1后就可以保证语法不会出错!

    select * from table where 1=1
    

    因为table中根本就没有名称为1的字段,所以该SQL等效于select * from table,这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢,

    建议查询时增加必输项,即where 1=1后面追加一些常用的必选条件,并且将这些必选条件建立适当的索引,效率会大大提高

    拷贝表

    create table table_name as select * from Source_table where 1=1;
    

    复制表结构

    create table table_name as select * from Source_table where 1 <> 1;
    

    END

    推荐好文

    强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!
    
    分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
    能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!
    
    
    
    
    展开全文
  • 在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?SQL注入初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?例如:select* fr...

    在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?

    SQL注入

    初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?例如:

    select * from customers;
    与
    select * from customers where 1=1;

    查询出来的结果完全没有区别呀。

    是的,上面的查询结果是没有区别,但是这并不是我们要添加它的目的。我们知道1=1表示true,即永真,在SQL注入时配合or运算符会得到意向不到的结果。

    例如,当我们要删除客户名称为“张三”的记录,我们可以这样写:

    delete from customers where name='张三'

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

    即:

    delete from customers where name='张三' or 1=1

    本来只要删除张三的记录,结果因为添加了or  1=1的永真条件,会导致整张表里的记录都被删除了。

    当然这种事我们可千万不能干,也不能让别人有机可乘,这里只是为了表述where 1=1的作用之一。

    语法规范

    我们在写代码的过程中,为了保证语法规范的时候,也会使用到where 1=1。

    我们先看下面这段Java代码:

    String sql="select * from table_name where 1=1";
    if( condition 1) {
      sql=sql+"  and  var2=value2";
    }
    if(condition 2) {
      sql=sql+"  and var3=value3";
    }

    如果我们不写1=1的话,当condition 1为真时,代码拼接后被执行的SQL代码如下:

    select * from table_name where and var2=value2;

    很明显,这里会出现一个SQL 的语法错误:and必须前后都有条件。

    有人说我直接把where写在if语句里面,我就不写where 1=1。

    String sql="select * from table_name";
    if( condition 1) {
      sql=sql+" where var2=value2 ";
    }
    if(condition 2) {
      sql=sql+" where var3=value3";
    }

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

    select * from table_name where var2=value2;

    这个确实没有语法错误,但是当condition 1和condition 2都为真呢?那么SQL语句就变成了这样:

    select * from table_name 
    where var2=value2 
    where var3=value3;

    很明显这是不符合SQL语法规范的。

    这里写上where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误,加上1=1后,不管后面有没有and条件都不会造成语法错误了。

    拷贝表 

    在我们进行数据备份时,也经常使用到where 1=1,当然其实这两可以不写,写上之后如果想过滤一些数据再备份会比较方便,直接在后面添加and条件即可。

    create table  table_name
    as   
    select * from  Source_table
    where   1=1;

    复制表结构 

    有1=1就会有1<>1或1=2之类的永假的条件,这个在拷贝表的时候,加上where 1<>1,意思就是没有任何一条记录符合条件,这样我们就可以只拷贝表结构,不拷贝数据了。

    create table  table_name
    as   
    select  * from   
    Source_table where   1 <> 1;

    1=1的坏处

    我们在写SQL时,加上了1=1后虽然可以保证语法不会出错! 

    select * from table where 1=1

    但是因为table中根本就没有名称为1的字段,该SQL其实等效于select * from table,这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢。

    所以在查询时,where1=1的后面需要增加其它条件,并且给这些条件建立适当的索引,效率就会大大提高。

    
    ●中国高校单身率排行榜出炉●取数,取数,取个屁啊!
    后台回复“入群”即可加入小z数据干货交流群
    
    展开全文
  • 我们在实际的开发项目中经常...String sql="select * from table_name where 1=1"; if( conditon 1) { sql=sql+" and var2=value2"; } if(conditon 2) { sql=sql+" and var3=value3"; } 这里的if是Java提供演示 w
  • 来源:SQL数据库开发程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?SQL注入初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?...
  • SQL语句:where条件后写上1=1是为了什么 String sql="select * from table_name where 1=1"; if( conditon 1) { sql=sql+" and var2=value2"; } if(conditon 2) { sql=sql+" and var3=value3"; } 上述代码是为了...
  • 之前一直不太明白,sql语句里为什么要写where 1=1 巴拉巴拉巴拉 提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以。 这个1=1常用于应用程序根据用户选择项的不同...
  • 这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如: String sql="select * from table_name where 1=1"; if( conditon 1) { sql=sql+" and var2=value2";...
  • where there is a will,there is a way翻译汉语为:“有志者,事竟成。”where意为在哪里there is意为有a意为一个will意为将way意为方式,方法,道路。拓展资料:地点状语从句表示地点、 方位, 这类从句通常由...
  • 作者:三哥cloud.tencent.com/developer/article/1475146这段代码应该是由程序(例如Java)中生成的,where...例如:String sql="select * from table_name where 1=1";if( conditon 1) {sql=sql+" and var2=value2"...
  • 这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如: String sql="select * from table...where 1=1 是为了避免where 关键字后面的第一个直接就是 “and”而导致语
  • where基本用法

    2020-12-06 14:18:12
    最近家长都对where基本用法相关问题感兴趣,并且有了很多疑惑,网编通过精心查找,找到以下关于where基本用法的答案供大家参考!1Python中where()函数的用法- 樟樟22 - 博客园where()的使用方法首先注重一下,where...
  • 这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如: String sql="select * from table_name where...where 1=1 是为了避免where 关键字后面的第一个直接就是 “an
  • WHERE 条件有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。语法:SELECT column,… FROM tb_name WHERE definitionWHERE 关键字后面接有效的表达式...
  • 这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:  String sql="select * from table_name where 1=1";  if( conditon 1) {  sql=sql+" ...
  • SQL:where 1=1的各种作用

    千次阅读 2022-02-09 11:33:43
    1.拷贝表结构 create table table_name as select *...2.做SQL拼接时 为了满足语法规范SQL 语句中 where 条件后 写上1=1 是什么意思 - 晨起的太阳 - 博客园 我们在写代码的过程中,为了保证语法规范的时候,也会使...
  • 可能乍一听这个都一头雾水,我的意思是假如有一个字段我们需要单独判断,不管if里面是什么情况都得最后判断一下这个字段是否满足要求…额 大家是不是没听懂…表达能力有限 我用代码解释一下我的意思 <select> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,872
精华内容 38,348
关键字:

where是什么词