Что значит выбрать 1 из таблицы?


Я видел много запросов с чем-то следующим образом.

Select 1  
From table

что это 1 значит, как он будет выполнен и, что он вернет?

кроме того, в каких сценариях это можно использовать?

14 98

14 ответов:

SELECT 1 FROM TABLE_NAME означает "возврат 1 из таблицы". Он довольно ничем не примечателен сам по себе, поэтому обычно он будет использоваться с WHERE и часто EXISTS (как отмечает @gbn, это не обязательно лучшая практика, однако это достаточно распространено, чтобы отметить, даже если это не очень значимо (тем не менее, я буду использовать его, потому что другие используют его, и это "более очевидно" сразу. Конечно, это может быть вязкая проблема курицы против яйца, но я обычно не останавливаюсь)).

 SELECT * FROM TABLE1 T1 WHERE EXISTS (
     SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
 );

в основном, выше возвращает все из таблицы 1, которая имеет соответствующий идентификатор из таблицы 2. (Это надуманный пример, очевидно, но я считаю, что он передает идею. Лично я, вероятно, сделал бы выше, как SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2); поскольку я рассматриваю это как далеко более явным для читателя, если не было косвенной убедительной причины не делать этого).

EDIT

на самом деле есть один случай, о котором я забыл до сих пор. В том случае, когда вы пытаетесь определить наличие значения в базе данных из внешнего языка, иногда SELECT 1 FROM TABLE_NAME будет использоваться. Это не дает значительного преимущества по сравнению с выбором отдельного столбца, но, в зависимости от реализации, он может предложить существенные выгоды по сравнению с выполнением SELECT *, просто потому, что часто бывает так, что чем больше столбцов БД возвращает на язык, тем больше структура данных, что в свою очередь означает, что потребуется больше времени.

select 1 from table возвращает константу 1 для каждой строки таблицы. Это полезно, когда вы хотите дешево определить, соответствует ли запись вашему where предложения и/или join.

если вы имеете в виду что-то вроде

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1 FROM table WHERE...) 

потом миф что 1 лучше, чем

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT * FROM table WHERE...) 

The 1 или * в EXISTS игнорируется, и вы можете написать это в соответствии с страница 191 стандарта ANSI SQL 1992:

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1/0 FROM table WHERE...) 

Он делает то, что он говорит - он всегда будет возвращать целое число 1. Он используется, чтобы проверить, является ли запись, соответствующая ваше предложение where не существует.

select 1 from table используется некоторыми базами данных в качестве запроса для проверки связи, чтобы увидеть, если он жив, часто используется при получении или возвращении соединение из пула соединений.

результат 1 для каждой записи в таблице. __

хотя это не широко известно, запрос может иметь HAVING пункт без GROUP BY предложения.

при таких обстоятельствах HAVING положение применяется ко всему набору. Ясно, что SELECT предложение не может ссылаться на какой-либо столбец, иначе вы (исправите) получите ошибку "столбец недействителен в select, потому что он не содержится в группе BY" и т. д.

таким образом, буквальное значение должны используется (потому что SQL не позволяет результирующий набор с нулевые столбцы-почему?!) и литеральное значение 1 (INTEGER) обычно используется: если HAVING статья оценивает TRUE тогда результирующий набор будет одной строкой с одним столбцом, показывающим значение 1, в противном случае вы получите пустой набор.

пример: чтобы узнать, имеет ли столбец более одного отдельного значения:

SELECT 1
  FROM tableA
HAVING MIN(colA) < MAX(colA);

Если вы не знаете, существуют ли какие-либо данные из вашей таблицы или нет, вы можете использовать следующий запрос:

SELECT cons_value FROM table_name;

для примера:

SELECT 1 FROM employee;
  1. он вернет столбец, который содержит общее количество строк & все строки имеют одинаковое постоянное значение 1 (на этот раз он возвращает 1 для всех строк);
  2. если в вашей таблице нет строки, она ничего не вернет.

Итак, мы используем этот SQL-запрос, чтобы узнать, есть ли какие-либо данные в таблице & количество строк указывает, сколько строк существует в этой таблице.

чтобы быть немного более конкретным, вы бы использовали это, чтобы сделать

SELECT 1 FROM MyUserTable WHERE user_id = 33487

вместо

SELECT * FROM MyUserTable WHERE user_id = 33487

потому что вы не заботитесь о глядя на результаты. Запрос числа 1 очень легко для базы данных (так как он не должен делать никаких поисков).

Это означает, что вы хотите значение "1 " в качестве вывода или большую часть времени используется в качестве внутренних запросов, потому что по какой-то причине вы хотите вычислить внешние запросы на основе результата внутренних запросов.. не все время вы используете 1 но у вас есть некоторые определенные значения...

Это будет статически дает вам выход в виде значения 1.

Если вы просто хотите проверить true или false на основе предложения WHERE, выберите 1 из таблицы, где условие является самым дешевым способом.

Я вижу, что он всегда используется в SQL-инъекции,например:

www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;

эти числа можно использовать, чтобы угадать, где существует база данных и угадать имя столбца указанной базы данных.И значения таблиц.

Это просто означает, что вы извлекаете номер первого столбца из таблицы,,,, означает выберите Emply_num, Empl_no из сотрудников ; здесь вы используете select 1 from Employees; это означает, что вы извлекаете столбец Emply_num. Спасибо

причина другая, по крайней мере для MySQL. Это из MySQL manual

InnoDB вычисляет значения мощности индекса для таблицы в первый раз, когда эта таблица доступна после запуска, вместо того, чтобы хранить такие значения в таблице. Этот шаг может занять значительное время в системах, которые разделяют данные на множество таблиц. Поскольку эти накладные расходы применяются только к начальной операции открытия таблицы, чтобы" разогреть " таблицу для последующего использования, немедленно обратитесь к ней после запуска, выпустив инструкцию, такую как SELECT 1 FROM TBL_NAME LIMIT 1