Что делает "выбрать 1 из"?

Я прочитал некоторые статьи, но на самом деле не понял, что select 1 from? Кто-то говорит "вы должны использовать вместо select * ". Вот таблица exapmle:

cust_id     cust_name       cust_address

1000000001  Village Toys    Mapl
1000000002  Kids Place      South
1000000003  Fun4All         Sunny
1000000004  Fun4All         Riverside
1000000005  The Toy Store   53rd

Каков будет результат, когда я напишу select 1 from customer_table что делает этот оператор?

Ответ 1

select 1 from table

вернет столбец из 1 для каждой строки в таблице. Вы можете использовать его с инструкцией where, чтобы проверить, есть ли у вас запись для данного ключа, как в:

if exists(select 1 from table where some_column = 'some_value')

То, о чем, вероятно, говорил ваш друг, вместо того, чтобы делать массовые выборки с помощью select * из таблицы, вы должны точно указать столбцы, которые вам нужны, по двум причинам:

1) производительность, и вы можете получить больше данных, чем вам действительно нужно.

2) пользователь запроса может полагаться на порядок столбцов. Если ваша таблица будет обновлена, клиент получит столбцы в другом порядке, чем ожидалось.

Ответ 2

Конструкция обычно используется в проверках "существования"

if exists(select 1 from customer_table where customer = 'xxx')

или

if exists(select * from customer_table where customer = 'xxx')

Обе конструкции эквивалентны. Раньше люди говорили, что выбор * был лучше, потому что губернатор запроса использовал бы лучший индексированный столбец. Это доказано не так.

Ответ 3

Он делает то, что вы просите, SELECT 1 FROM table будет SELECT (вернуть) 1 для каждой строки в этой таблице, если в таблице будет 3 строки в таблице

1
1
1

Взгляните на Count (*) vs Count (1), который может быть проблемой, которую вы описали.

Ответ 4

Оператор SELECT 1 FROM SomeTable просто возвращает столбец, содержащий значение 1 для каждой строки в вашей таблице. Если вы добавите еще один столбец, например, SELECT 1, cust_name FROM SomeTable то он немного упростит:

            cust_name
----------- ---------------
1           Village Toys
1           Kids Place
1           Fun4All
1           Fun4All
1           The Toy Store

Ответ 5

SELECT COUNT(*) in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS) - условие EXISTS всегда будет возвращать true, независимо от того, выполнены УСЛОВИЯ или нет.

NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS) - NOT EXISTS условие всегда будет возвращать ложь независимо от CONDITIONS выполнены или нет.

SELECT COUNT 1 in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS) - условие EXISTS вернет true, если выполнены CONDITIONS. Else false.

NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS) - условие NOT EXISTS вернет false, если выполнены CONDITIONS. Else true.