精华内容
下载资源
问答
  • 要写成一组查询条件需要这样闭包写(就相当于把这两个条件放在一个小括号里,是一组查询条件“(xxx or xxx)”): if (!empty($key)) { $goodsModel = $goodsModel->where(function ($query) use ($key) { $...

    orWhere如果不用闭包的形式写很容易写成分开的查询条件

    要写成一组查询条件需要这样闭包写(就相当于把这两个条件放在一个小括号里,是一组查询条件“(xxx or xxx)”):

    if (!empty($key)) {

        $goodsModel = $goodsModel->where(function ($query) use ($key) {

            $query->where('a', 'like', "%{$key}%")->orWhere('b', 'like', "%{$key}%");

        });

    }

    $goodsShow = Goods::where('cate_id','=',$cate_id)
        ->where(function($query){
            $query->where('status','<','61')
                ->orWhere(function($query){
                    $query->where('status', '91');
                });
        })->first();
    

      这一段其实执行的就是where cate_id = $cate_id AND (status < 61 OR status = 91)

    展开全文
  •  where条件中的''in''在逻辑上相当于''or'',所以语法分析器会将in (''0'',''1'')转化为id_no =''0'' or id_no=''1''来执行。我们期望它会根据每个or子句分别查找,再将结果相加,这样可以利用id_no上的索引;但...

      

             sql优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充分利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生。


            select count(*) from stuff where id_no in(''0'',''1'')(23秒)

             where条件中的''in''在逻辑上相当于''or'',所以语法分析器会将in (''0'',''1'')转化为id_no =''0'' or id_no=''1''来执行。我们期望它会根据每个or子句分别查找,再将结果相加,这样可以利用id_no上的索引;但实际上(根据showplan),它却采用了"OR策略",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,最后从这个临时表中计算结果。因此,实际过程没有利用id_no上索引,并且完成时间还要受tempdb数据库性能的影响。   

             实践证明,表的行数越多如果有620000行时,执行时间竟达到220秒!还不如将or子句分开:  


            select count(*) from stuff where id_no=''0''  

            select count(*) from stuff where id_no=''1'' 

     

            得到两个结果,再作一次加法合算。因为每句都使用了索引,执行时间只有3秒,在620000行下,时间也只有4秒。或者,用更好的方法,写一个简单的存储过程:  

    create proc count_stuff as  declare @a int  declare @b int  declare @c int  

    declare @d char(10)  begin  
    select @a=count(*) from stuff where id_no=''0''  select @b=count(*) from stuff where id_no=''1''  end  
    select @c=@a+@b  
    select @d=convert(char(10),@c)  print @d 
     
      直接算出结果,执行时间同上面一样快!   
      总结:  
      可见,所谓优化即where子句利用了索引,不可优化即发生了表扫描或额外开销。   
      1.任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。   
      2.in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。 
       3.要善于使用存储过程,它使SQL变得更加灵活和高效。   
                     上述这些只是在应用层次的一种体现,深入研究还会涉及数据库层的资源配置、网络层的流量控制以及操作系统层的总体设计






    展开全文
  • $query-&gt;where([ 'status' =&gt; 10, 'type' =&...相当于sql 中的 ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15)) 。 $query-&gt;filterWhere([ 'sta...

    $query->where([ 'status' => 10, 'type' => null, 'id' => [4, 8, 15], ]);

    相当于sql 中的  ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15)) 。

    $query->filterWhere([

    'status' => $A,

    'type' => $B,

    ]);

    filterWhere可以忽略空值,比如说$B 为空$A 不为空, 相当于sql中的 WHERE status =10。

     

     

    展开全文
  • where子句和having子句区别

    千次阅读 2017-10-21 17:21:34
     2.having 是跟group by连在一起用的,放在group by 后面,此时的作用相当于where  3.where 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。 一、where子句  where子句:where子句仅仅用于

    where子句和having子句的区别:

        1.where  不能放在group by后面

        2.having   是跟group by连在一起用的,放在group by 后面,此时的作用相当于where

        3.where  后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。

    一、where子句

        where子句:where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选,where子句中允许使用比较运算符和逻辑运算符

    二、having子句

        having子句:having子句通常是与order by子句一起使用的,因为having的作用是对使用group by 进行分组统计后的结果进行进一步的筛选。

    三、下面通过where子句和having子句的对比,更进一步的理解他们

        在查询过程中聚合函数(SUM,MIN,MAX,AVG,COUNT)要比having子句优先执行,简单的理解为只有有了统计结果后我才能执行筛选。where子句在查询过程中执行优先级别优先于聚合函数(SUM,MIN,MAX,AVG,COUNT),因为他是一句一句筛选的,HAVING子句可以让我们筛选成组后的对各组数据筛选。而WHERE子句在聚合前筛选记录,如:现在我们想要部门号不等于10的部门并且工资总和大于8000的部门编号?

        分析:通过where子句筛选除部门编号不为10的部门,然后对部门工资进行统计,然后使用having子句对统计结果进行筛选。

       select deptno,sum(sa1) from emp

            where deptno!='10'  group by deptno

            having sum(sa1)>8000;

    四、异同点

        他们的相同之处就是定义搜索条件,不同之处是where子句为单个筛选而having子句和组有关,而不是与单个的行有关

         最后:理解having子句和where子句最好的方法就是基础select 语句中的那些句子的处理次序:where子句只能接受from子句输出的数据,而having子句则可以接受来自group by ,where或者from子句的输入。

    having子句会在分组后对分组形成的结果进行过滤。

    这个过程需要聚合、排序、因此如果通过where子句限制记录而省略掉having子句,是可以提升性能的。





    展开全文
  • having子句与where子句

    千次阅读 2020-10-11 20:10:50
    2.2 having 是跟group by连在一起用的,放在group by 后面,此时的作用相当于where 2.3 where 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。 一、where子句 where子句:where子句仅仅用于从from...
  • ORACLE中相当于LIKE IN

    千次阅读 2020-05-14 16:36:55
    SELECT T.*,ROWID FROM T WHERE F_YEAR = '2018' AND REGEXP_LIKE(F_SSXM,'^(1t|2t|3t)')
  • [My SQL] 使用WHERE过滤数据

    千次阅读 2017-08-07 16:20:32
    WHERE关键字相当于excel的筛选,不同的是WHERE只能实现完全匹配,不能实现部分匹配,相同的是,WHERE不区分大小写。 在同时使用ORDER BY和WHERE时,应该将ORDER BY位于WHERE之后。 在这里我们假设有一张表,名为...
  • Having子句和Where子句

    千次阅读 2019-05-14 14:45:10
    2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 一、聚合函数 说明前我们先了解下聚合函数:聚合函数有...
  • mongodb的where条件

    千次阅读 2017-01-18 17:07:33
    mongodb的where条件1. 比较条件 等于 db.tian.find({ 'name':'tian' }) 或 db.tian.find({ 'name':{'eq':'tian'} ...相当于 select* from tian where name='tian';小于 $lt db.tian.find({ 'name':{$lt:50} }).
  • numpy.where() 用法详解

    千次阅读 2018-09-14 09:49:20
    numpy.where (condition[, x, y])numpy.where() 有两种用法: 1. np.where(condition, ...如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x,y)] &gt;&gt;&gt; aa = np.a...
  • SQL过滤数据——WHERE

    千次阅读 2019-09-02 21:41:50
    如何使用 SELECT 语句的 WHERE 子句指定搜索条件。 总表 1、使用 WHERE 子句 数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会 根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要...
  • MySQL之where条件查询

    千次阅读 2019-05-10 15:51:57
    一、where条件 单表查询是MySQL查询中的一种常见的查询方式,而where语句块则在...**:相当于按照表中字段顺序罗列表中的所有字段 字段列表:当查询结果只是表中部分字段时,可将要显示的字段罗列出来,字段之间以逗...
  • where 子句和having子句中的区别

    千次阅读 2018-06-14 19:53:03
    2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点就是...
  • php的where查询

    千次阅读 2017-06-29 11:27:07
    where方法可以用于对数据库操作的结果进行筛选。即SQL查询语句中的where子句。本文给大家介绍ThinkPHP中where()使用方法详解,感兴趣的朋友参考下 本文介绍ThinkPHP的where()方法的用法。where方法可以...
  • where中使用decode函数

    千次阅读 2013-04-10 10:39:54
    where中使用decode函数达到要求。 select * from zjk_pos_supplier_order where ((decode(:code, NULL, 1, 0) = 1) or code = :code) ... 以上语句如果:code变量赋值为null,则相当于语句 select *
  • whereNull 相当于 is null whereNotNull相当于is not null 举个例子 这是数据库中的lara表 $res = DB::table('lara')->whereNull('uname')->get(); dd($res); 本条语句输出结果为 id=6的一条数据 ...
  • Mysql 数据库中Where 关键字的使用

    千次阅读 2018-03-23 20:01:47
    一、Mysql 数据库中where 关键字的使用1、Where 是sql语句中用来限定查询条件的...3、第二种是使用IN关键字,适用于子查询只有多个返回结果的情况,相当于不做筛选,只要是返回的结果都能通过。事例:#使用IN子查询...
  • MyBatis中的<where>标签和where子句的区别

    万次阅读 多人点赞 2017-02-10 13:20:18
    Q:MyBatis中的where标签和where子句的区别?A:where标签为MyBatis的动态语句。  select * from user  <where>  != null ">id=#{id}</if>
  • C# Linq处理 Where条件筛选

    万次阅读 2017-12-28 13:19:00
    C# Linq处理 Where条件筛选
  • where字句常用的查询条件及用法

    千次阅读 2020-09-30 09:56:44
    where字句常用的查询条件 ...BETWEEN AND(相当于闭集合[BETWEEN,AND]) , NOT BETWEEN AND(不属于闭集合[BETWEEN,AND]的范围) 确定集合 IN , NOT IN 字符匹配 LIKE NOT LIKE 通配符 % ,_ 多重运算(逻
  • oracle 的 where 1=2

    千次阅读 2020-08-04 14:03:04
    create table copy_route_header as select * from route_...如果不带条件相当于复制一张表。 1=2表示没有其它条件时不查出数据,用作where拼接sql句子。。 1=1 为true,任何情况下都执行 1=2 为false,不执行 ...
  • SAS:where 语句

    千次阅读 2016-04-01 19:07:21
    SAS WHERE 语句用于 SAS 数据步骤或过程语句中,用于筛选数据行。 简介 WHERE 语句的格式很简单,只要后面跟用于数据筛选的逻辑表达式即可: WHERE logical-expression(s); 下面的例子基于 test1 数据表生成...
  • SQL中JOIN操作后接ON和WHERE关键字的区别

    万次阅读 多人点赞 2018-06-26 17:07:55
    本文主要介绍 SQL(Structured Query Language)中 JOIN 操作后接 ON 和 WHERE 关键字的区别。 说明:本文的用法示例是面向 MySQL 数据库的。 1 概述 当我们使用连接(JOIN)操作,关联两张或多张表来返回记录时...
  • 比如下面这句 select nvl(max(ver),0) from PD_YEARTHROUGHPUT where productionyear=2009 当max(ver) 为null时,会用0取代
  • where子句中使用case when函数

    千次阅读 2018-12-18 23:57:50
    CASE WHEN 其实相当于产生了一个列,最后WHERE 再按那个列来限定 SELECT * AS A FROM TB WHERE CASE WHEN 1=1 THEN 1 ELSE 0 END =1 等价于 SELECT * FROM (SELECT * ,CASE WHEN 1=1 THEN 1 ELSE 0 END AS A ...
  • SQL教程——where语法

    千次阅读 2020-11-30 14:12:46
    摘要:本文主要SQL语句中where的语法和使用 Where (1)、按条件表达式筛选 条件运算符:> < = != <> >= <= (2)、按逻辑表达式筛选 逻辑运算符: && || and or not (3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,671
精华内容 92,268
关键字:

where相当于