整理的一些mysql 点

来源:互联网 发布:风险概率影响矩阵 编辑:程序博客网 时间:2024/05/22 15:43
  1. distinct 去除重复的列
    如下:
SELECT DISTINCT depart FROM teacher;

这里写图片描述

SELECT depart FROM teacher;

这里写图片描述

  1. between and 和 >= <=
    后者在数据较多的情况下效率更高

  2. or 和 in
    如果in和or所在列有索引或者主键的话,or和in 没啥差别。
    执行计划和执行时间几乎一样。 但如果in 和 or 所在列没有索引的话,
    性能差别就很大了。 在没有索引的情况下,随着in或者or后面的数据量越多
    in的效率不会有太大的下降,但是or 会随着记录越多的话性能下降非常厉害
    因此在给in和or的效率下定义的时候应该再加上一个条件,就是所在的列是否
    索引或者是否有主键 如果有索引或者主键 性能没有什么区别 反之 in比or的效率
    高的多。。。

4.where 和 having的区别

有时我们需要根据结果去得到一点信息 这时where 便无法使用
首先 where 是一个约束声明,使用where来约束数据库的数据,
where是在结果返回之前起作用的,且where 中不能使用聚合函数。
having是一个过滤声明,是在查询返回结果集以后对查询结果进行的
过滤操作,再having中可以使用聚合函数。

  1. union 和 union all的区别
    union 和 union的作用大致相同都是为了将两个表拼在一起
    但是union会将相同的信息过滤掉,不显示,有时相同的关键信息就被过滤掉了,因此这时就需要用到union all 将两个表的信息全部展示。

  2. any 等关键字
    any关键字:
    假设any内部的查询语句返回的结果个数是三个,
    那么,
    select…from…where a>any(…)
    翻译就如下
    select…from…where a >result or a > result2 or a>result3

all 关键字:
all关键字与any关键字类似,只不过上面的or改成and
some关键字:
some关键字和any关键字是一样的功能


  1. TIMESTAMPDIFF(日期单位,日期,从什么时候开始) 函数可以计算年龄
    SELECT sname ,TIMESTAMPDIFF(YEAR,sbirthday,NOW()) AS age FROM student;