精华内容
下载资源
问答
  • MySQL where型子查询

    千次阅读 2021-01-18 23:02:09
    where型子查询是内层查询的结果,作为外层sql的比较条件.select goods_id, goods_name from goods where goods_id = (select max(goods_id) from goods);内层查询为select max(goods_id) from goods外层查询为...

    where型子查询是内层查询的结果,作为外层sql的比较条件.

    select goods_id, goods_name from goods where goods_id = (select max(goods_id) from         goods);

    内层查询为select max(goods_id) from goods

    外层查询为select goods_id, goods_name from goods where goods_id

    就是在把最大的goods_id的值赋给外层的goods_id

    也可以用比较运算符'in'来做:

    select goods_id, cat_id, goods_name from goods where goods_id in (select max(goods_id)     from goods group by cat_id);

    'in'的意思是在某集合之内,也就是说在以cat_id分组的类中最大的goods_id赋给外层的goods_id,  这样可以得出每个组的最大goods_id.

    展开全文
  • 结果: +---------+--------+ | cust_id | orders | +---------+--------+ | 10001 | 2 | +---------+--------+ 1 row in set (0.00 sec) 与WHERE组合使用(先用WHERE过滤) 有的时候,GROUP BY和WHERE子句也要...

    理解分组:对 GROUP BY 子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作。

    举例:在产品表中,检索每一个供应商提供的商品的数量。

    mysql> SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;

    结果:
    +---------+-----------+
    | vend_id | num_prods |
    +---------+-----------+
    |    1001 |         3 |
    |    1002 |         2 |
    |    1003 |         7 |
    |    1005 |         2 |
    +---------+-----------+
    4 rows in set (0.01 sec)

    分析:

    首先根据vend_id进行分组,然后对每一个分组在进行COUNT聚集。

    当检索的目的是针对每一个记录进行检索的时候,想到用GROUP BY,例如这里是针对每一个供应商。

     

    GROUP BY的规定:

    1、GROUP BY 后面可以包含多个列,这就是嵌套。

    2、如果GROUP BY进行了嵌套,数据将在最后一个分组上进行汇总

    3、GROUP BY子句中列出来的每个列必须是检索列或有效的表达式(但不能是聚集函数),如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。

    4、除了聚集语句外,SELECT语句中的每一个列都必须在GROUP BY子句中给出

    5、如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,它们将作为一个分组返回。

    6、GROUP BY子句必须在WHERE 子句之后,ORDER BY 子句之前

     

    过滤分组结果

    我们知道WHERE 子句用于过滤结果,但是对于分组的过滤WHERE子句不行。

    因为WHERE子句,是针对行的过滤。要对分组结果进行过滤,必须使用HAVING子句,HAVING子句能针对分组的结果进行过滤。

     

    举例:

    在订单表中,检索出具有两个以上订单的客户id以及订单数量。

    分析:

    在这个检索需求中,需要先根据客户id进行分组,然后过滤出订单数量大于2的分组。

    mysql> SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING orders>=2;

    结果:
    +---------+--------+
    | cust_id | orders |
    +---------+--------+
    |   10001 |      2 |
    +---------+--------+
    1 row in set (0.00 sec)

    与WHERE组合使用(先用WHERE过滤)

    有的时候,GROUP BY和WHERE子句也要组合使用。比如:在产品表中检索出能提供2个以上商品,并且价格高于10的供应商。

    分析:

    首先,检索的是供应商,因此SELECT子句应该是SELECT vend_id

    其次,产品表中,有价格这一列,因此对于价格高于10的条件的过滤要使用WHERE子句。SELECT vend_id FROM prodcuts WHERE prod_price>=10.

    接着,对vend_id进行分组,这样就可以得到每个vend_id的价格高于10的商品数量,GROUP BY放到WHERE子句后。SELECT vend_id FROM prodcuts WHERE prod_price>=10 GROUP BY vend_id.

    最后,对分组的结果过滤,过滤出2个以上商品的分组

    mysql> SELECT vend_id,COUNT(*) AS num_prods FROM products WHERE prod_price>=10 GROUP BY vend_id HAVING COUNT(*)>=2;

    结果:
    +---------+-----------+
    | vend_id | num_prods |
    +---------+-----------+
    |    1003 |         4 |
    |    1005 |         2 |
    +---------+-----------+
    2 rows in set (0.00 sec)

    对分组结果进行排序

    在订单明细表中,检索出订单总价格高于等于50的订单号以及订单总价格

    mysql> SELECT order_num,SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price)>=50 ORDER BY ordertotal;

    结果是:
    +-----------+------------+
    | order_num | ordertotal |
    +-----------+------------+
    |     20006 |      55.00 |
    |     20008 |     125.00 |
    |     20005 |     149.87 |
    |     20007 |    1000.00 |
    +-----------+------------+
    4 rows in set (0.08 sec)

     

     

     

     

    SELECT 子句的顺序:

    SELECT

    FROM

    WHERE

    GROUP BY

    HAVING

    ORDER BY

    LIMIT
    ---------------------

    展开全文
  • 例如,为了找出所有以词jet起头的产品,可使用以下SELECT语句:SELECT prod_id,prod_ nameFROM productsWHERE prod_ name LIKE 'jet%';prod_idprod_nameJP1000JP2000JetPack 1000JetPack 2000此例子使用了搜索模式.....

    最常使用的通配符是百分号(%) 。在搜索串中,%表示任何字符出现任意次数。例如,为了找出所有以词jet起头的产品,可使用以下SELECT语句:

    SELECT prod_id,prod_ name

    FROM products

    WHERE prod_ name LIKE 'jet%';

    prod_id

    prod_name

    JP1000

    JP2000

    JetPack 1000

    JetPack 2000

    此例子使用了搜索模式’jet%’。在执行这条子句时,将检索任意以jet起头的词。%告诉MySQL接受jet之后的任意字符,不管它有多少字符。

    区分大小写 根据MySQL的配置方式,搜索可以是区分大小写的。如果区分大小写,’jet%’与JetPack 1000将不匹配。

    通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。下面的例子使用两个通配符,它们位于模式的两端:

    SELECT prod_id,prod_name

    FROM products

    WHERE prod_name LIKE "%anvi1%';

    prod_id

    prod_name

    ANV01

    ANVO2

    ANV03

    .5 ton anvil

    1 ton anvil

    2 ton anvil

    搜索模式’%anvil%’表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符。

    通配符也可以出现在搜索模式的中间,虽然这样做不太有用。下面的例子找出以s起头以e结尾的所有产品:

    SELECT prod_name

    FROM products

    WHERE prod_ name LIKE 's%e';

    重要的是要注意到,除了一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。

    注意尾空格 尾空格可能会干扰通配符匹配。例如,在保存词anvil时,如果它后面有一个或多个空格,则子句WHERE prod_name LIKE ‘%anvil’将不会匹配它们,因为在最后的l后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个%。一个更好的办法是使用函数去掉首尾空格。

    注意NULL 虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE ‘%’也不能匹配用值NULL作为产品名的行。

    喜欢 (26)or分享 (0)

    展开全文
  • }) ->where(function ($where) { $where->where(function ($where) { $where->where('mission.type', '=', Mission::TYPE_ACT) ->where(function ($where) { $where->where('user_mission_log.is_settle', '=', ...

    不知道这样算不算优雅

    $query = Mission::select(DB::raw('IFNULL(user_mission_log.id, 0) as id'), 'mission.id as mission_id', 'mission.type as mission_type', 'mission.name as mission_name', 'description', DB::raw('IFNULL(current_process, 0) as current_process'), DB::raw('IFNULL(user_mission_log.total_process,mission.num) as total_process'), DB::raw(sprintf('IFNULL(user_mission_log.status, %d) as status', UserMissionLog::STATUS_UNFINISHED)), DB::raw(sprintf('IFNULL(user_mission_log.is_settle, %d) as is_settle', UserMissionLog::SETTLE_STATUS_NOT_YET)), DB::raw('IFNULL(mission_award.gold, 0) as gold'), DB::raw('IFNULL(mission_award.score, 0) as score'), 'mission.description')

    ->leftJoin('user_mission_log', function ($join) use ($userId) {

    $join->on('mission.id', '=', 'user_mission_log.mission_id')

    ->where('user_mission_log.user_id', '=', $userId)

    ->where(function ($where) {

    $where->where(function ($where) {

    $where->where('user_mission_log.create_time', '>=', Carbon::today()->toDateTimeString())

    ->where('user_mission_log.create_time', 'tomorrow())

    ->where('mission.type', '=', Mission::TYPE_DAILY);

    })

    ->orWhere('mission.type', '!=', Mission::TYPE_DAILY);

    });

    })

    ->leftJoin('mission_award', 'mission_award.mission_id', '=', 'mission.id')

    ->where('mission_award.is_del', '=', MissionAward::IS_NOT)

    ->where('mission.is_del', '=', Mission::IS_NOT)

    ->where('mission.status', '=', Mission::STATUS_OPEN)

    ->where(function ($where) {

    $where->whereIn(

    'mission.id',

    UserMissionLog::select('mission_id')

    ->where('user_id', '=', 0)

    ->where('create_time', '>=', Carbon::today()->toDateTimeString())

    ->where('create_time', 'tomorrow())

    ->get()->toArray()

    )

    ->orWhere('mission.type', '!=', Mission::TYPE_DAILY);

    })

    ->where(function ($where) {

    $where->where(function ($where) {

    $where->where('mission.type', '=', Mission::TYPE_ACT)

    ->where(function ($where) {

    $where->where('user_mission_log.is_settle', '=', UserMissionLog::SETTLE_NOT_YET)

    ->orWhere(function ($where) {

    $where->where('user_mission_log.is_settle', '=', UserMissionLog::SETTLE_DONE)

    ->where('user_mission_log.settle_time', '>=', Carbon::today()->toDateTimeString())

    ->where('user_mission_log.settle_time', 'toDateTimeString());

    });

    });

    })

    ->orWhere(function ($where) {

    $where->where('mission.start', '<=', Carbon::now()->toDateTimeString())

    ->where('mission.end', '>', Carbon::now()->toDateTimeString());

    });

    })

    ->where(function ($where) use ($type) {

    $type === null ?: $where->where('mission.type', '=', $type);

    })

    ->where(function ($where) {

    $where->WhereRaw(sprintf(

    '(

    (mission.type = %d and ((user_mission_log.create_time >= "%s" and user_mission_log.create_time < "%s") or (user_mission_log.create_time is null) ))

    or

    (mission.type = %d)

    or

    (mission.type = %d and ( (user_mission_log.is_settle = %d or user_mission_log.is_settle is null) or (user_mission_log.create_time >= "%s" and user_mission_log.create_time < "%s") ) )

    )',

    Mission::TYPE_DAILY,

    Carbon::today()->toDateTimeString(),

    Carbon::tomorrow()->toDateTimeString(),

    Mission::TYPE_ACT,

    Mission::TYPE_NEW,

    UserMissionLog::SETTLE_NOT_YET,

    Carbon::today()->toDateTimeString(),

    Carbon::tomorrow()->toDateTimeString()

    ));

    })

    ->orderByRaw(sprintf('FIELD(mission.type, %d, %d, %d)', Mission::TYPE_ACT, Mission::TYPE_DAILY, Mission::TYPE_NEW))

    ->orderByRaw('current_process/total_process desc')

    ->orderBy('mission.id', 'asc');

    $total = $query->count();

    $data = $query->offset($offset)->limit($limit)->get()->toArray();

    展开全文
  • //修改map_2条件的 wher-> whereOr,闭包函数内的whereOr-> where $result = Db::name('data_table') ->where(function ($query) use ($map_1) { $query->whereOr($map_1); }) ->whereOr(function ($query) ...
  • Oracle Where子句

    2021-05-01 09:38:13
    在本教程中将学习如何使用Oracle WHERE子句来指定过滤的条件返回符合查询条件的行记录。Oracle WHERE子句简介WHERE子句指定SELECT语句返回符合搜索条件的行记录。下面说明了WHERE子句的语法:SELECTcolumn_1,column_...
  • MySQL的where条件优化

    2021-01-18 21:07:13
    where 条件优化适合select delete update1.避免无用的括号((a AND b) AND c OR (((a AND b) AND (c AND d))))-> (a AND b AND c) OR (a AND b AND c AND d)2.常量合并(a-> b>5 AND b=c AND a=53.常量条件...
  • I want to extract unique minlat, minlng based on city and country then want to find all id which have this pair I mean something like select id from spots where (minlat,minlng) in (select s.minlat, s....
  • WHERE 条件有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。语法:SELECT column,… FROM tb_name WHERE definitionWHERE 关键字后面接有效的表达式...
  • 分组查询之前学习聚合函数,知道聚合函数在默认情况下,将会把所有的记录当成一,让我们在对列求值,计算时更方便了一些。但是,在某些情况下,我们需要显式地对记录进行分组,使用的是group by [column1,column2....
  • MySQL WHERE:条件查询

    2021-01-18 19:36:40
    在使用 MySQL SELECT语句时,可以使用 WHERE 子句来指定查询条件,从 FROM 子句的中间结果中选取适当的数据行,达到数据过滤的效果。语法格式如下:WHERE {,,…}其中,判定运算其结果取值为 TRUE、FALSE 和 ...
  • TP5 多条件whereOr查询

    千次阅读 2021-02-03 10:39:54
    问题背景:最近在用ThinkPHP 5开发项目的过程中,发现根据筛选条件做or查询的时候,连贯操作不可以使用where进行条件查询了。首先列出一个user数据表的信息:uidunamegrade(年级)class(班级)sex(性别)11号12122号...
  • 我们可以在where IN子句的帮助下传递数组。让我们首先为我们的示例创建一个新表。mysql>createtablePassingAnArrayDemo->(->idint,->Firstnamevarchar(100)->);现在让我们插入记录。mysql>...
  • mysql组合查询

    千次阅读 2021-01-18 18:46:28
    使用UNION多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果...组合查询和多个WHERE条件:多数情况下,组合相同表的两个查询完成的工作与具有多个...
  • where()的用法首先强调一下,where()函数对于不同的输入,返回的只是不同的。1当数组是一维数组时,返回的值是一维的索引,所以只有一索引数组2当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会...
  • where方法的用法是ThinkPHP查询语言...where方法的参数支持字符串和数,虽然也可以使用对象但并不建议。## 字符串条件使用字符串条件直接查询和操作,例如:~~~$User = M("User"); // 实例化User对象$User->whe...
  • MySQL中where条件中IN的慢查询优化我们在编写SQL查询语句时,有时候会遇到连表查询的情况,有时的业务场景为,要查询满足某种条件的一系列id的数据。优化方式一:示例:查询出指定时间之后凡是上传过图片的用户所在...
  • 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>group by>having>order by 其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行: from>where>group by>...
  • having字句可以让我们筛选成后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对记录进行筛选。SQL实例:一、显示每个地区的总人口数和总面积.SELECT ...
  • where()的用法首先强调一下,where()函数对于不同的输入,返回的只是不同的。1当数组是一维数组时,返回的值是一维的索引,所以只有一索引数组2当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会...
  • SQL中where后不能跟聚合函数

    千次阅读 2021-01-28 06:36:05
    我们在编写较为复杂的SQL语句的时候,常常会遇到需要将sum()放到where后面作为条件查询,事实证明这样是无法执行的,执行会报【此处不允许使用分组函数】异常。那么如何解决呢,使用HAVING关键字示例:select sum...
  • MySQL:where子句过滤

    千次阅读 2021-01-19 17:43:46
    一、单一条件:select 列 from 表 where 条件eg: select prod_name,price from products where price>50这里的比较条件包括:注意:列类型为串类型时,值要加引号;具有NULL值的行在匹配过滤和不匹配过滤都不会...
  • 多条件组合查询

    千次阅读 2021-02-07 22:19:00
    // 条件(criteria) 分别为 cname, gender, cellphone, emailpublic List query(Customer criteria){try{// 给出 sql 模板// 先给出一个 sql 语句的前缀// WHERE 条件为 1=1, 方便后面增加其他语句, 要注意 sql 语句...
  • 基于 MySQL 数据库的 where 条件查询语句 ​ 在实际的工作生活中,我们经常需要对数据库中的数据以特定的条件查询筛选出我们希望得到的数据,此时便需要使用 where 的条件查询用法。 ​ where 查询语句支持多种运算...
  • 原文链接网上有不少人提出过类似的问题:“看到有人写了WHERE 1=1这样的SQL,到底是什么意思?”。其实使用这种用法的开发人员一般都是在使用动态组装的SQL。让我们想像如下的场景:用户要求提供一个灵活的查询界面...
  • #Mybatis 之 where 标签简单使用 自己习惯性配上映射对象 这个大家根据自己习惯去写,可以直接使用map去接返回参数 // 返回对象映射 <resultMap id="ResultMap" type="com.xxx.root.ConnRoot"> <result ...
  • 1. select * from XX where A || B != 'ab'|| 解决 where 条件为 A != 'a' and B != 'b'的查询条件在工作项目中,遇到过一个需求=>查询历史交易列表,历史数据库表如图所示,包含这几个字段:银行卡号,交易时间...
  • in newDropList = [9,10,11,12,22,50,51,60,61] newDB = newDB[newDB['... 以上这篇pandas 像SQL一样使用WHERE IN查询条件说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 495,834
精华内容 198,333
关键字:

where组句子