-
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 。
更多相关内容 -
SQL 语句中 where 条件后 写上 1=1 是什么意思!
2021-02-02 18:06:38这段代码应该是由程序(例如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 商城系统,功能超全,超漂亮!
-
SQL 语句中 where 条件后 写上1=1 是什么意思
2020-11-05 20:37:00在编程过程中,经常会在代码中使用到“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数据干货交流群
-
MYSQL中where条件后写上1=1 是什么意思?
2021-03-25 22:07:56我们在实际的开发项目中经常...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 是什么意思
2021-01-11 10:30:00来源:SQL数据库开发程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?SQL注入初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?... -
SQL语句:where条件后写上1=1是为了什么
2019-06-24 17:11:46SQL语句: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"; } 上述代码是为了... -
MySql为什么要用where 1=1和where 1<>1
2021-08-12 08:43:00之前一直不太明白,sql语句里为什么要写where 1=1 巴拉巴拉巴拉 提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以。 这个1=1常用于应用程序根据用户选择项的不同... -
where 1=1 是什么鬼?SQL中有这玩意?
2021-03-08 12:45:01这段代码应该是由程序(例如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是什么意思 MYsql 三张表 我能写 where a.id=b.id=c.id 还是一...
2021-03-04 04:50:50where there is a will,there is a way翻译汉语为:“有志者,事竟成。”where意为在哪里there is意为有a意为一个will意为将way意为方式,方法,道路。拓展资料:地点状语从句表示地点、 方位, 这类从句通常由... -
面试被问where 1=1,到底是个什么鬼?
2021-03-14 18:16:53作者:三哥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"... -
SQL 语句中 where 条件后 写上 1=1 是什么意思?
2021-02-28 18:07:32这段代码应该是由程序(例如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... -
年轻人不讲武德,where 1=1 是什么鬼?
2020-12-04 18:20:26这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如: String sql="select * from table_name where...where 1=1 是为了避免where 关键字后面的第一个词直接就是 “an -
MySQL Where 条件语句介绍和运算符小结
2021-02-01 08:59:37WHERE 条件有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。语法:SELECT column,… FROM tb_name WHERE definitionWHERE 关键字后面接有效的表达式... -
SQL 语句中 where 条件后 写上1=1 是什么意思
2016-08-26 16:16:26这段代码应该是由程序(例如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:431.拷贝表结构 create table table_name as select *...2.做SQL拼接时 为了满足语法规范SQL 语句中 where 条件后 写上1=1 是什么意思 - 晨起的太阳 - 博客园 我们在写代码的过程中,为了保证语法规范的时候,也会使... -
Mybatis where标签和where语句怎么同时使用?
2021-02-08 21:22:35可能乍一听这个词都一头雾水,我的意思是假如有一个字段我们需要单独判断,不管if里面是什么情况都得最后判断一下这个字段是否满足要求…额 大家是不是没听懂…表达能力有限 我用代码解释一下我的意思 <select> ...