# select 1 和 select NULL的区别

在代码里面看到过很多次select 1, 一直没去探究过这是什么,反正就是按约定俗成的这样用了。

最近就想着把这些小点搞清楚,特意去查了一下,记录下来。

select NULL一般和select 1比较, 所以同时记录select NULL

# select 1

假设有一张sys_m_user表,我们来执行一下命令select 1 from sys_m_user;

mysql> select 1 from sys_m_user;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)

可以发现,如果表里有记录,select 1语句就会返回相应的记录行数的结果集,并且列名为1,每一行的值也都是1。这里的1并不是指的第一个字段,它可以替换成任意的常量,此时返回的列名和值都是该常量。

比如select 2,如下:

mysql> select 2 from sys_m_user;
+---+
| 2 |
+---+
| 2 |
| 2 |
+---+
2 rows in set (0.00 sec)

那么这个select 1究竟有什么用?

可以用来查询表中是否有符合条件的记录(比如select 1 from sys_m_user;),select 1一般用来当作条件使用,比如exists( select 1 from 表名)等。select 1的效率比select 列名select*快,因为不用查字典表。

select 1配合count()、sum()函数

mysql> select count(1) from sys_m_user;
+----------+
| count(1) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

可以看出,count()对select 1返回的行数进行了计数。如果把select count(1)改成select count(2),也只会改变结果集里的列名(从count(1)变成count(2))。

和之前使用select 1一样,从效率上看,select count(1) > select count(列名) > select count(*)。

下边是select 1配合sum()函数:

mysql> select sum(1) from sys_m_user;
+--------+
| sum(1) |
+--------+
|      2 |
+--------+
1 row in set (0.00 sec)

可以看出,该语句是对所有行的值计算总和;如果换成select sum(2)呢?应该返回4!

# select NULL

mysql> select NULL from sys_m_user;
+------+
| NULL |
+------+
| NULL |
| NULL |
+------+
2 rows in set (0.00 sec)

select null 和select 1类似,只是返回的列名和值变成了NULL;不过不同的是,select null 不可以配合使用count()和sum()函数。

Last Updated: 12/10/2023, 7:31:44 PM