• 时间是最真的答案
    2019-06-26
    基础篇可以快点更新,很多同学都有一些基础,看懂不难;进阶篇和高级篇可以正常更新,大家可以花多点时间在难点上,可能会更大提高大家的学习效率
     1
     88
  • leslie
    2019-06-26
    关于SQL函数问题:老师应当漏了一个关键点吧;它会导致查询不走索引,直接全表遍历,导致慢查询-这才是最重要的问题。现实工作中一般是禁止where条件出现函数:看到了就让开发代码重写。
     3
     26
  • Abyssknight
    2019-06-26
    由于sql中存在数据类型隐式转换的问题,我查了些资料,有一些不明白的地方。
    首先,对于 select * from heros where date(birthdate) > '2016-10-01',老师你说不使用date函数不安全,但是创建表的时候,birthday声明的就是date类型,那它就不可能是其他类型了啊;其次,我给 birthday 加上索引以后,使用explain查看执行计划,不使用 date 函数直接比较的效果要优于使用 date 函数 (参考的是 explain 结果的 type 属性,使用函数为ALL,不使用函数为range); 还有就是既然birthday 是 date 类型,那 被比较对象 ‘2017-01-01’ 是字符串,这就不同同一种数据类型了,我把它转换成 date 类型后进行比较,explain的结果却是一样的,那这里是否存在隐式的类型转换?

    隐式类型转换的资料主要参考这篇文章:https://blog.csdn.net/u010695794/article/details/78509191
    展开
     4
     15
  • supermouse
    2019-06-27
    计算英雄的最大生命平均值:
    SELECT AVG(hp_max) FROM heros;

    显示所有在2017年之前上线的英雄:
    SELECT name FROM heros WHERE birthdate IS NOT NULL AND YEAR(birthdate) < 2017;

    作者回复: 正确

    
     8
  • 菜菜
    2019-06-28
    学得我想打王者荣耀了

    作者回复: 很好 我已经很久没打了,昨天整理稿子的时候也有冲突想开一局,不过还是忍住了,一方面手机存储空间满了,另一方面还是多学习和工作,会让状态更好

    
     7
  • Andre
    2019-06-27
    答案:SELECT avg(hp_max) as avg_hp
    FROM heros;

    SELECT `name`
    FROM heros
    WHERE birthdate is NOT NULL AND DATE(birthdate)<'2017-01-01';
    另外赞同时间是最真的答案的说法,应该来讲基础篇大家都还是学起来不费力的,希望基础篇能够快点更新,然后尽快的进入进阶篇
    展开

    作者回复: 谢谢 基础篇让大家都有个共识的基础,掌握的人也可以快速复习一遍,进阶篇会有更多关于性能调优,高可用架构等

    
     2
  • Fred
    2019-06-26
    SELECT AVG(mp_max) as avg_max FROM hero;
    SELECT name WHERE YEAR(birthdate)<2017 AND birthdate IS NOT NULL
    
     2
  • mickey
    2019-06-26
    #计算英雄的最大生命平均值;
    #MySQL实现:
    SELECT avg(hp_max) as '英雄的最大生命平均值' FROM heros;

    #查询结果:
    英雄的最大生命平均值
    ----------------------
    6580.478260869565



    #显示出所有在 2017 年之前上线的英雄,如果英雄没有统计上线日期则不显示。
    #MySQL实现:
    SELECT * FROM heros WHERE birthdate is NOT NULL AND EXTRACT(YEAR FROM birthdate) < '2017';

    #查询结果:
    id name hp_max ... birthdate
    --------------------------------------------
    10000    夏侯惇    7350    ... 2016-07-19
    10003    牛魔    8476    ... 2015-11-24
    10004    吕布    7344    ... 2015-12-22
    10006    芈月    6164    ... 2015-12-08
    ......
    展开
    
     2
  • Abyssknight
    2019-06-26
    select avg(hp_max) as avg_hp
    from heros;

    select name, birthdate
    from heros
    where birthdate < date('2017-01-01');
    展开

    作者回复: Good Job

     1
     2
  • 海洋
    2019-08-12
    作业:
    SELECT AVG(hp_max) FROM heros;
    +-------------------+
    | AVG(hp_max) |
    +-------------------+
    | 6580.478260869565 |
    +-------------------+
    1 row in set (0.07 sec)

    -------------------------------------------
     SELECT name FROM heros WHERE Year(birthdate) < 2017 AND birthdate is NOT NULL;
    +----------+
    | name |
    +----------+
    | 夏侯惇 |
    | 牛魔 |
    | 吕布 |
    | 芈月 |
    | 太乙真人 |
    | 刘邦 |
    | 关羽 |
    | 马可波罗 |
    | 李元芳 |
    | 虞姬 |
    | 成吉思汗 |
    | 不知火舞 |
    | 貂蝉 |
    | 周瑜 |
    | 张良 |
    | 钟馗 |
    | 蔡文姬 |
    | 花木兰 |
    | 李白 |
    | 杨戬 |
    | 刘备 |
    | 宫本武藏 |
    | 娜可露露 |
    +----------+
    或者
    SELECT name FROM heros WHERE DATE(birthdate) <'2017-01-01' AND birthdate is NOT NULL;
    展开

    作者回复: Good Job

    
     1
  • Elliot
    2019-07-07
    DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差...

    说明学数据库也难免会遇到各种看似毫无技术含量的坑喽。。。

    作者回复: DBMS一般都有自己的方言,不过这些方言都很好理解。比如MySQL可以用LIMIT截取所需的数据行,而Oracle需要使用ROWNUM关键字通过子查询来完成。

    
     1
  • 大隐-于市
    2019-07-04
    切换数据库的概率很低吧,工作了十年一直被教育不是使用内部函数,因为增加更换数据库的成本,不过一直没见过哪个公司更换数据库。即使是阿里的去ioe那本身也会增加很多开发成本,所有的sql都检查。
    
     1
  • Amanda
    2019-06-27
    > SELECT ROUND(AVG(hp_max), 2) FROM heros;
    +-----------------------+
    | ROUND(AVG(hp_max), 2) |
    +-----------------------+
    | 6580.48 |
    +-----------------------+
    > SELECT name FROM heros WHERE birthdate IS NOT NULL AND DATE(birthdate)<'2017-01-01';
    展开

    作者回复: 正确,你也可以使用YEAR(birthdate)<2017

    
     1
  • 圆子蛋
    2019-06-26
    1. SELECT AVG(max_hp) FROM heros;
    2. SELECT name,YEAR(birthdate) AS birthdate FROM heros WHERE birthdate is NOT NULL AND YEAR(birthdate)<2017

    作者回复: Good Job

    
     1
  • 啦啦啦
    2019-06-26
    看了今天的课知道了日期比较不用DATE函数不安全,以前都没用过
    
     1
  • 怀朔
    2019-06-26
    select avg(ph)from hero
    
     1
  • 大猫当了个当
    2020-02-02
    // 最大生命平均值
    SELECT AVG(hp_max) FROM heros


    // 查询2017年之前上线英雄 上线时间为空的不显示
    SELECT name ,EXTRACT(YEAR FROM birthdate) AS '上线年份' FROM heros WHERE DATE(birthdate)<'2017-01-01' AND birthdate is NOT NULL
    展开
    
    
  • 大猫当了个当
    2020-01-30
    感谢老师
    
    
  • 风轻扬
    2019-12-29
    1 .老师,结尾总结的地方,您说SQL语句要以 ; 结尾。但是,映射框架使用ibatis的时候,如果DBMS是oracle时,加分号会报错的
    2 .另外一个,关于区分大小写的问题,我们公司的应用都是部署在linux上,数据库名都是小写,ibatis都是大写,没有报过错啊。这是ibatis做的工作吗?
    
    
  • 风轻扬
    2019-12-29
    老师,请教一个问题。对于having不能使用别名的问题。如果对于筛选结果有再筛选的需求,应该怎么做呢?比如,对于求完数量的结果,对该结果进行再筛选。我现在都是select count(字段) from 表名 group by 字段 having count(字段) > 2,这么写,可以实现效果,但总感觉不太美观呢
    
    
我们在线,来聊聊吧