Внутренние запросы в форме:
SELECT * FROM tbl WHERE fld in (SELECT fld2 FROM tbl2 WHERE tbl.fld = tbl2.fld2)
не может возвращать несколько строк. Когда вам нужно несколько строк из вторичного запроса, вам обычно нужно выполнить внутреннее соединение с другим запросом.
строк:
SELECT count(*), count(distinct *) from table
вернет набор данных с одной строкой, содержащей два столбца. Столбец 1 - это общее количество строк в таблице. В столбце 2 учитываются только отдельные строки.
Distinct означает, что возвращенный набор данных не будет содержать повторяющихся строк . Отличительный может появиться только один раз, обычно сразу после выбора. Таким образом, запрос, такой как:
SELECT distinct a, b, c FROM table
может иметь такой результат:
a1 b1 c1
a1 b1 c2
a1 b2 c2
a1 b3 c2
Обратите внимание, что значения дублируются во всем наборе результатов, но каждая строка уникальна.
Я не уверен, что означает ваш последний вопрос. Вы должны вернуть из запроса все данные, относящиеся к запросу. Что касается ускорения, только сравнительный анализ может сказать вам, какой подход быстрее.