所以我今天刚刚接受了一个java开发人员职位的采访,他们问我这个问题
你能说出
的区别吗?SELECT 1 FROM table
SELECT count(1) FROM table
SELECT count(*) FROM table
我查了一下堆栈溢出但找不到满意的答案。我是一名具有SQL知识的Java开发人员,已经有几年了,但从来没有使用像Select 1这样的不熟悉的语句或者选择count(1)
这也是整个问题。即,这些查询不是任何更大查询的一部分。
你能帮我解决一下这个问题吗?
答案 0 :(得分:5)
SELECT 1 FROM table
返回1
的次数与table
中的记录一样多。
SELECT count(1) FROM table
将返回table
中所有记录的计数。
SELECT count(*) FROM table
与上述相同。
Oracle将 背后的想法相同。此语句对于现代Oracle RDBMS引擎是no longer relevant。*
用作提示(技术上不是提示,但类似),因此它允许它选择最佳索引来计算计数。这与select count(1)...
的主要区别
类似地,这与WHERE EXISTS (SELECT 1 FROM ...)
与WHERE EXISTS(SELECT * FROM ...)