2016-08-11 4 views
2

Вопрос из интервью:выберите кол (1) из имя_таблицы, где столбец = столбец

  • У нас есть таблица с именем = имя_таблицей и некоторым столбцом.
  • Мы не знаем тип колонки. Запрос
  • SQL: select count(1) from tablename where column=column

Какой результат делает этот запрос возвращения и почему?

+0

Вы не можете точно сказать, каков будет результат. он будет находиться в диапазоне '0' -' count (*) x count (*) '. – SomeJavaGuy

+0

почему вы так думаете? –

+1

Поскольку вы ничего не знаете о столбце, равно как и его значения, это может произойти: если все значения «null», сравнение «column = column» не работает (так как вам понадобится «column is null» здесь) и возвращает '0' результаты. Если все значения одинаковы, вы получите результат 'count (*)'. И поскольку у вас нет информации о хранящихся здесь данных, вы были бы где-то в этом диапазоне. Изменить: извините, мой плохой верхний конец будет просто 'count (*)'. Таким образом, вы можете сказать, что он возвращает счетчик для 'not null'values ​​в этом столбце. – SomeJavaGuy

ответ

4

Это возвращает количество строк, где column не является нулевым, поскольку NULL = NULL дает UNKNOWN, которое приводится к false в состоянии. Для всех остальных значений верно значение column = column.

+0

Я полностью согласен – Plirkee

1

Что-то "Strage" могло случиться:

Connected to: 
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 

SQL> create table clobTab(c clob); 

Table created. 

SQL> select count(1) from clobTab where c=c; 
select count(1) from clobTab where c=c 
            * 
ERROR at line 1: 
ORA-00932: inconsistent datatypes: expected - got CLOB 
3

Это зависит от типа данных. В большинстве случаев он возвращает count() не нулевых столбцов. Но, к примеру.

create table test_abc(column_name blob); 
select count(1) from test_abc where column_name = column_name; 

ORA-00932: inconsistent datatypes: expected - got BLOB

0

Этот запрос возвращает количество с именем поля (Нет имени столбца), когда столбец = столбец верно

еще возвращают 0, если столбец = столбец является ложным.