1、mysql的执行顺序

  1. from
  2. on
  3. join
  4. where
  5. group by
  6. having
  7. select
  8. distinct  
  9. union    //UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
  10. order by
  11. limit

注意:select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。

    select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录

   limit y 分句表示: 读取 y 条数据
   limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据
   limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据

   limit n,m表示从第n+1条开始,取m条.limit 2,3表示取3,4,5条.

表teacher(id,dept,name,phone,mobile)

表dept(id,name)

teacher.dept=dept.id

2、SQL中coalesce函数的用法(也相当于HiveQL中nvl函数的用法):

  其参数格式如下: COALESCE ( expression,value1,value2……,valuen) 

  COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。

  COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。如果
  expression不为空值则返回expression;否则判断value1是否是空值,如果value1不为空值则返
  回value1;否则判断value2是否是空值,如果value2不为空值则返回value3;……以此类推,

  例1:Use the number '07986 444 2266' if there is no number given. Show teacher name and mobile number or '07986 444 2266'

  select name,COALESCE(mobile,'07986 444 2266')
  from teacher

  结果如下:

    

3、case when的用法:

  例1:

  表user(id,name,sex)

  select u.id,u.name,u.sex,
  (case u.sex
    when 1 then '男'
    when 2 then '女'
    else '空的'
  end
  )性别
  from user u;

  例2:表game(id,mdate,stadium,team1,team2)

     表goal(matchid,teamid,player,gtime)

    查询中列出了每个目标。如果是team1的进球,那么1出现在score1中,否则为0。您可以对这一列进行求和,以得到team1进球的总数。

  SELECT mdate,

    team1,

    SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) score1,  //SUM(CASE teamid WHEN team1 THEN 1 ELSE 0 END) score1,

    team2,

    SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) score2  //SUM(CASE teamid WHEN team2 THEN 1 ELSE 0 END) score2

    FROM game LEFT JOIN goal ON game.id = matchid

  group by mdate,team1,team2
  结果如下:

  

4、case when 的列转行

按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

方法一(正确答案)

select S ,max(case C when '01' then score else 1 end) '01',
max(case C when '02' then score else 0 end)'02',
max(case C when '03' then score else 0 end)'03',AVG(score)平均分 from sc
group by S order by AVG(score) desc;

比较

select S ,sum(case C when '01' then score else 1 end) '01',
sum(case C when '02' then score else 0 end)'02',
sum(case C when '03' then score else 0 end)'03',AVG(score)平均分 from sc
group by S order by AVG(score) desc;

数据

解析:方法一:首先按照学号分组,第一行C=01,第二行C=02,第三行C=03,故学号为07的学生第二个字段为MAX(0,0,0)同理之后的字段也是max(0,89,0)和max(0,0,98).

  比较语句:学号为01的学生的第二个字段为sum(0,1,1)=2。以此类推。

结果分别与下图所示:

  

SQL执行顺序和coalesce以及case when的用法的更多相关文章

  1. SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序

    与大多数语言一样,SQL语言也有一个执行顺序,只是在大多数编程语言中,代码是按照编写顺序来处理的,而在SQL中则不是,下图为SQL 执行顺序. () ) [ ALL | DISTINCT ] () [ ...

  2. 获取分组后统计数量最多的纪录;limit用法;sql执行顺序

    CREATE TABLE emp(id INT PRIMARY KEY,NAME VARCHAR(11),dep_id INT ,salary INT); CREATE TABLE dept(id I ...

  3. 0708关于理解mysql SQL执行顺序

    转自 http://www.jellythink.com/archives/924,博客比价清晰 我理解上文的是SQL执行顺序 总体方案.当你加入索引了以后,其实他的执行计划是有细微的变化,比方说刚开 ...

  4. MySQL中的索引、左连接、右连接、join、sql执行顺序

    逻辑架构: 1.连接层 2.服务层 3.引擎层(插拔式) 4.存储层 存储引擎: 常用的有:MyISAM.InnoDB 查看命令:show variables like '%storage_engin ...

  5. 初识SQL 执行顺序

    SQL不同于一般的程序代码,会按照一定的顺序进行执行,他的第一个执行始终从from开始执行,虽然Select出现在第一位置但是执行顺序 确不是在第一个.有时候可能大家写了很久的代码,不一定能够很好的理 ...

  6. [整]SQL执行顺序

    SQL的执行顺序: 第一步:FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate ...

  7. SQL 执行顺序

    SQL 是一种声明式语言,与其他语言相比它的最大特点是执行顺序-并非按照语法顺序来执行.因此很多程序猿看到SQL就头疼,我之前也是这样,后来看到一篇文章后豁然开朗-地址. 理解了SQL的执行顺序无疑对 ...

  8. sql执行顺序整理

    sql的执行顺序,是优化sql语句执行效率必须要掌握的.各个数据库可能有细小的差别,但大体顺序是相同的,这里只做大致说明. 一.总体执行顺序 在sql语句执行之前,还有SQL语句准备执行阶段,这里不做 ...

  9. mysql sql执行顺序

    <pre name="code" class="html">mysql> explain select * from (select * fr ...

随机推荐

  1. prim 模板

    #include<cstdio> #include<vector> #include<cstring> #include<set> #define ma ...

  2. vue组件传值之父传子

    1.父组件给子组件传值  home父组件  header子组件  关键字props home代码 <template> <div> <v-header :title=&q ...

  3. 【进阶技术】一篇文章搞掂:Spring Cloud Stream

    本文总结自官方文档http://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.0.RC3/single/spring-clou ...

  4. (转)运行pip报错:Fatal error in launcher: Unable to create process using '"'

    转:https://blog.csdn.net/cjeric/article/details/73518782 在新环境上安装python的时候又再次遇到了这个情况,这次留意了一下,发现原来的文章有错 ...

  5. druid spring监控配置

    方法一: <bean id="seckillServiceImpl" class="org.seckill.service.impl.SeckillServiceI ...

  6. Python变量和字符串详解

    Python变量和字符串详解 几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣 ...

  7. Dos.Common - 目录、介绍

    引言: Dos.Common是一个开发中的常用类库,如HttpHelper.LogHelper.CacheHelper.CookieHelper.MapperHelper等等.与Dos.WeChat. ...

  8. python实现读取excel

    实现代码如下: #读取excel,将每行数据放入一个列表,将所有列表放入一个列表形成二维列表,返回该二维列表 import xlrd class ReadExcel: def read_excel(s ...

  9. vmware内部错误

    今天不知道怎么回事 wmware workstation重启的时候总是报内部错误 差点重装了 幸亏找到了这个 原来只要以管理员的身份运行vwware就ok了 http://www.xiaoluobok ...

  10. 洛谷P3379 【模板】最近公共祖先(LCA)——LCA

    给一手链接 https://www.luogu.com.cn/problem/P3379 算是lca的模板吧 #include<cstdio> #include<cstring> ...