select * from "Test"."EMP"
id
1
2
3
4
5
Select SUM(1) FROM "Test"."EMP";
Select SUM(2) FROM "Test"."EMP";
Select SUM(3) FROM "Test"."EMP";
为什么这些查询的输出是?
5
10
15
还有 我不明白为什么他们这样写表名“Test”.“EMP”
你的表有5条记录。语句
select 1 from test.emp
返回 5 条记录,所有 5 条记录的值为 1。
id |
---|
1 |
1 |
1 |
1 |
1 |
这是因为数据库引擎只是为每个现有记录返回 1,而不读取单元格的内容。
select <any static value> from test.emp
也会发生同样的情况
2 和 3 也会发生同样的情况
id |
---|
2 |
2 |
2 |
2 |
2 |
因此返回了 5 条带有静态值的记录,这些值的总和将是 select 语句中传递的
product
和表中的 static number
的 total records
额外事实:始终建议执行
而不是count(1)
,因为它消耗的资源更少,因此服务器上的负载也更少count(*)
我不认为它是带双引号的
"Test"."EMP"
..它可能是带反引号的`Test`.`EMP`
。定义的意思是它的database_name.table_name
。这是从 table_name
获取正确 database_name
的推荐格式;在本例中,您专门制定了从 `Test`.`EMP`
进行查询的语法。阅读有关标识符限定符的更多信息。
至于
SUM(x)
,x
获取根据表中存在的行重复。因此 5 行上的 SUM(1)
是 1+1+1+1+1
,5 行上的 SUM(2)
是 2+2+2+2+2
,依此类推。
这是非常典型的
SQL
面试问题,普遍会被问到。
人们对 1,2,3 的 sum
感到困惑。实际上,它是所有行的总和,每行考虑 1,类似地考虑 2,而不是 ID 值为 1 的第一行的 sum
。
所以 1 的
sum
就是
(1+1+1+1+1) =5
(2+2+2+2+2) =10
(3+3+3+3+3) =15