Как сделать несколько селектов в одном запросе

Обновлено: 04.07.2024

Можно сделать оператор double select в один запрос, и это покажет каждое значение отдельно, используя sum и suma для первого select я ожидаю только одно значение, а для второго-4 значения.

2 ответа

Я пытаюсь объединить 2 sql результирующих наборов в 1. Я не могу иметь их в 1 select, так как производительность-это огромная проблема. Поэтому я хотел бы запустить их оба и объединить результаты по первичному ключу-все в одном запросе. Например. select a,b,c,d from tablea; select d,e,f,g from.

Есть ли способ в SQL (MySQL) увеличить значение, а также вернуть его в одном запросе? Я пытаюсь ovoid делать два запроса, как показано ниже: QUERY 1 UPDATE my_table SET my_col = (my_col + 1) WHERE something = something_else; QUERY 2 SELECT my_col FROM my_table WHERE something = something_else;.

В UNION ALL соответствующие поля должны иметь одно и то же имя, иначе как система решит, какое имя отображать в заголовке столбца? Ваш SQL должен иметь форму:

Кроме того, sum-это ключевое слово, поэтому вы не можете использовать псевдоним с именем sum. т. е. "as sum", вероятно, недопустимо.

Вы не можете вызвать более одного оператора select в одном запросе, если это не транзакция. Измените свой запрос на этот:

Кроме того, как упоминалось @Swagata, вы не можете использовать ключевое слово в качестве псевдонима

Похожие вопросы:

Я хочу получить информацию select из двух таблиц SQL в одном запросе, но эта информация не связана, поэтому никаких потенциальных соединений не существует. Примером может служить следующая.

У меня есть следующий запрос select main_cat_name,cat_url from mf_main order by main_cat_name Это возвращает все данные моей таблицы. Теперь я хочу иметь count из общего числа строк этой таблицы. Я.

Я создаю отчет в php (mysql), экс: `select count(id) as tot_user from user_table select count(id) as tot_cat from cat_table select count(id) as tot_course from course_table` Вот так у меня 12.

Я пытаюсь объединить 2 sql результирующих наборов в 1. Я не могу иметь их в 1 select, так как производительность-это огромная проблема. Поэтому я хотел бы запустить их оба и объединить результаты по.

Есть ли способ в SQL (MySQL) увеличить значение, а также вернуть его в одном запросе? Я пытаюсь ovoid делать два запроса, как показано ниже: QUERY 1 UPDATE my_table SET my_col = (my_col + 1) WHERE.

Мне нужно вычислить сумму вхождений некоторых данных в два столбца в одном запросе. DB находится в SQL Server 2005. Например у меня есть эта таблица: Person: Id, Name, Age И мне нужно получить в.

Как найти всех пятых самых высокооплачиваемых сотрудников в одном запросе в SQL Server DECLARE @result bigint SELECT TOP 5 @result = EmpID FROM Employees ORDER BY Salary DESC SELECT @result.

Я хочу использовать 2 базы данных в одном запросе sql. Я буду запускать запрос в одной БД, и другая БД должна быть выбрана путем префикса имени БД к таблице, но второе имя DB я хочу выбрать.

Оператор SELECT используется для извлечения данных из одной или многочислен­ных таблиц:

Это универсальная синтаксическая конструкция, используемая для получения данных из одной таблицы:

  • поля поле1 и поле2 являются именами столбцов таблицы. Для извлечения всех столбцов из таблицы можно использовать выражение * ;
  • имя_таблицы задает имя таблицы, из которой необходимо извлечь данные;
  • оператор WHERE может использоваться для задания любого условия в одном и нескольких столбцах;
  • функция GROUP BY используется с агрегатными функциями для группирова­ния результирующих наборов;
  • предложение HAVING необходимо после GROUP BY для фильтрации на осно­ве условий для группы строк или агрегатов. Если мы используем пред­ложение HAVING без GROUP BY , оно будет действовать аналогично оператору WHERE ;
  • предложение ORDER BY используется для сортировки результирующих набо­ров таблицы по возрастанию или убыванию;
  • LIMIT используется для ограничения количества строк, возвращаемых опе­ратором SELECT .

Давайте рассмотрим каждый элемент оператора.

Оператор WHERE

Следующий ниже фрагмент кода содержит универсальную синтаксическую кон­струкцию для запроса SELECT с оператором WHERE :

Оператор WHERE является необязательной частью запроса SELECT . Для указания условий можно использовать операторы AND или OR . Оператор WHERE также может использоваться с запросом DELETE и UPDATE , который мы обсудим в ближайшее вре­мя в последующей статье.

Ниже приведен список операторов, используемых с оператором WHERE для за­дания условий. Чтобы понять эти операции, давайте рассмотрим пример схемы таблицы. Мы создадим таблицу users с упомянутой здесь схемой, имеющей поля id, first_name, last_name, address, city, state, zip, login_attempts, contact_number, email, username и password:

Равно и не равно

Оператор равенства ( = ) проверяет, равны ли значения двух полей. Если они со­впадают, то условие становится истинным, и оператор извлекает значение для дальнейшей обработки. Если они не совпадают, то условие должно содержать опе­ратор неравенства ( <> ). Оно будет извлекать данные на основе условия, которое не совпадает.

Например, следующий ниже запрос используется для получения всех записей с городом, соответствующим значению New York:

Больше и меньше

Оператор больше, чем ( > ) проверяет, больше ли значение левого поля, чем зна­чение правого поля. Если да, то условие становится истинным. Оператор мень­ше, чем ( ) проверяет, меньше ли значение левого поля, чем значение право­го поля. Мы также можем использовать операторы > / и оператор равенства вместе.

Например, следующий ниже запрос используется для получения всех записей с количеством попыток входа в систему больше, чем 2:

Оператор LIKE предоставляет простой способ поиска записей в столбце с различ­ными шаблонами. В запросе можно использовать подстановочные символы для построения различных шаблонов. В основном используется два вида подстано­вочных символов. Давайте рассмотрим каждый из них на примере.

IN/NOT IN

Оператор IN используется для сравнения нескольких значений в операторе WHERE . Например, следующий ниже запрос используется для поиска всех пользователей, имеющих город new york или chicago:

Оператор NOT IN работает наоборот, например чтобы найти всех пользователей, у которых нет ни города new york, ни города chicago, используется:

BETWEEN

Оператор BETWEEN может использоваться в том случае, когда мы хотим получить записи, которые входят в определенный диапазон. Этот диапазон может быть лю­бым, таким как текст, даты или цифры. Предположим, мы хотим отыскать поль­зователей, дата создания записи о которых находится между 1 июля и 16 июля 2017 года. Тогда приведенный ниже запрос с предложением BETWEEN может нам помочь.

Подобным образом мы можем также задавать диапазон в числах для поиска пользователей, которые принадлежат к этому конкретному диапазону. Например, если мы хотим получить студентов, чьи оценки находятся в диапазоне от 70 до 80, то оператор BETWEEN может быть применен для определения диапазона.

Предложение ORDER BY

Предложение ORDER BY помогает в получении записей в упорядоченном виде. Оно обеспечивает сортировку данных по определенному столбцу в порядке возрас­тания или убывания. По умолчанию сортировка выполняется в порядке возрас­тания, но мы также можем явно указать способ сортировки с помощью ключевых слов ASC и DESC . Если мы зададим ASC , то оно будет сортировать в порядке возрас­тания, в то время как ключевое слово DESC будет сортировать в порядке убывания. Ниже приведен запрос, который найдет всех пользователей и выведет их в поряд­ке возрастания по столбцу city.

Кроме того, с помощью предложения ORDER BY можно сортировать в нескольких столбцах. Как показано в приведенном ниже запросе, где мы упорядочиваем по столбцам city и username, мы можем передать несколько столбцов.

Предложение LIMIT

Используя предложение LIMIT , мы можем получить только некоторое количество строк из больших блоков данных. Это помогает ограничить количество строк, возвращаемых в результирующем наборе. Предположим, что в таблице сущест­вуют тысячи строк, но нам требуется только 10 записей, тогда вместо извлечения тысяч записей это предложение помогает получить лишь 10 записей. Это дей­ствительно помогает настраивать производительность при поиске больших на­боров данных.

С предложением LIMIT можно передавать один или два аргумента. В случае двух аргументов один из них будет смещением, которое задает сдвиг первой возвра­щаемой строки от начала. В то время как второй аргумент будет количеством, ко­торое задает максимальное количество строк, которые будут возвращены. Этот аргумент должен быть нулевым или положительным. Взгляните на приведенный ниже запрос, где мы извлекли 10 записей из таблицы пользователей, начиная с 5-й строки.

Если с предложением LIMIT указать всего один аргумент, то аргумент будет счи­таться количеством строк. Например, следующий ниже запрос используется для извлечения 10 строк из таблицы пользователей:

На данный момент мы видели получение данных из одной таблицы; если мы хотим получить данные из нескольких таблиц, используются ключевые слова JOIN и UNION .

Операции соединения SQL

Операция соединения используется для извлечения данных из нескольких таб­лиц. Например, если есть две таблицы order и customer и мы хотим получить дан­ные, то это можно сделать с помощью предложения JOIN .

Различные типы предложения JOIN следующие:

  • INNER JOIN : внутреннее соединение возвращает только те записи, значения которых совпадают в обеих таблицах;
  • CROSS JOIN : перекрестное соединение возвращает только те записи, которые имеют совпадающие значения в левой или правой таблице;
  • LEFT JOIN : левое соединение возвращает все записи из левой таблицы и толь­ко совпадающие записи из правой таблицы;
  • RIGHT JOIN : правое соединение возвращает все записи из правой таблицы и только совпадающие записи из левой таблицы.

На следующем ниже рисунке показан краткий пример для рассмотрения:


INNER JOIN

Внутреннее соединение возвращает записи, совпадающие в обеих таблицах. На­пример, ниже приведена таблица заказов order, используемая в приложениях электронной коммерции:

Проблема:

Я хочу получить данные из двух таблиц, которые я не могу сделать, используя JOIN или UNION, поскольку они содержат разные типы данных, и я получаю после каждого количества строк из каждой таблицы. Причина, по которой я хочу сделать это за один раз, - это эффективность, однако, если кто-то может убедить меня в том, что два вызова вместо одного практически не имеют разницы в накладных расходах, тогда я с радостью решит свою проблему (хотя все равно было бы неплохо знать, как использовать только один запрос)

Код:

На основе this, я написал следующий код (выдержка):

Поведение, вызывающее проблему:

cs.execute() всегда возвращает false.

Наблюдения и действия, предпринятые мной для решения проблемы:

Как указано здесь и в документации Java, CallableStatement был разработан для использования для вызова хранимых процедур. Сохраненные процедуры сами никогда не возвращают значение, и это может быть достигнуто только с помощью параметров OUT.
Учитывая это, меня не удивляет, что .execute() возвращает false.
Однако я изменил CallableStatement на PreparedStatement и Statement, но это не сильно изменилось с точки зрения результата (cs.getResultSet() все еще вернул null)

Ответы, которые я ищу:

1. Я хотел бы знать, как я могу получить данные из нескольких таблиц, используя один запрос с несколькими операторами SELECT в jdbc. Этого можно достичь без JOINS, UNIONS и т.д. Я хотел бы иметь возможность использовать запрос, который у меня есть, если это возможно (запрос работает отлично проверен в HeidiSQL).

2. (Необязательно) Если кто-нибудь из тех, кто считает, что два запроса не будут иметь большого значения с точки зрения загрузки и производительности базы данных, я хотел бы убедиться, что это действительно так.

Есть таблица А с колонками 1,2,3 и таблица В с колонками 1,2,3.
В итоге надо получить одну таблицу с колонкой 2 из таблицы А и с колонкой 3 из таблицы В. Как написать такой двойной селект?

Вариант один: SELECT t1.col2, t2.col3 FROM table1 as t1, table2 as t2 WHERE t1.id = t2.id
Вариант два: через JOIN, документации с примерами в сети достаточно

Не очень понятно, какие данные нужно получить. Если требуется получить таблицу с колонками A.2 и B.3, то JOIN, А если нужна одна колонка, содержащая объединение A.2 и B.3, то UNION.

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

Читайте также: