mysql基础面试题总结(二)

117 阅读3分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」。

1、sql语句的执行顺序

常用:

  1. from:需要从哪个数据表检索数据
  2. where:过滤表中数据的条件
  3. group by:如何将上面过滤出的数据分组
  4. having:对上面已经分组的数据进行过滤的条件
  5. select:查看结果集中的哪个列,或列的计算结果
  6. order by :按照什么样的顺序来查看返回的数据

from -> join -> on -> where -> group by(开始使用select中的别名,后面的语句中都可以使用) -> avg,sum.... -> having -> select-> distinct ->order by ->limit

2、count(*)和count(1)和count(id)区别

count(*):扫描全表,但不取值,按行累加。

count(1):扫描全表,但不取值,每一行都是1,按值累加。

count(非空字段)与count(主键 id):根据字段查询有多少行,null值不计其中

3、SQL语句优化

1.不用*来代替所有列名,尽量采用与访问表相关的实际列名;

2.应尽量避免在 where 子句中使用!=或<>操作符(使用 or 来连接条件或者对字段进行 null 值判断),否则将导致引擎放弃使用索引而进行全表扫描。

3.in 和 not in 也要慎用,因为IN会使系统无法使用索引,而只能直接搜索表中的数据

4.很多时候用 exists是一个好的选择:

5.能用UNION ALL就不要用UNION

6.能用DISTINCT的就不用GROUP BY

4、SQL常用函数有哪些?

  • 数学函数

ABS(x) 返回x的绝对值

CEILING(x) 返回大于x的最小整数值

FLOOR(x) 返回小于x的最大整数值

GREATEST(x1,x2,...,xn) 返回集合中最大的值

  • 聚合函数

    avg 返回指定列的平均值

    count 返回指定列中非NULL值的个数

    min 返回指定列的最小值

    max 返回指定列的最大值

    sum 返回指定列的所有值之和

    group_concat 返回由属于一组的列值连接组合而成的结果

  • 日期和时间函数

    CURDATE()或CURRENT_DATE() 返回当前的日期

    CURTIME()或CURRENT_TIME() DAYOFWEEK(date) 返回date所代表的一星期中的第几天(1~7)

    DAYOFMONTH(date) 返回date是一个月的第几天(1~31)

    DAYOFYEAR(date) 返回date是一年的第几天(1~366)

    DAYNAME(date) 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);

    FROM_UNIXTIME(ts,fmt) 根据指定的fmt格式,格式化UNIX时间戳ts

    HOUR(time) 返回time的小时值(0~23)

    MINUTE(time) 返回time的分钟值(0~59)

    MONTH(date) 返回date的月份值(1~12)返回当前的时间

5、左连接 右连接 内连接的区别

左连接:左边有的,右边没有的为null

右连接:左边没有的,右边有的为null

内连接:显示左边右边共有的

6、Mysql三种常见引擎的区别

特性InnoDBMyISAMMEMORY
事务安全支持不支持不支持
对外键的支持支持不支持不支持
存储限制64TBRAM256TB
空间使用
内存使用
插入数据的速度