「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」。
1、sql语句的执行顺序
常用:
- from:需要从哪个数据表检索数据
- where:过滤表中数据的条件
- group by:如何将上面过滤出的数据分组
- having:对上面已经分组的数据进行过滤的条件
- select:查看结果集中的哪个列,或列的计算结果
- 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三种常见引擎的区别
| 特性 | InnoDB | MyISAM | MEMORY |
|---|---|---|---|
| 事务安全 | 支持 | 不支持 | 不支持 |
| 对外键的支持 | 支持 | 不支持 | 不支持 |
| 存储限制 | 64TB | RAM | 256TB |
| 空间使用 | 高 | 低 | 低 |
| 内存使用 | 高 | 低 | 高 |
| 插入数据的速度 | 低 | 高 | 高 |