Что делает "выбрать 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.