精华内容
下载资源
问答
  • sql中where,group by,having的用法总结
    千次阅读
    2019-08-22 14:45:43

    如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人,就要用到分组的技术。
    having是分组(group by)后的筛选条件,分组后的数据组内再筛选
    where则是在分组前筛选 

    当同时含有 where 子句、group by 子句 、having 子句及聚集函数时,执行顺序如下:
    执行where子句查找符合条件的数据;
    使用group by 子句对数据进行分组;
    对group by 子句形成的组运行聚集函数计算每一组的值;
    最后用having 子句去掉不符合条件的组;

    例如:显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区

    SELECT region, SUM(population), SUM(area)
    FROM bbc
    GROUP BY region
    HAVING SUM(area)>1000000

    在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。(where子句中不能使用聚集函数)
    相反,HAVING子句可以让我们筛选成组后的各组数据。 

    如下是个很经典的例子:

    select * from sc;
    

                SNO PNO         GRADE
                ---------- ----- ----------
                     1 YW            95
                     1 SX             98
                     1 YY             90
                     2 YW            89
                     2 SX             91
                     2 YY             92
                     3 YW            85
                     3 SX             88
                     3 YY             96
                     4 YW            95
                     4 SX             89
                     4 YY             88

    这个表所描述的是4个学生对应每科学习成绩的记录,其中SNO(学生号)、PNO(课程名)、GRADE(成绩)。

    1、显示90分以上学生的课程名和成绩

    --这是一个简单的查询,并没有使用分组查询
    select sno,pno,grade from sc where grade > 90;

                SNO    PNO    GRADE
                ---------- ----- ----------
                     1 YW           95
                     1 SX            98
                     1 YY            90
                     2 SX            91
                     2 YY            92
                     3 YY            96
                     4 YW           95 

    2、显示每个学生的成绩在90分以上的各有多少门 

    --进行分组显示,并且按照where条件之后计数
    select sno, count(*) from sc where grade > 90 group by sno;

                  SNO   COUNT(*)
            -    --------- ----------
                     1          3
                     2          2
                     4          1
                     3          1

    3、如果我们要评选三好学生,条件是至少有两门课程在90分以上才能有资格,列出有资格的学生号及90分以上的课程数。

    --进行分组显示,并且按照where条件之后计数,再根据having子句筛选分组
    select sno,count(*) from sc where grade > 90 group by sno having count(*) >= 2;

                SNO   COUNT(*)
            ----------  ----------
                     1          3
                     2          2

    跟上一个例子比较之后,发现这是在分组后进行的子查询。

    4、学校评选先进学生,要求平均成绩大于90分的学生都有资格,并且语文课必须在95分以上,请列出有资格的学生

    --实际上,这个查询先把语文大于95分的学生号提取出来,之后求平均值,分组显示后根据having语句选出平均成绩大于90的 
    select sno,AVG(grade) from sc where sno in 
    (select sno from sc where PNO='YW' and grade > 95)
    group by sno having AVG(grade) > 90;

               SNO    AVG(GRADE)
            ----------   ----------
                     1    94.3333333
                     4    90.6666667

     5、查询比平均成绩至少比学号是3的平均成绩高的学生学号以及平均分数

    --having子句中可进行比较和子查询
    select sno, AVG(grade) from sc group by sno having AVG(grade) >
    (select AVG(grade) from sc where sno=3);  

     

    更多相关内容
  • 主要介绍了thinkphp3.2框架中where条件查询用法,总结分析了thinkphp3.2中where条件查询中常用的各种查询条件、以及各种复合查询实现方法,需要的朋友可以参考下
  • 主要介绍了CI框架中数据库操作函数$this->db->where()相关用法,结合实例分析了or_where()、where_in()、or_where_in()、where_not_in()及or_where_not_in()等函数的使用技巧,需要的朋友可以参考下
  • 本文实例总结了CI框架中数据库操作函数$this->db->where()相关用法。分享给大家供大家参考,具体如下: CI 框架数据库操作函数 this->db->where() 的使用 1) $this->db->where(‘MATCH (field) AGAINST (“value”)...
  • 我们可以使用一个条件子句WHERE子句中筛选出来的结果。使用WHERE子句,我们可以指定一个选择的标准来从表中选择所需的记录。语法:下面是通用的SQL WHERE子句来获取数据从MySQL表的SELECT命令的语法:SELECT field1, ...

    我们已经看到SQL SELECT命令来从MySQL表获取数据。我们可以使用一个条件子句WHERE子句中筛选出来的结果。使用WHERE子句,我们可以指定一个选择的标准来从表中选择所需的记录。

    语法:

    下面是通用的SQL WHERE子句来获取数据从MySQL表的SELECT命令的语法:

    SELECT field1, field2,...fieldN table_name1, table_name2...

    [WHERE condition1 [AND [OR]] condition2.....

    可以使用一个或多个以逗号分隔的表,包括各种使用WHERE子句条件。但是WHERE子句的SELECT命令是一个可选部分。

    您可以使用WHERE子句指定任何条件。

    您可以指定一个以上的条件下使用AND或者OR运算符。

    一个WHERE子句中可以使用的分散DELETE或UPDATE的SQL命令指定条件。

    就像编程语言中的一样,如果条件的WHERE子句。该子句用于在MySQL的表的字段值与给定值比较。如果从外部给定值是等于可用字段值在MySQL表,然后返回该行。

    这里是清单的运算符可以使用WHERE子句。

    假设字段A有值为10和字段B拥有的值为20:

    1befd55349d5b444b1d1ef6603a422f3.png

    WHERE子句是非常有用的,当想获取的选择表中的行,特别是当你使用MySQL的JOIN。JOIN在另一章中讨论。

    这是一个常见的做法是使用主键查找记录,使搜索快速。

    如果给定的条件不符合任何表中的记录,那么查询不会返回任何行。

    从命令提示符获取数据:

    这将使用SQL SELECT命令的WHERE子句,以获取选择的数据MySQL表tutorials_tbl

    实例:

    下面的例子将返回tutorials_tbl表中作者的名字是Sanjay所有记录:

    root@host# mysql -u root -p password;

    Enter password:*******

    mysql> use TUTORIALS;

    Database changed

    mysql> SELECT * from tutorials_tbl WHERE tutorial_author='Sanjay';

    +-------------+----------------+-----------------+-----------------+

    | tutorial_id | tutorial_title | tutorial_author | submission_date |

    +-------------+----------------+-----------------+-----------------+

    | 3 | JAVA Tutorial | Sanjay | 2007-05-21 |

    +-------------+----------------+-----------------+-----------------+

    1 rows in set (0.01 sec)

    mysql>

    除非执行LIKE比较字符串的比较是不区分大小写的。可以搜索区分大小写,使用BINARY关键字如下。

    root@host# mysql -u root -p password;

    Enter password:*******

    mysql> use TUTORIALS;

    Database changed

    mysql> SELECT * from tutorials_tbl \

    WHERE BINARY tutorial_author='sanjay';

    Empty set (0.02 sec)

    mysql>

    使用PHP脚本获取数据:

    可以使用相同SQL的SELECT命令的WHERE子句中到PHP的functionmysql_query()中。这个函数是用来执行SQL命令后,另一个PHP函数mysql_fetch_array()可以用来获取所有选定的数据。这个函数返回的行作为一个关联数组,数字数组或两者。这个函数返回FALSE,如果没有更多的行。

    实例:

    下面的例子将返回tutorials_tbl表中作者的名字是Sanjay所有记录:

    $dbhost = 'localhost:3036';

    $dbuser = 'root';

    $dbpass = 'rootpassword';

    $conn = mysql_connect($dbhost, $dbuser, $dbpass);

    if(! $conn )

    {

    die('Could not connect: ' . mysql_error());

    }

    $sql = 'SELECT tutorial_id, tutorial_title,

    tutorial_author, submission_date

    FROM tutorials_tbl

    WHERE tutorial_author="Sanjay"';

    //by www.zyiz.net

    mysql_select_db('TUTORIALS');

    $retval = mysql_query( $sql, $conn );

    if(! $retval )

    {

    die('Could not get data: ' . mysql_error());

    }

    while($row = mysql_fetch_array($retval, MYSQL_ASSOC))

    {

    echo "Tutorial ID :{$row['tutorial_id']}
    ".

    "Title: {$row['tutorial_title']}
    ".

    "Author: {$row['tutorial_author']}
    ".

    "Submission Date : {$row['submission_date']}
    ".

    "--------------------------------
    ";

    }

    echo "Fetched data successfully\n";

    mysql_close($conn);

    ?>

    展开全文
  • 主要介绍了MySQL Where 条件语句介绍和运算符小结,本文同时还给出了一些用法示例,需要的朋友可以参考下
  • HAVING和WHERE的区别和使用方法

    千次阅读 2019-03-30 08:19:04
    2. WHERE可以单独作为过滤条件进行使用; 单独使用不会报错; Having单独使用报错很明显,需要GROUP BY语句联合一起使用;并不能单独使用; 3. HAVING它弥补了WHERE关键字不能与聚合函数联...

    1. HAVING通常与GROUP BY语句联合一起使用,用来过滤由GROUP BY语句返回的记录集,因此它不能单独使用;在这里插入图片描述
    上图组合使用不会报错;
    在这里插入图片描述
    若是单独使用将会报错,如上图:
    2. WHERE可以单独作为过滤条件进行使用;
    在这里插入图片描述
    单独使用不会报错;
    在这里插入图片描述
    Having单独使用报错很明显,需要GROUP BY语句联合一起使用;并不能单独使用;
    3. HAVING它弥补了WHERE关键字不能与聚合函数联合使用的不足;
    4. WHERE过滤条件必须在GROUP BY进行分组操作之前使用;
    在这里插入图片描述
    Where关键字在Group by之前使用并不会报错;
    在这里插入图片描述
    Where关键字在Group by之后使用就会报错;
    5. HAVING过滤条件必须在GROUP BY进行分组操作之后使用;
    在这里插入图片描述
    HAVING在GROUP BY之后使用并不会报错;
    在这里插入图片描述
    HAVING在GROUP BY之前使用就会报错;
    HAVING 举例:
    1、查询出最大工资大于10000的部门ID以及工资
    在这里插入图片描述
    2、where、having以及group by结合使用,查询出部门id大于90并且最大工资大于10000的部门ID以及工资,如下图:
    在这里插入图片描述
    **总结:**通俗一点说就是:where只能跟着from后,having只能跟着group by后;两者都可以跟group by组合使用,但是要注意的就是位置的不同,一个是前,一个是后;位置不对就会报错;

    展开全文
  • 1.Thinkphp中where()条件的使用总是有人觉得,thinkphp的where()就是写我要...也可以加强sql语句的严密性,也有利于进行搜索查询1.1查询方法分类where方法用法是ThinkPHP查询语言的精髓,可以完成包括普通查询、表...

    1.Thinkphp中where()条件的使用

    总是有人觉得,thinkphp的where()就是写我要进行增加、查询、修改、删除数据的条件,很简单的,其实我想告诉你,where()是写条件语句的,但是他很不简单,严密的条件语句,可以有效的防止sql注入,也可以加强sql语句的严密性,也有利于进行搜索查询

    1.1查询方法分类

    where方法的用法是ThinkPHP查询语言的精髓,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。

    1.1.1字符串条件

    使用字符串条件直接查询和操作(TP框架控制器中的条件语句可以在/Runtime/Logs/.. 里面找到,可以对比)

    例:

    $User = M("User"); //实例化User对象

    $User->where('type=1 AND status=1')->select();

    生成sql语句:SELECT * FROM user WHERE type=1 AND status=1;

    在TP版本3.1以上时,建议配合预处理机制,确保更加安全,可以有效的防sql注入

    $Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();

    或者:$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();

    1.1.2数组条件

    最简单的数组条件查询:

    $User = M("User"); // 实例化User对象

    $map['name'] = 'thinkphp';

    $map['status'] = 1;

    // 把查询条件传入查询方法

    $User->where($map)->select();

    生成的SQL语句:SELECT * FROM user WHERE `name`='thinkphp' AND status=1

    1.1.3表达式查询

    $map['字段1']  = array('表达式','查询条件1');

    $map['字段2']  = array('表达式','查询条件2');

    $Model->where($map)->select();

    1.1.4表达式中运算符条件的查询

    TP运算符

    SQL运算符例子实际查询条件

    eq

    =

    $map['id'] = array('eq',100);

    等效于:$map['id'] = 100;

    neq

    !=

    $map['id'] = array('neq',100);

    id != 100

    gt

    >

    $map['id'] = array('gt',100);

    id > 100

    egt

    >=

    $map['id'] = array('egt',100);

    id >= 100

    lt

    <

    $map['id'] = array('lt',100);

    id < 100

    elt

    <=

    $map['id'] = array('elt',100);

    id <= 100

    like

    like

    $map = array('like','Admin%');

    username like 'Admin%'

    between

    between and

    $map['id'] = array('between','1,8');

    id BETWEEN 1 AND 8

    not between

    not between and

    $map['id'] = array('not between','1,8');

    id NOT BETWEEN 1 AND 8

    in

    in

    $map['id'] = array('in','1,5,8');

    id in(1,5,8)

    not in

    not in

    $map['id'] = array('not in','1,5,8');

    id not in(1,5,8)

    and(默认)

    and

    $map['id'] = array(array('gt',1),array('lt',10));

    (id > 1) AND (id < 10)

    or

    or

    $map['id'] = array(array('gt',3),array('lt',10), 'or');

    (id > 3) OR (id < 10)

    xor(异或)

    xor

    两个输入中只有一个是true时,结果为true,否则为false,例子略。

    1 xor 1 = 0

    exp

    综合表达式

    $map['id'] = array('exp','in(1,3,8)');

    $map['id'] = array('in','1,3,8');

    exp 不是一个运算符,而是一个综合表达式以支持更复杂的条件设置。exp 的操作条件不会被当成字符串,可以使用任何 SQL 支持的语法,包括使用函数和字段名称。

    1.1.5快捷查询

    一、实现不同字段相同的查询条件

    $User = M("User"); // 实例化User对象

    $map['name|title'] = 'thinkphp';

    // 把查询条件传入查询方法

    $User->where($map)->select();

    查询条件就变成 name= 'thinkphp' OR title = 'thinkphp',是不是很强大

    二、实现不同字段不同的查询条件

    $User = M("User"); // 实例化User对象

    $map['status&title'] =array('1','thinkphp','_multi'=>true);

    // 把查询条件传入查询方法

    $User->where($map)->select();

    '_multi'=>true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp' ,查询字段还能支持更多。

    例:$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);

    查询条件就变成 status= 1 AND score >0 AND title = 'thinkphp'

    注意:快捷查询方式中“|”和“&”不能同时使用。

    三、区间查询

    where方法支持对某个字段的区间查询,例如:

    $map['id'] = array(array('gt',1),array('lt',10)) ;

    得到的查询条件是: (`id` > 1) AND (`id` < 10)

    $map['id'] = array(array('gt',3),array('lt',10), 'or') ;

    得到的查询条件是: (`id` > 3) OR (`id` < 10)

    区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKE、GT和EXP这样的表达式都可以支持。另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起。

    例:$map['name']  = array(array('like','%a%'), array('like','%b%'), array('like','%c%'), 'ThinkPHP','or');

    最后的查询条件是:(`name` LIKE '%a%') OR (`name` LIKE '%b%') OR (`name` LIKE '%c%') OR (`name` = 'ThinkPHP')

    1.1.6组合查询(这是项目中最常用到,并且很重要的一个查询方式)

    一、字符串模式查询(采用_string 作为查询条件)

    数组条件还可以和字符串条件混合使用,例如:

    $User = M("User"); // 实例化User对象

    $map['id'] = array('neq',1);

    $map['name'] = 'ok';

    $map['_string'] = 'status=1 AND score>10';

    $User->where($map)->select();

    最后得到的查询条件就成了:( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )

    二、请求字符串查询方式

    请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。

    $map['id'] = array('gt','100');

    $map['_query'] = 'status=1&score=100&_logic=or';

    得到的查询条件是:`id`>100 AND (`status` = '1' OR `score` = '100')

    三、复合查询

    复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。

    例如:

    $where['name']  = array('like', '%thinkphp%');

    $where['title']  = array('like','%thinkphp%');

    $where['_logic'] = 'or';

    $map['_complex'] = $where;

    $map['id']  = array('gt',1);

    查询条件是:( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )

    复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。(当你掌握到这种程度,说明你的where()条件的使用快没有问题了)

    1.1.7多次调用

    where方法支持多次调用,但字符串条件只能出现一次。

    $map['a'] = array('gt',1);

    $where['b'] = 1;

    $Model->where($map)->where($where)->where('status=1')->select();

    多次的数组条件表达式会最终合并,但字符串条件则只支持一次。

    总结了这么多,是不是感觉有些用法自己也用过呢?感觉写的还可以,点个赞

    展开全文
  • where()相关用法。分享给大家供大家参考,具体如下:CI 框架数据库操作函数 this->db->where() 的使用1) $this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE)如果把$this->db->whe...
  • np.where()用法总结

    万次阅读 多人点赞 2018-03-21 20:52:15
    用法一:可以返回一个n维数组,可广播。# np.where(condition, x, y)# condition, x, y, return are all can be #ndarray x = np.random.randn((4, 4)) np.where(x&gt;0, 2, -2) output:用法二:condition 也...
  • 1、Mysql中Having和Where用法 当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句。如果是在聚合函数前过滤记录用Where,在聚合函数后对组记录数据进行筛选就...
  • 1、数字筛选:sql = “Select * from [sheet1$] Where 销售单价 > 100” 2、字符条件:sql = “Select * from [sheet1$] Where 物品名称 =’挡泥板'” 3、日期条件:sql = “Select * from [sheet1$] Where 物品名称...
  • MySQL WHERE子句的用法

    千次阅读 2018-06-26 19:44:02
    WHERE 其实跟if差不多啦,就是查询数据时判断添加个条件。语法:SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2.....操作符描述实例=等号,检测两个值...
  • SQL having与where用法区别

    千次阅读 2016-11-23 17:21:21
    SQL语句中having与where用法区别
  • MySQL Where 条件语句介绍和运算符小结WHERE 条件有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。语法:SELECT column,… FROM tb_name WHERE definition...
  • having是用来弥补where在分组数据判断时的不足。having 和where 都是用来筛选用的,...mysql中where与having的用法和区别误区:不要错误的认为having和group by 必须配合使用。举例说明:1. where和having都可以使...
  • SQL--WHERE子句相关用法

    热门讨论 2020-02-25 21:37:18
    编今天来总结总结SQL中WHERE子句涉及到的相关知识点 【正文】 利用WHERE自居过滤结果 MyTable Id Name DateOfBirth Adress 3 索菲亚 1997-09-01 USA 1 贝拉 1999-08-07 CN...
  • np.where() np.argwhere() Find the indices of array elements that are non-zero, grouped by element. 返回非0的数组元组的索引,其中a是要索引数组的条件。 返回数组中所有大于1的数字的索引值。
  • Yii2 数据库操作-where使用总结

    千次阅读 2018-09-30 09:48:06
    where("id=:id", [ 'id' =&gt; 1 ]) AND查询 -&gt;where("id=:id and pack_name=:pack_name", [ ':id' =&gt; 1, ':pack_name' =&gt; 'com.famigo.sandbox' ]) #...
  • Where关键词的用法

    2019-01-25 17:00:00
    where关键词一个最重要的用法就是在泛型的声明、定义中做出约束。 约束又分为接口约束、基类约束、构造函数约束、函数方法的约束,我们慢慢介绍。 接口约束 顾名思义,泛型参数必须实现相应的接口才可以,看一个...
  • np.where用法

    2021-01-11 09:47:24
    np.where用法总结 知乎大佬讲的更清楚 1.xx = np.array(xx) np.where(condition, x, y) 相当于if xx的每一项是否满足条件 如果满足对应项变为x,否则变为y 2.输出条件中真值的坐标 3.输出数组中等于特定数值的索引 ...
  • 在项目中的常见的一个操作:在有关SQL的代码中加入where 1 = 1,关于它的用法,可以总结如下:首先,where 1 = 1的用法往往是为了方便后续的给SQL增加where限制条件。如果实现加入了where 1 = 1,后续的条件只需加入...
  • [C#]Where关键词的用法

    万次阅读 多人点赞 2017-07-19 15:43:46
    where(泛型类型约束)where关键词一个最重要的用法就是在泛型的声明、定义中做出约束。 约束又分为接口约束、基类约束、构造函数约束、函数方法的约束,我们慢慢介绍。接口约束顾名思义,泛型参数必须实现相应的...
  • 简述Yii的查询操作找使用where用的很多 总结下常用的哈希格式与操作符格式2.操作符格式适用于操作符的[操作符, 操作数1, 操作数2, ...][ 'LIKE','nickname','%'.strtr($mix_kw,['%'=>'\%', '_'=>'\_', '\\'=&...
  • 一直没有总结where、having的用法区别,总是模模糊糊,今天来总结下! 先上一个例子: 需求:查询平均成绩大于60分的同学的学号和平均成绩; 错误SQL语句: SELECT sid FROM sc WHERE AVG(score) > '60' 正确...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 231,110
精华内容 92,444
关键字:

where用法总结