精华内容
下载资源
问答
  • sqlwhere多个条件
    千次阅读
    2019-10-03 12:20:26

    摘要:

        SQL的WHERE子句中包含多个AND和OR

    示例:

        SQL解析器在处理操作时会优先处理and操作:

        假如有表product字段如下:id、product_id、product_price、product_name,现在要查找产品号为100或者101,并且价格大于200的商品,程序员可能会这样写:            select * from product where product_id = 100 or product_id = 101 and product_price > 200

        上述代码中,SQL解析器首先进行and 的操作,最后就成了这个意思:查找产品号为101且价格大于200或产品号为100 的商品。

    添加圆括号即可:

    select * from product where (product_id = 100 or product_id = 101) and product_price > 200

    sql注入中的万能密码一般都会多加几个or,username' or 1=1 or 1=1 --+

    更多相关内容
  • SQL条件查询 where

    千次阅读 2021-03-17 17:17:45
    条件查询 where 语法:select 数据 from 数据源 where 进行过滤条件 select * from emp; select ename,sal,comm,job from emp; 当需要查询的字段不的时候 建议写出字段名 方便后期操作。 select * from emp where ...

    条件查询 where

    语法:select 数据 from 数据源 where 进行过滤条件

    select * from emp;
    select ename,sal,comm,job from emp; 当需要查询的字段不多的时候 建议写出字段名 方便后期操作。
    select * from emp where 1=1 and 条件1 and 条件2 and ...;  建议构面跟 where 1=1  方便以后添加条件
    

    where 后条件符:!=取反

    ​ = 等于

    ​ <>不等于 <20> 不等于20 的

    ​ >= 大于等于

    ​ <=小于等于

    条件与条件之间的连接符

    1). and 与,

    条件1 and 条件2 既满足条件1 也要满足 条件2

    ​ 1和2 的交集

    **例:**工资在1000~2000之间的员工所有信息

    ​ 条件 :

    ​ 员工信息表;工资1000~2000; 员工所有信息

    select * from emp where sal>=1000 and sal<=2000;
    

    2). or

    条件1 or 条件2 满足条件1 或者 条件2

    ​ 1和2 并集 【and 交集】

    **例:**工资小于1000 或者 大于2000 的所有员工信息。 两个条件集的合并

    条件:

    ​ 员工信息表;工资小于1000 工资大于2000

    select * from emp where sal>2000 or sal<1000;
    

    3). not 条件取反

    not 语法:

    例: 1.部门编号不是20的

    select * from emp where not deptno=20;
    

    ​ 2.没有奖金的所有员工信息

    ​ 【 null 的判断

    ​ 1. null没有赋值

    ​ 2.不能用= 或者 != 判断

    ​ 3. null 用 is 连接】

    select * from emp where not comm is null;
    
    select * from emp where comm is not null;
    

    【注意:不能用中式英语 老外不承认 】

    select * from emp where comm not is null;  --错误:中式英语, 奖金不是空 
    

    4). between(值1)and(值2) 区间

    **例:**工资在1000~2000的所有员工信息

    select * from emp where sal between 1000 and 2000;
    

    查询语句的执行流程

    from–> where–>select

    **1.**先从from后表格中拿出数据一条条的

    ​ 用where 判定

    ​ 再输出到查询结果select

    **2.**where 后面不能使用字段名

    : 查询年薪大于15000的员工信息

    分析条件 :员工信息表; 员工年薪; 大于15000:

    ​ 【查询所得 员工年薪 的结果集

    ​ 把结果集当做数据源头

    ​ ,先运算再过滤】

    select ename,empno,job,mgr,sal,comm,(sal+nvl(comm,0))*12 年薪 from emp;
    
    
    select ename, empno, job, mgr, sal, comm, 年薪
      from 
      		(select ename,empno,job, mgr, sal,comm, (sal + nvl(comm, 0)) * 12 年薪 
             from 
             emp)
     where 年薪 > 1500;
    

    some(值列表) all()any()

    **1.**some(值1,值2,值3) 3 个值得并集

    例:

    select * from emp sal>some(1250,5000,3000); 最后显示为大于1250 的所有员工信息
    

    **2. ** any( 值1,值2,值3) 满足任何一个就行 三个值的并集

    select * from emp sal>any(1250,5000,3000); 最后显示为大于1250 的所有员工信息
    

    3. all(值1,值2,值3) 满足任何一个 三个值并集

    select * from emp sal>all(1250,5000,3000); 最后显示为大于1250 的所有员工信息
    

    集合操作

    Union、Union All、Intersect、Minus

    Union 并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;

    Union All 全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;

    Intersect 交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

    Minus 差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序

    select * from emp where deptno>10;
    intersect    --(union|union all|intersect|minus)
    select * from emp where sal>1000;
    

    排序 order by (可以给多个)

    语法:select 数据 from 数据源 where 行过滤条件 order by(有排序需求写) 字段名 desc(降序)|asc(默认升序);

    【执行流程:from–>where–>select–>order by】

    所有员工信息,工资按降序排列 工资一样的按奖金的降序排名

    select * from emp where 1=1 order by sal desc,comm desc;
    

    ​ 所有的员工信息,奖金按降序排名,没有奖金的放在前面

    select * from emp where 1=1 order by comm desc nulls first; --null放在前面
    select * from emp where 1=1 order by comm desc nulls last; --null放在后面
    

    子查询: 查询语句 嵌套 查询语句

    查询KING同部门员工信息

    分析条件

    1. 查询KING所在的部门
    select deptno from emp where name='KING';
    
    1. 查询KING所在部门的员工所有信息 嵌套
    select * from emp where deptno=(select deptno from emp where name='KING');
    
    1. 查询年薪大于15000的员工的所有信息

      ​ 条件分析-- 查询所有员工的年薪 和所有信息

      select empno,ename,job,sal,comm,(sal+nvl(comm,0))*12 年薪 from emp;
      
       																							**【以上作为一个新的结果集,数据源】**
      

      ​ 查询年薪大于15000 的员工所有信息

    select empno, ename, job, sal, comm, 年薪
      from (select empno, ename, job, sal, comm, (sal + nvl(comm, 0)) * 12 年薪
              from emp)
     where 年薪 > 15000;
    

    in 的便用

    例: 查询 10 .20 部门的员工信息

    1. or.或
    select * from emp where deptno=10 or deptno=20;
    

    and 和

    select * from emp where deptno=10 and deptno=20;
    

    条件符号,

    select * from emp where deptno<=20;
    
    1. 集合操作 【上面有详细集合,此处用了一个】
    select * from emp where deptno=20
    union
    select * from emp where deptno=10;
    
    1. in ( 值1,值2 ,值3) 条件等于in里的值

      select * from emp where deptno in(10,20);
      

    【注意:= 与 in 的区别

    = 只可以等于一个值

    in 可以是多个值 或者一个值】

    like 模糊匹配

    like: 模糊匹配 效率低 where like ’ ’ 单引号

    配合 : --> % _ 百分号 下划线使用

    %: --> 任意个数任意字符 使用

    _ : --> 一个任意字符

    = :精确匹配

    例: 1.查询名字里有A的

    select * from emp where ename like '%A%';
    
    		2.  查询名字里 A开头的
    
    select * from emp where ename like 'A%';
    

    3.查询名字里第二个字母为A的

    select * from emp where ename like '_A%';
    

    4.查询名字里倒数第二个字母为A的

    select * from emp where ename like '%A_';
    

    函数

    函数分为系统内置函数 自定义函数

    根据函数的返回值分为:1.单行函数,一条记录返回一个结果

    2.多行函数 ,多行函数 组函数 聚合函数 (重点) :多条记录 返回一个结果 (重点)

    单行函数

    日期

    sysdate/current_date 以date类型返回当前的日期
    add_months(d,x) 返回加上x月后的日期d的值
    LAST_DAY(d) 返回的所在月份的最后一天
    months_between(date1,date2) 返回date1和date2之间月的数目
    next_day(sysdate,星期一) 下一个即将要到来的星期一的日期

    查看今年日日期 sysdate

    select sysdate from dual;
    
    select current_date from dual;
    

    日期可以进行 加减 ± sysdate+90

    select sysdate+90 from dual;--注意2月天数不确定,三个月后日期于今天不同
    

    月份的加减 ± 解决2月份的不确定天数

    ​ 转正日期 add_months( hiredate(开始计算的日期),+3(需要增加的月数))

    select add_months( hiredate,+3) 转正 from emp;
    

    某个月最后一天 last_day( 时间)

    select last_day(sysdate) from dual;
    

    两个日期之间有多少月 months_between(date1,date2)

    ​ 【注意:算法date1-date2=所得值 避免负数】

    select months_between(sysdate,hiredate) 入职月份 from emp;
    select months_between(sysdate,hiredate)/12 入职年份 from emp;
    

    即将要过得星期几 next_day(日期,‘星期几’ )

    ​ 【注意:星期三,汉语三; 老外不承认周几 或者礼拜几】

    select next_day(sysdate,'星期三') 下周三 from dual;
    

    to_char to_date

    to_char(日期对象,‘格式模板’) : 日期转为字符串

    to_date(‘字符串’,‘格式模板’) : 字符串转为日期**

    ​ 【字符串,模板样式 都需要单引号】

    select to_date('1997-07-07 08:30:30','yyyy-mm-dd hh:mi:ss' ) 日期 from dual;
    
    
    /*
    字符串的小时为24时  转化格式hh需要添加24  24小时制
    以上无效的数字  日期转字符串 必须表格自己的日期
    */
    select to_char('1997-07-07 13:30:30','yyyy-mm-dd hh:mi:ss' ) 日期 from dual;
    select to_char(sysdate,'yyyy-mm-dd hh:mi:ss' ) 日期 from dual;
      
    --年 月 日 需要用双引号"原封不动"保留   24必须在hh后 
    select to_char(sysdate,'yyyy"年"-mm"月"-dd"日" hh24"时":mi"分":ss"秒"' ) 日期 from dual;
    select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24"时":mi"分":ss"秒"' ) 日期 from dual;
    select to_char(sysdate,'yyyymmdd hh24miss' ) 日期 from dual;  
    --输出为19970707 133030
    select to_char(sysdate,'yyyymmddhh24miss' ) 日期 from dual; 
    --输出为19970707133030
    

    判断函数

    nvl( 值1,值2) 判定null : 当值1 为null的时候输出值2;

    ​ 当值1 不是null的时候,直接输出值1 ,不考虑值2;

    decode(可变的值,定值case1,case1的结果,定值case2,case2 的结果, 默认结果)

    可变的值与case进行判断:是否相等 【注意不能做多值或区间判断】

    ​ case与case的结果为一对 当可变的值等于定值case1 则输出case1 的结果

    ​ 当可变的值等于定值case2 则输出case2 的结果

    **例:**将部门编号 改为汉字编号

    select deptno,ename,empno,decode(deptno,10,'十',20,'二十',30,'三十','四十') 部门编号汉化 from emp;
    

    decode= 【 case when then else end】 中间没有逗号,用空格分开

    ​ (case 可变的值

    ​ when当可变值为什么时 then 则输出什么

    ​ when当可变值为什么时 then 则输出什么

    ​ else什么都不是则输出这个值

    ​ end结束)

    select deptno,(case deptno when 10 then '十' when 20 then '二十'  when 30 then '三十' else '四十' end) 汉化 from emp;
    
    

    例:

    将部门编号汉化 并且 10部门的工资十倍 20部门的100倍 30部门的1000倍 其他部门不变

    select ename,
           deptno,
           decode(deptno, 10, sal * 10, 20, sal * 100, 30, sal * 1000, sal * 1) 工资翻倍,
           (case deptno
             when 10 then
              '十'
             when 20 then
              '二十'
             when 30 then
              '三十'
             else
              '四十'
           end) 汉化
      from emp;
    

    多行函数

    多行函数| 组合函数| 聚合函数

    count(求个数) sum(求和) avg(求平均) max(求最大) min(求最小)

    语法:select count( 字段名 ) from emp

    ​ ename

    ​ comm 【null不参与运算】

    ​ * 【代表一条数据的所有字段】

    select count(deptno) from emp;
    select count(distinct deptno) from emp;
    

    【注意:select 后面一旦出现组函数只能与其他组函数 或分组字段(group by ) 一起使用

    三十’
    else
    ‘四十’
    end) 汉化
    from emp;

    
    ## 多行函数
    
    多行函数|  组合函数|  聚合函数
    
    **count(求个数)   sum(求和)  avg(求平均)   max(求最大)  min(求最小)**
    
      语法:select  count(      字段名    ) from emp
    
    ​						                    ename
    
    ​							                comm    【null不参与运算】
    
    ​								          	 *          【代表一条数据的所有字段】
    
    ```sql
    select count(deptno) from emp;
    select count(distinct deptno) from emp;
    

    【注意:select 后面一旦出现组函数只能与其他组函数 或分组字段(group by ) 一起使用

    		where 后面不能出现组函数】
    
    展开全文
  • sql语句where条件执行顺序与优化

    千次阅读 2020-11-27 21:36:57
    曾经面试时。被问到过这个问题。结合网上的知识,整理如下: 针对mysql,其条件执行顺序是 ...在用MySQL查询数据库的时候,连接了很多个过滤条件,发现非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1.

    曾经面试时。被问到过这个问题。结合网上的知识,整理如下:

    针对mysql,其条件执行顺序是 从左往右,自上而下;

    针对orcale,其条件执行顺序是从右往左,自下而上。

     

    其中mysql:

    where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个

    在用MySQL查询数据库的时候,连接了很多个过滤条件,发现非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1 AND p.products_id IN (472,474),这样查询需要20多秒,虽然在各个字段上都建立了索引。用分析Explain SQL一分析,发现在第一次分析过程中就返回了几万条数据:WHERE p.languages_id=1 ,然后再依次根据条件缩小范围。

    然后稍微改变一下WHERE字段的位置之后,速度就有了明显地提高:WHERE p.products_id IN (472,474) AND p.languages_id=1 AND t.type=1,这样第一次的过滤条件是p.products_id IN (472,474),它返回的结果只有不到10条,接下来还要根据其它的条件来过滤,自然在速度上有了较大的提升。经过实践发现,不要以为WHERE中的字段顺序无所谓,可以随便放在哪,应该尽可能地第一次就过滤掉大部分无用的数据,只返回最小范围的数据。

    展开全文
  • 经测验,and子句没有明显的查询顺序要求,也就是说,只要and中包含了过滤条件,不管过滤条件在什么位置,执行都会成功。 下面的sql的执行结果是相同的。 SELECT AlarmLevel FROM AlarmCountConfig WHERE CONVERT(...

    在转换相关字段(如varchar转int)的时候,需要前面的and把特殊的不能转换的字符过滤掉,如‘–’,此时,需要依赖and的查询顺序。

    经测验,and子句没有明显的查询顺序要求,也就是说,只要and中包含了过滤条件,不管过滤条件在什么位置,执行都会成功,多个and之间的执行地位是平级的。

    下面的sql的执行结果是相同的。

    SELECT AlarmLevel FROM AlarmCountConfig WHERE CONVERT(FLOAT,ALARMLEVEL)>0 AND AlarmLevel <> '' AND  AlarmLevel <> '--' 
    
    SELECT AlarmLevel FROM AlarmCountConfig WHERE  AlarmLevel <> '' AND  AlarmLevel <> '--' AND CONVERT(FLOAT,ALARMLEVEL)>0 
    

    另外,当空字符串在数值转换的时候会被转换成0
    带where子句查询单个字段的时候,NULL值会直接被过滤

    SELECT ALARMLEVEL FROM AlarmCountConfig WHERE    AlarmLevel <> '--'
    

    结果:

    ALARMLEVEL
    2
    SELECT ALARMLEVEL FROM AlarmCountConfig
    

    结果:

    ALARMLEVEL
    2
    NULL
    NULL
    NULL
    NULL
    展开全文
  •  FROM多表顺序与效率   ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名, 因此FROM子句中写在最后的表(基础表 ...在FROM子句中包含多个表的情况下, 你必须选择记录条数最少的表作为基础表. 当ORAC...
  • SQL 多条件查询

    万次阅读 2017-04-16 17:57:47
    网上有不少人提出过类似的问题:“看到有人写了WHERE 1=1这样的SQL,到底是...界面中列出了四查询条件,包括按工号查询、按姓名查询、按年龄查询以及按工资查询,每查询条件前都有一复选框,如果复选框被选中
  • MySQL:WHERE后跟多个条件

    万次阅读 2016-12-13 11:32:35
    我这里将来解决如何在MySQL执行update,delete等需要查询的语句,最后限制where后跟多个条件的问题。比如,我现在在数据库当中有如下一张表。当我想要更新name为”louyujing”,type为1的string当中的内容,就可以...
  • SQL查询过滤Where子句用法

    万次阅读 2019-09-01 11:01:38
    大多数情况下,查询关注的是表中所有行的一子集,需要用到Where过滤,本文主要介绍过滤的条件连接符(AND, OR, (),NOT),条件类型(相等条件、范围条件、成员条件、通配条件)以及当列名包含NULL值的注意事项。
  • //between and 和前一个SQL语句结果一样,有没大的意义  select *  from dbo.MyClass  where Age >10 and Age  order by Age   //两结果完成一样  select *  from MyClass  where Age between 10 and ...
  • sql where条件语句中同时包含and,or注意加括号

    万次阅读 多人点赞 2018-03-17 22:15:33
    在测试程序的时候发现sql查询语句超过范围检查sql语句发现原语句:select xx from xx where a=b and c=d or e=f;预期的结果是满足a=b的同时c=d或者e=f,忘记加括号导致范围超限加括号后select xx from xx where a=b ...
  • 表的所有数据如下图:   下图and后面的1可以视为传入的参数,当它等于1、2、3时,where后面分别执行不同的三个条件,如下图:
  • 目录 1.where语法和用法 (1)语法:wherewhere <查询条件> (2)用法:获取满足一定条件的目标数据。 ...1.where语法和用法 ...(1)语法:where <...说明:①多个条件则用“and”或 “or” 连接,交集即
  • SQL where里能够加的条件

    千次阅读 2020-05-06 20:12:03
    where语句的三种类别。 比大小类 SELECT * FROM Students WHERE id > 5 这里可以用 >, <, >=, <=, !=等 区间类 SELECT * FROM Students WHERE id BETWEEN 5 AND 7 同理,也有id NOT BETWEEN 5 AND...
  • WHERE子句中,通过AND、OR运算符可以同时连接多个条件,当然AND、OR运算符也可以同时使用。但是当AND、OR运算符同时存在时,其优先级如何确定呢?与大多数语言一样,SQL语言认为AND运算符的运算级别要高于OR运算符...
  • SQL 排除指定多个条件的记录行

    千次阅读 2020-09-18 15:29:22
    在最近的一次数据分析中,我通过一段对两表的链接查询,返回我需要的数据。在使用过程中,我发现了其中包含了一些脏数据,需要通过一些方法清除它们。我定位了这些数据的特点,然后把他们加入到查询的条件中,希望...
  • where条件里面多个值查询

    千次阅读 2021-02-07 14:56:14
    where 后边跟同一条件多值查询用 “ in ()‘’ SELECT * FROM sys_dept WHERE id IN ( 1253175466772705281, 1352263455977005058 ) 不同条件用 and SELECT * FROM sys_dept WHERE id = ...
  • SQL语句like怎么使用多个like条件...

    千次阅读 2021-02-03 13:01:22
    展开全部可以参考以下的代码:select type from new_datas where type like '%科技%' or type like '%IT%'select type from new_datas where type like '%科技%IT%' or type like '%IT%科技%'扩展资料:SQL中的其他...
  • 数据库在通过连接两张或张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时表时使用的条件,它不管on中的条件...
  • 你可能遇到过这种情况:select * from 表A where name in (****),在in语句里面你想用个变量,但是这个变量有时候有多个值,如 in(‘李 四’,‘张三’),这个时候你是绝对不能写成     DECLARE v1 ...
  • sql语句 where条件执行先后顺序

    千次阅读 2020-08-18 14:29:51
    结论如下: 针对mysql,其条件执行顺序是 从左往右,...在用MySQL查询数据库的时候,连接了很多个过滤条件,发现非常慢。例如:SELECT … WHERE p.languages_id=1 AND t.type=1 AND p.products_id IN (472,474)
  • 在oracle数据库中使用SQL语句查询时,遇到了需要使用where in语句一次选择多个多个属性值的情况,第一反应是: select a,b from table where (a,b) in (10000,30); 但程序报错,虽然可以使用子查询语句的方式...
  • sql sever 查询条件 where in 参数

    千次阅读 2019-07-23 17:15:29
    select * from tb where charindex(s1 , ? ) 这样就可以传递多个变量进入条件语句 ? 为你传递的变量,sql sever 是单引号。
  • 命令的关键是@"delete from mqttlist where uid = '%@' and indexCount = '0'"@"delete from 表名 where 字段A = '%@' and 字段B = '0'
  • sql code: select * from table_...where (case when t.table_column='条件' then t.table_column when t.table_column='条件' then t.table_column end)='条件' my sql code: -- 测试sql SELECT *FROM PROJ...
  • 在oracle数据库中使用SQL语句查询时,遇到了需要使用where in语句一次选择多个多个属性值的情况,第一反应是: select a,b from table where (a,b) in (10000,30); 但程序报错,虽然可以使用子查询语句的方式访问...
  • 一条sql语句查询多个条件的写法

    千次阅读 2020-08-18 15:21:40
    1.一条sql语句查询多个条件的写法 (1)sql语句的使用 SELECT p1.count1 AS todayAdd,p2.count2 AS todayReturns,p3.count3 AS sameMonthAdd,p4.count4 AS lastMonthAdd FROM (SELECT COUNT(create_time)count1 ...
  • 背景:数据库用的Oracle; 报表用的是【FineReport】,之前没用过,被临时授命解决问题,所以大概了解了一下。里面应该是集成了excel插件,报表样式如下: ...前期因为某一些需求,有一家医院出现了两不同的名...
  • linq to sql where 多条件 or and

    万次阅读 2016-10-19 08:51:05
     where = where.Or(p => p.カラム1 == 検索条件1); } if (!string.IsNullOrEmpty(検索条件2)) {  where = where.Or(p => p.カラム2 == 検索条件2); } var result = list.Where(where.Compile())....
  • SQL语句之条件查询--WHERE(where)

    万次阅读 2021-04-19 20:23:43
    二、按照逻辑表达式筛选(一般就是用于连接多个条件表达式) 逻辑运算符: && 、 || 、 ! 建议使用 and 、or 、not 三、模糊查询 like between and in is null 一、按条件表达式筛选 例:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 420,554
精华内容 168,221
关键字:

sqlwhere多个条件

友情链接: led.rar