SELECT count(*)

Александр Синицын
Дата: 16.01.2009 17:23:34
Как ни удивительно, но "SELECT count(*)" - вполне корректный запрос, который возвращает единицу. Единица возвращается потому, что содержимое скобок неявно преобразуется к типу по умолчанию, int, со значением пр умолчанию 0. Таким образом запрос эквивалентен SELECT count(0).
Не то чтобы это имело какое-то народно-хозяйственное значение, просто курьез.
locky
Дата: 16.01.2009 17:40:40
select 1 тоже возвращает единицу.
Куръез?

-------------------------
There’s no silver bullet!
Александр Синицын
Дата: 16.01.2009 17:46:46
locky,

Нет не курьез. В "SELECT 1" есть константа.
Glory
Дата: 16.01.2009 17:53:02
По-моему 1 в SELECT count(*) возврашается потому, что SELECT без FROM всегда генерирует 1 запись
А вот SELECT count(*) where 1=0 вернет 0
Александр Синицын
Дата: 16.01.2009 18:08:19
На мой взгляд такой запрос должен приводить к ошибке. Здесь есть неоднозначность значения звездочки. Но реализовано именно таким образом.
Glory, такое объяснение логично.
В случае 'SELECT count(*) where 1=0' запрос не вычисляется, т.к. 'where 1=0' - конституента пустого множества, кардинальность которого известна.
alexeyvg
Дата: 16.01.2009 18:22:39
Александр Синицын
На мой взгляд такой запрос должен приводить к ошибке. Здесь есть неоднозначность значения звездочки. Но реализовано именно таким образом.
Дело в том, что в count(*) и EXISTS(SELECT *) звёздочка не обозначает список всех полей - это просто специфическая конструкция MSSQL