# 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()函数。