关于Mysql的TIPS(持续更新)

  1. where 后面不能直接跟聚合函数。

  2. 一般来说,select中有聚合函数的话,只能再同时选出分组依据的字段(group by 后面的)。

  3. not in关键字不会自动忽略null值,需要手动剔除;in关键字会自动剔除。

  4. having中可以加聚合函数(先执行group by后,就可以使用聚合函数了)

  5. select、from、where、having 后面都可以加子查询。
    其中select不常用,from一般将子查询的结果作为临时表和外层查询联动,where和having类似,都是先用子查询查出一个值之后帮助过滤。

  6. 不用任何函数完成TOP N(利用笛卡尔积),group by有去重的作用。(仅适用于没有相同的分数的情况)

SELECT
	* 
FROM
	emp a 
INNER JOIN
	emp b 
GROUP BY 
	a.empno 
HAVING 
	sum(a.sal > b.sal) >=9(数据数-N)
ORDER BY 
	a.sal desc;
  1. 任何值和NULL使用比较运算符(>,<,>=,<=,<>,=)或者(in, not in, any/some, all)比较时,返回值都为NULL
select * from test;
+------+------+	
| a    | b    |	
+------+------+	
|    1 |    1 |	
|    1 | NULL |	
| NULL | NULL |	
+------+------+

mysql> select * from test1 where a in (null);	
Empty set (0.00 sec)

mysql> select * from test1 where a in (null,1);	
+------+------+	
| a    | b    |	
+------+------+	
|    1 |    1 |	
|    1 | NULL |	
+------+------+	
2 rows in set (0.00 sec)
-- 当in和null比较时,无法查询出为null的记录

mysql> select * from test1 where a not in (1);	
Empty set (0.00 sec)	
mysql> select * from test1 where a not in (null);	
Empty set (0.00 sec)
mysql> select * from test1 where a not in (null,2);	
Empty set (0.00 sec)	
mysql> select * from test1 where a not in (2);	
+------+------+	
| a    | b    |	
+------+------+	
|    1 |    1 |	
|    1 | NULL |	
+------+------+	
2 rows in set (0.00 sec)
-- 当not in后面有null值时,不论什么情况下,整个sql的查询结果都为空

猜你喜欢

转载自blog.csdn.net/qq_42962353/article/details/108685774