-
SELECT *
-
当你使用
SELECT * FROM table_name;
时,你正在选择表table_name
中的所有列。 -
这不会“忽略”任何列,包括那些包含
NULL
值的列。NULL
是一个特殊的标记,表示该字段没有值。 -
当你从这样的查询中检索数据时,任何包含
NULL
的列都将返回NULL
作为该列的值。
-
-
SELECT 1
-
当你使用
SELECT 1 FROM table_name;
时,你实际上并没有选择表的任何列。相反,你正在为每个从table_name
中检索的行返回一个常量值1
。 -
这与表的列数或列的内容(包括
NULL
值)无关。你只是在说:“对于表中的每一行,我都想看到数字1
。” -
因此,
SELECT 1
并不“忽略”列或NULL
值,因为它根本不涉及列或它们的内容。它只是为每个检索到的行返回一个固定的值。
-
为了更好地理解,考虑以下示例:
假设你有一个名为 students
的表,它有两个列:id
和 name
。
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(255)
);
INSERT INTO students (id, name) VALUES (1, 'Alice');
INSERT INTO students (id, name) VALUES (2, NULL); -- 注意这里的name是NULL
现在,让我们执行一些查询:
-
使用
SELECT *
:
SELECT * FROM students;
结果可能是:
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | NULL |
+----+-------+
-
使用
SELECT 1
:
SELECT 1 FROM students;
结果将是:
+---+
| 1 |
+---+
| 1 |
+---+
注意,尽管 students
表的第二行在 name
列中有一个 NULL
值,但 SELECT 1
查询仍然为每一行返回了 1
。