Возврат нескольких значений из оператора sql

Я смотрел на внутренние запросы sql (немного похожий на sql-эквивалент метода C# anon) и задавался вопросом, могу ли я вернуть более одного значения из запроса?

Например, вернуть количество строк в таблице как одно выходное значение, а также, как другое выходное значение, вернуть отличное количество строк?

Кроме того, как работает отличное? Основано ли это на том, может ли одно поле совпадать с другим (таким образом, классифицированным как «отличное»)?

Я использую Sql Server 2005. Будет ли потеря производительности, если я верну одно значение из одного запроса, а не два из одного запроса?

Спасибо

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
6 129
4

Ответы 4

Вы можете ответить на свой первый вопрос следующим образом:

SELECT
  COUNT(field1),
  COUNT(DISTINCT field2)
FROM table

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

Отличный означает определение слова. Это исключает повторяющиеся возвращаемые строки.

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

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

Если внутренний запрос встроен в SELECT, вам может быть сложно выбрать несколько значений. Однако вместо этого часто можно использовать JOIN для подзапроса; таким образом, подзапрос может быть назван, и вы можете получить несколько результатов

SELECT a.Foo, a.Bar, x.[Count], x.[Avg]
FROM a
INNER JOIN (SELECT COUNT(1) AS [Count], AVG(something) AS [Avg]) x
  ON x.Something = a.Something

Что могло бы помочь.

DISTINCT делает то, что говорит. IIRC, вы можете SELECT COUNT(DISTINCT Foo) и т. д. Для запроса отдельных данных.

Внутренние запросы в форме:

SELECT * FROM tbl WHERE fld in (SELECT fld2 FROM tbl2 WHERE tbl.fld = tbl2.fld2) 

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

ряды:

SELECT count(*), count(distinct *) from table 

вернет набор данных с одной строкой, содержащей два столбца. Столбец 1 - это общее количество строк в таблице. В столбце 2 учитываются только отдельные строки.

Distinct означает, что в возвращаемом наборе данных не будет дубликатов ряды. Distinct может появиться только один раз, как правило, сразу после выбора. Таким образом, такой запрос, как:

SELECT distinct a, b, c FROM table 

может иметь такой результат:

 a1  b1  c1
 a1  b1  c2
 a1  b2  c2
 a1  b3  c2

Обратите внимание, что значения дублируются во всем наборе результатов, но каждая строка уникальна.

Я не уверен, что означает ваш последний вопрос. Вы должны вернуть из запроса все данные, относящиеся к запросу. Что касается более быстрого, только сравнительный анализ может сказать вам, какой подход быстрее.

вы можете вернуть несколько результатов тремя способами (из моей головы)

  1. Имея выбор с несколькими значениями, например: выберите col1, col2, col3
  2. С несколькими запросами, например: выберите 1; выберите «2»; выберите colA. вы получите к ним доступ в средстве чтения данных, вызвав .NextRecord ()
  3. Используя выходные параметры, объявите параметры перед выполнением запроса, а затем получите из них значение. например: set @ param1 = "2". строка myparam2 = sqlcommand.parameters ["param1"]. tostring ()

Различный, фильтрует результирующие строки, чтобы они были уникальными.

Другие вопросы по теме