Я прочитал несколько статей, но действительно не понял, что делает select 1 from
? Кто-то говорит: «Вам следует использовать select 1
вместо select *
». Вот примерная таблица:
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
что делает это утверждение?
sql-server-2008
Мехмет
источник
источник
select 1
вместо,select *
например,EXISTS
статьи. Оптимизатор был улучшен очень давно. Он никогда не заменял «получить все столбцы из этого набора результатов».Ответы:
select 1 from table
вернет столбец из единиц для каждой строки в таблице. Вы можете использовать его с оператором where, чтобы проверить, есть ли у вас запись для данного ключа, например:
if exists(select 1 from table where some_column = 'some_value')
Вероятно, ваш друг говорил, что вместо того, чтобы делать массовый выбор с помощью select * from table, вы должны точно указать столбцы, которые вам нужны, по двум причинам:
1) производительность, и вы можете получить больше данных, чем вам действительно нужно.
2) пользователь запроса может полагаться на порядок столбцов. Если ваша таблица обновляется, клиент будет получать столбцы в другом порядке, чем ожидалось.
источник
Конструкция обычно используется в проверках "существования"
if exists(select 1 from customer_table where customer = 'xxx')
или же
if exists(select * from customer_table where customer = 'xxx')
Обе конструкции эквивалентны. Раньше люди говорили, что select * лучше, потому что тогда регулятор запросов будет использовать лучший индексированный столбец. Это оказалось неправдой.
источник
Он делает то, что вы просите,
SELECT 1 FROM table
будетSELECT
(вернуть) a1
для каждой строки в этой таблице, если бы в таблице было 3 строки, вы бы получилиВзгляните на Count (*) vs Count (1), который может быть проблемой, которую вы описали.
источник
WHERE
предложении истинным или ложным. Часто используется в подзапросах.Оператор
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
источник
SELECT COUNT(*) in EXISTS/NOT EXISTS
EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)
-EXISTS
условие всегда будет возвращать истину независимо от того, выполняются УСЛОВИЯ или нет.NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)
-NOT EXISTS
условие всегда будет возвращать false независимо от тогоCONDITIONS
, выполнены они или нет.SELECT COUNT 1 in EXISTS/NOT EXISTS
EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
-EXISTS
условие вернет истину, еслиCONDITIONS
выполнено. Иначе ложь.NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
-NOT EXISTS
условие вернет false, еслиCONDITIONS
выполнено. Иначе правда.источник