from、where、group、with、having、order、union、limit 的使用
顺序很重要
每次看数据库的一些语法时,都很自然的略过那一大堆的规则,比如说线下面这段select的语法:
select [field1,field2...] func_name
from table1,table2,view1
[left|right join table2 on condition_what]
[where condition_where]
[group by field1,field2...]
[with rollup]
[having condition_where]
[order by field1 [desc|asc]]
[limit offset,length]
实际用的时候,除非经常使用,有些项顺序已经习以为常了,但是更多的时候,总会将顺序搞错,比如group
from
后面跟表名或者视图名,表示从该表或者视图中查询数据。
from后面可以跟多个表名或者视图名,此时表示全连接,一般不推荐使用。
mysql > select tb_one.id,tb_two.name,tb_three.addr from tb_one,tb_two,tb_three;
where
后面跟的是选择的条件,条件可以是比较运算符<、=<、>、>=、=、!=、like、is not NULL等,或者逻辑运算符 and or (between and)等。
mysql> select * from cate where (id>10 and name='abc') or (addr is not null);
mysql> select * from cate where name like '%abc_';
mysql> select * from cate where create_time between '2018-01-01 00:00:00' and '2018-07-20 00:00:00';
后面的条件可以是各种形式,包括一个in
mysql> select * from cate where id in (select id from demo);
group by
后面通常跟着的是列名或者表达式,可以根据一列进行分组,也可以对多列进行分组,多列分组的时候,只有当进行分组的所有列完全相同时,才认为是同一个组的。
另外,group by子句通常和聚合函数一起使用,比如sum,avg,count,min,max这几个聚合函数作为select的查询结果。
如果使用group by之后,一般不会在select后面查询的结果中指定列或者某个字段,因为这样是没有意义的,在分组时,只会统计该组的第一条数据。
#按照id分组,统计每组的price总和
mysql > select id,sum(price) from cate group by id; #按照price和type分组,两条记录,如果price和type都对应相同,则认为是一组;否则不是一组
mysql > select count(*) from cate group by price,type;
可以在分组后面加上with rollup,会在分组之后对每个组进行汇总。
having
having和where只有很小的区别,都代表条件筛选,但是在having子句中,可以使用聚合函数;而where中是不能使用聚合函数。
having子句是在where子句和group by子句后面的,其实having的功能可以看着再次筛选,即,前面的查询结果,再用having中的条件在来筛选一次。
mysql> select * from cate where id > 6 having id > 7;
#先找出id>6的记录,然后再从这些记录中找出id>7的记录 mysql> select sum(id),kind from cate where id !=0 group by kind having sum(id) > 8;
#同样是上面的那个逻辑,从结果中在筛选一遍
order by
order by子句后面可以是一个列或者多列、表达式、正整数。正整数表示按结果表中该整数所指的那一列进行排序。
排序默认的是升序(asc),可以显式指定排序规则,升序(asc),降序(desc)。注意空值被认为是最小值。
mysql> select * from cate order by id desc;
#按照id降序排列 mysql> select * from cate order by id asc,price desc;
#先将结果按照id升序排列,如果id相同,则按proce降序排列
limit
用来限制返回结果的行数,后面可以是一个数,也可以是两个数。
mysql> select * from cate limit 5;
#返回5条记录 mysql> select * from cate limit 3,5;
#第一条记录下标为0,所以返回的结果是从第4条开始的5条记录:4,5,6,7,8
union
可以连接多个select语句,然后将多个select的结果整合到一个表中,最终生成一个表,表的字段名称是以第一个select的字段名称为准。
需要注意的是,每一个select语句选择的列,应具有相同的列数,并且每一列的类型要相同。并且mysql会自动从最终结果中去处重复行。
mysql> select cid,cname from cate
-> union
-> select id,name from demo;
from、where、group、with、having、order、union、limit 的使用的更多相关文章
- select的5中子句where,group by, havaing, order by, limit的使用顺序及实例
-- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...
- mysql中的select语句where条件group by ,having , order by,limit的顺序及用法
-- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...
- MySQL select from join on where group by having order by limit 执行顺序
书写顺序:select [查询列表] from [表] [连接类型] join [表2] on [连接条件] where [筛选条件] group by [分组列表] having [分组后的筛选条件 ...
- Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议
Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议 索引 索引是一种存储引擎快速查询记录的一种数据结构. 注意 MYSQL一次查询只能使用一个索引 ...
- MySql学习(二) —— where / having / group by / order by / limit 简单查询
注:该MySql系列博客仅为个人学习笔记. 这篇博客主要记录sql的五种子句查询语法! 一个重要的概念:将字段当做变量看,无论是条件,还是函数,或者查出来的字段. select五种子句 where 条 ...
- hive的高级查询(group by、 order by、 join 、 distribute by、sort by、 clusrer by、 union all等)
查询操作 group by. order by. join . distribute by. sort by. clusrer by. union all 底层的实现 mapreduce 常见的聚合操 ...
- where / having / group by / order by / limit 简单查询
目录 1.基础查询 -- where 2. group by 与 统计函数 3. having 4.where + group by + having + 函数 综合查询 5. order by + ...
- 操作数据表中的记录——SELECT (where表达式、GROUP BY、HAVING、LIMIT)
原文链接:http://www.ifyao.com/2015/01/26/%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E7%9A%84 ...
- hive的strict模式;where,group by,having,order by同时使用的执行顺序
主要限制三种情况 (1) 有partition的表查询需要加上where子句,筛选部分数据实现分区裁剪,即不允许全表全分区扫描,防止数据过大 (2) order by 执行时只产生一个reduce,必 ...
- hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证
hive> select * from app_data_stats_historical where os='1' group by dt limit 100; 出现结果如下: 2014-01 ...
随机推荐
- 常用的几条sql语句
### 常用的几条sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,v ...
- C# -- 使用Aspose.Cells创建和读取Excel文件
使用Aspose.Cells创建和读取Excel文件 1. 创建Excel Aspose.Cells.License li = new Aspose.Cells.License(); li.SetLi ...
- Linux常用命令-文本查看篇
前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...
- C#基础知识之读取xlsx文件Excel2007
读取Excel 2007的xlsx文件和读取老的.xls文件是一样的,都是用Oledb读取,仅仅连接字符串不同而已. 具体代码实例: public static DataTable GetExcelT ...
- windows通过node环境搭建安装npm,cnpm,vue-cli
1首先下载node,官网地址:https://nodejs.org/en/ 左边是稳定版,右边是最新版,安装过程一样,我选择的是稳定版. 按照步骤一步一步的安装就行,注意路径就可以了. 友情链接:ht ...
- Redis 实现安全队列
Redis的列表数据结构可以让我们方便的实现消息队列 例如用 LPUSH(BLPUSH)把消息入队,用 RPOP(BRPOP)获取消息 绝大部分的情况下,这些操作都是没问题的,但并不能保证绝对安全 当 ...
- 初学Python——RabbitMQ的安装
记录踩坑之路,本篇文章主要摘抄自CSDN博客https://blog.csdn.net/weixin_39735923/article/details/79288578 Windows10环境下安装R ...
- 深入理解mongodb查询条件语句
阅读目录 1. 理解:"$lt"."$lte"."$gt" 和 "$gte" 2. 理解 '$ne' 3. 理解 &qu ...
- Java中的hashCode() 和 equals()的若干问题解答
一.hashCode()的作用 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int ...
- Android/Linux boot time分析优化
如果需要优化boot time,就需要一个量化的工具来分析每个阶段的时间消耗.这种类型的优化特别适合使用基于timeline的图表,有着明显的时间顺序.要求不但能给出整个流程消耗的时间,还要能对流程进 ...