Как сделать несколько селектов в одном запросе
Можно сделать оператор 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.
Читайте также: