MySQL之sql字句

yuluodisuihe 2018-09-18 原文

MySQL之sql子句

一、sql子句
   1、作用
      <1> select:基本的查询语句,用来表中查询数据,确定结果集的内容。
      <2> from(join):确定数据的来源,生成相应的临时表
      <3> where:对from子句得到的临时表进行条件筛选,得到相应的临时表
      <4> group by:把条件筛选后的结果进行分组
      <5> having:与where子句作用类似,但是只作用于分组后的数据。对分组后的数据进行相关判断。
      <6> order by:对生成的结果集进行相应的排序。
      <7> limit:指定返回的结果集的行数。
 
    2、执行顺序
          from -> where -> select -> group by -> having -> order by -> limit
         注:1、where中不能使用聚合函数,因为聚合函数针对结果集。
                2、where中不能使用select中创建的别名,因为where在select前执行。
                3、group by后的每个分组只会返回一条记录,对于多个值可在select中使用聚合函数进行合并
                4、group by开始可以使用select中创建的别名。
 
    3、实例
1 select a.user_id as uid,count(a.id) as count
2 from application as a
3 where a.created_at > '20180101'
4 group by uid
5 having count > 0
6 limit 8
 
二、union 和 in 
   1、union:总是会创建一个临时表,然后再将数据返回给用户。且不加all时会进行去重,影响效率
 1 (select a.id,a.user_id
 2  from application as a
 3  limit 20
 4 )
 5 union all
 6 (select a.id,a.user_id
 7  from application as a
 8  limit 20
 9 )
10 limit 50
    注:limit 20是对两个select语句分别limit,最后的limit对union all形成的临时表进行limit。虽然使用了limit 50,但临时表实际只有40条数据。
 
   2、in:可在where子句中规定多个值。
    注:1、in() 关联子查询效率比较差,避免使用。
           2、避免使用多个范围条件,即where中使用多个in,会导致无法完全使用多列索引
 
三、count
    作用:1、使用count(*)统计行数
              2、使用count(col)统计某个列值的数量,但是要求这个列值是非空的(不统计null)
     注:count(*) 会忽略所有的列而直接统计行数,而不会扩展为所有的列。
 
四、group by 和 distinct
   1、group by:聚合函数,根据不同的列进行分组。但只会返回每个分组的一条记录,故可以实现去重的效果。
   2、distinct:用于去重。
select count(distinct a.id)              select distinct a.id, a.uer_id                    select a.id, distinct a.user_id
from application as a                    from applicatin as a                              from application as a
# 对id进行去重后count                      # 对id、user_id去重                                # 语法错误
  注:group by的效率低于distinct
 
 
 
 
 
 
 
发表于 2018-09-18 22:29 雨落滴碎荷 阅读() 评论() 编辑 收藏

 

版权声明:本文为yuluodisuihe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yuluodisuihe/p/9671853.html

MySQL之sql字句的更多相关文章

随机推荐

  1. 死磕 java同步系列之redis分布式锁进化史

    问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些 […]...

  2. Spark SQL源码解析(二)Antlr4解析Sql并生成树

    Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 这一 […]...

  3. 51job多线程爬取指定职业信息数据

    51job多线程爬取指定职业信息数据 # datetime:2020/10/7 14:02 # 51job多线 […]...

  4. WIN10打开资源管理器显示该文件没有与之关联的程序来执行该操作.请安装应用,请在“默认应用设置”..关联 —— 解决方案

    win+R,输入regedit,分别在HKEY_CLASSES_ROOT\piffileHKEY_CLASSE […]...

  5. Hidden Markov Model Toolbox for Matlab

    官网:http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html […]...

  6. iPod怎么下载歌曲?用iTunes传文件功能!

      昨儿一小美女拿我的手机听歌,说她不知道iPod怎么下载歌曲,因为还在上学家里不肯给买智能机,怕会影响学业。 […]...

  7. Microsoft .NET Framework 3.0 x64位下载地址

    Microsoft .NET Framework 3.5 x64位下载地址 Microsoft .NET Fr […]...

  8. 使用 Synchronized 关键字

    使用 Synchronized 关键字来解决并发问题是最简单的一种方式,我们只需要使用它修饰需要被并发处理的代 […]...

展开目录

目录导航