Я видел много запросов с чем-то следующим.
Select 1
From table
Что это 1
значит, как он будет выполнен и что он вернет?
Кроме того, в каких случаях это можно использовать?
Я видел много запросов с чем-то следующим.
Select 1
From table
Что это 1
значит, как он будет выполнен и что он вернет?
Кроме того, в каких случаях это можно использовать?
Ответы:
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);
поскольку я рассматриваю это как FAR более явный для читателя, если не было убедительной причины не делать этого).
На самом деле есть один случай, о котором я забыл до сих пор. В случае, когда вы пытаетесь определить наличие значения в базе данных на внешнем языке, иногда SELECT 1 FROM TABLE_NAME
будет использоваться. Это не дает существенного преимущества по сравнению с выбором отдельного столбца, но, в зависимости от реализации, может принести существенный выигрыш по сравнению с выполнением SELECT *
, просто потому, что часто бывает, что чем больше столбцов возвращает БД на язык, тем больше объем данных. структура, которая, в свою очередь, означает, что потребуется больше времени.
...EXISTS (SELECT 1...
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...)
Знак 1
или *
в EXISTS игнорируется, и вы можете написать это в соответствии со стандартом ANSI SQL 1992 :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
работает как шарм
он делает то, что говорит - он всегда возвращает целое число 1. Он используется для проверки, существует ли запись, соответствующая вашему предложению where.
select 1 from table
используется некоторыми базами данных в качестве запроса для проверки соединения на предмет его работоспособности, часто используется при получении или возврате соединения в / из пула соединений.
Хотя это широко не известно, запрос может иметь HAVING
предложение без GROUP BY
предложения.
При таких обстоятельствах HAVING
пункт применяется ко всему набору. Очевидно, что SELECT
предложение не может ссылаться ни на один столбец, в противном случае вы бы (исправили) получили ошибку: «Столбец недопустим в select, потому что он не содержится в GROUP BY» и т. Д.
Таким образом, буквенное значение должно быть использовано (поскольку SQL не позволяет результирующего с нулевыми столбцами - почему ?!) и буквенное значение 1 ( INTEGER
) обычно используется: если HAVING
оговорка оценивает TRUE
то ResultSet будет одна строка с одним столбец показывает значение 1, в противном случае вы получите пустой набор.
Пример: чтобы определить, имеет ли столбец более одного отдельного значения:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Чтобы быть немного более конкретным, вы должны использовать это, чтобы сделать
SELECT 1 FROM MyUserTable WHERE user_id = 33487
вместо того, чтобы делать
SELECT * FROM MyUserTable WHERE user_id = 33487
потому что вам не важно смотреть на результаты. Запрашивать номер 1 очень просто для базы данных (так как она не требует каких-либо поисков).
Если вы не знаете, есть ли какие-либо данные в вашей таблице или нет, вы можете использовать следующий запрос:
SELECT cons_value FROM table_name;
Для примера:
SELECT 1 FROM employee;
Таким образом, мы используем этот SQL-запрос, чтобы узнать, есть ли какие-либо данные в таблице, а количество строк показывает, сколько строк существует в этой таблице.
Это означает, что вы хотите получить значение « 1 » в качестве выходных данных или большую часть времени использовать как внутренние запросы, потому что по какой-то причине вы хотите вычислять внешние запросы на основе результата внутренних запросов ... не всегда, когда вы используете 1, а вы есть определенные значения ...
Это статически даст вам вывод как значение 1.
Если вы просто хотите проверить истину или ложь на основе предложения 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 From Employees; здесь вы используете выберите 1 из сотрудников; это означает, что вы получаете столбец Emply_num. Спасибо
Причина в другом, по крайней мере, для MySQL. Это из руководства MySQL
InnoDB вычисляет значения мощности индекса для таблицы при первом обращении к ней после запуска, вместо сохранения таких значений в таблице. Этот шаг может занять значительное время в системах, которые разбивают данные на множество таблиц. Поскольку эти издержки применяются только к начальной операции открытия таблицы, чтобы «прогреть» таблицу для последующего использования, получите к ней доступ сразу после запуска, выполнив инструкцию, такую как SELECT 1 FROM tbl_name LIMIT 1
Это просто для удобства используется с IF EXISTS (). В противном случае вы можете пойти с
select * from [table_name]
Image В случае 'IF EXISTS' нам просто нужно знать, что любая строка с указанным условием существует или не имеет значения, что является содержимым строки.
select 1 from Users
приведенный выше пример кода, возвращает нет. строк равно нет. пользователей с 1 в одном столбце