4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
1

Результат запроса - каков его тип и что с ним можно делать?

16.09.2017, 21:06. Показов 931. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните дилетанту. Никогда не сталкивался с SQL, и вот снова пришлось (С). В интернете 100500 терабайт контента про то, как писать различные запросы. А что сама база возвращает в качестве результата их выполнения? Какой тип у этого безобразия? Число - если мы запросим агрегатную функцию по какой-нибудь числовой колонке какой-нибудь таблицы? Или некая волшебная одномерная итерируемая сущность, которая умеет в итератор и обращение к своим полям - примитивным типам языка, из которого был выполнен запрос? Или что-то еще?

ЗЫ я человек, измученный Нарзаном 1С, у нас там РезультатЗапроса - это отдельный тип языка, умеет быть иерархическим по уровням группировок, можно итерироваться по любым группировкам и получать итоги любого уровня. А например в PostgreSQL как? Просто предстоит с ним плотно работать, а я не знаю таких тривиальных вещей. И самое смешное - навскидку не могу в гугле найти ответ! При том, что, как уже упоминал, туториалов по написанию самих текстов запросов просто море
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2017, 21:06
Ответы с готовыми решениями:

Определить модель терминала и что с ним можно делать.
У меня тут нарисовалось дело одно, человек со своим товарищем познакомил, у него есть терминал....

Файл svn: как его импортировать и что с ним делать
Здравствуйте, достался мне проект на asp.net который необходимо запустить, но в процессе возникли...

По трем сторонам, если по ним можно построить треугольник, то определить его тип
Ввести 3 числа. Можно ли построить треугольник с такими сторонами? Если построить треугольник...

Книга по WordPress. Как писать темы, плагины, виджеты и что еще с ним можно делать
Есть знания HTML/CSS, PHP, JS, SQL. Нужна книга, где бы детально рассказали о том, что такое...

15
5449 / 4368 / 1072
Регистрация: 29.08.2013
Сообщений: 27,391
Записей в блоге: 3
17.09.2017, 07:22 2
Цитата Сообщение от _Ivana Посмотреть сообщение
А что сама база возвращает в качестве результата их выполнения?
массив

Delphi
1
2
3
4
5
6
7
8
9
10
query.sql.text:='select * from t';
query.open;
while not query.eof do
begin
  query.fields[Х].asString // Х - это количество полей в запросе. можно выводить как по номеру, так и по имени
                                     // можно перебрать по Fields.Count
                                     // можно автоматом определить типы
                                     // и вывести куда угодно
  query.next;
end;
Добавлено через 14 минут
Цитата Сообщение от _Ivana Посмотреть сообщение
В интернете 100500 терабайт контента про то, как писать различные запросы
вот тут ВСЕ описано
подходит почти для всех компонентов доступа к БД - ADO, FireDAC, UniDac, MSDac

Цитата Сообщение от _Ivana Посмотреть сообщение
А например в PostgreSQL как?
написал запрос, выполнил, обработал, вывел - что из этого не понятно?

Добавлено через 3 минуты
Блин, а у вас какой язык программирования? Я почему то про делфи подумал, извиняюсь

Цитата Сообщение от _Ivana Посмотреть сообщение
А что сама база возвращает в качестве результата их выполнения?
таблицу

вы где будете свои запросы выполнять? в 1с?
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
17.09.2017, 15:53  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
таблицу
Спасибо, понятно.

ЗЫ Язык программирования у меня не важно какой. Важно то, что скорее всего придется как-то решать задачу в рамках убогих абстракций одномерно итерируемого объекта. В котором даже такие тривиальные вещи, как перебрать на первом уровне персон а на втором для каждой вывести их детей становится хрен пойми как решаемой задачей. А о многомерных вложенных запросах и думать не приходится, похоже.
0
5449 / 4368 / 1072
Регистрация: 29.08.2013
Сообщений: 27,391
Записей в блоге: 3
17.09.2017, 18:18 4
похоже вы совсем про SQL ничего не знаете
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
18.09.2017, 14:16  [ТС] 5
Логично. Кто все знает, тому незачем спрашивать.
0
5449 / 4368 / 1072
Регистрация: 29.08.2013
Сообщений: 27,391
Записей в блоге: 3
18.09.2017, 15:07 6
ну так спросите
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
18.09.2017, 16:32  [ТС] 7
Так я и спросил в этой теме. Но по мере погружения в материал возникают все новые вопросы. Например, если результат запроса - одномерная таблица с жестким составом колонок, то как мне красиво перебрать вложенные результаты - например, колонка с именем человека и лефт джойн (по совпадениям id) колонка с именем его детей. Случай тривиальный, но у меня после джойна строк станет столько, сколько всего детей будет в запросе, а родители продублируются на всех этих строках. И как мне перебрать в цикле сначала всех родителей а потом во вложенном всех детей каждого? Или эмулировать это руками - перебирать построчно и смотреть, поменялся ли родитель?
0
5449 / 4368 / 1072
Регистрация: 29.08.2013
Сообщений: 27,391
Записей в блоге: 3
18.09.2017, 17:48 8
если не выводить детей, то останутся только родители

ЗЫ можно подумать что в 1с вам не нужно было бы перебирать все построчно
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
18.09.2017, 17:54  [ТС] 9
Цитата Сообщение от qwertehok Посмотреть сообщение
можно подумать
я же написал выше, какая в 1С с этим лафа - там результат запроса это многомерный объект с любыми иерархическими итогами, а не плоская таблица, как в SQL.
0
5449 / 4368 / 1072
Регистрация: 29.08.2013
Сообщений: 27,391
Записей в блоге: 3
18.09.2017, 18:26 10
Цитата Сообщение от _Ivana Посмотреть сообщение
там результат запроса
а вы не путаете запрос который вы делаете SQL (а в 1с насколько я помню он делается через COM) и запрос который делается в построителе запросов?
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
18.09.2017, 18:34  [ТС] 11
Цитата Сообщение от qwertehok Посмотреть сообщение
похоже вы совсем про 1С ничего не знаете
Но тема не об этом. Если вдруг кто (хотя вряд ли) сможет сказать что-то по существу - с удовольствием почитаю.
0
5449 / 4368 / 1072
Регистрация: 29.08.2013
Сообщений: 27,391
Записей в блоге: 3
18.09.2017, 18:38 12
Цитата Сообщение от _Ivana Посмотреть сообщение
Но тема не об этом.
а о чем?
SQL это плоские таблицы. Нужно как-то их крутить? Нужно писать обработчик.

ЗЫ я вот попробовал RapidMainer и в восторге.
0
25 / 24 / 7
Регистрация: 22.08.2017
Сообщений: 130
20.09.2017, 09:30 13
Цитата Сообщение от _Ivana Посмотреть сообщение
что сама база возвращает в качестве результата их выполнения?
Набор данных
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
20.09.2017, 13:11  [ТС] 14
Да, причем в типах и абстракциях языка, из которого все это вызывается, как мне говорили, и как я сам убедился. У меня в Clojure например это линейный список мапов, где у каждой мапы перечень полей - названия колонок таблицы результата запроса, а значения - значения этих колонок текущей строки. И все это дело только линейно перебирать. Я просто думал, может есть какое-то волшебство, позволяющее получать этот результат сразу в виде мощного сложного объекта, как привык в 1С. Но похоже, к сожалению, такого нет.
0
1652 / 1151 / 173
Регистрация: 23.07.2010
Сообщений: 6,836
21.09.2017, 14:14 15
благородный дон слышал что-нибудь про провайдеры данных?
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,969
Записей в блоге: 29
21.09.2017, 15:50  [ТС] 16
Насколько я могу догадываться, то это некий дополнительный слой абстракции, который через драйвер стучится к базе, выполняет запрос, берет его плоский (или другой, если всякие Монги и Редисы) результат, потом преобразует его к удобному для кручения/верчения виду, и этот вид уже выдает пользователю. Похоже, в 1С он встроен в движок, поэтому там так все хорошо. В Ruby по слухам есть некий ROM, в других языках скорее всего свои либы и фреймворки. Но похоже, что мне придется изобрести свой велосипед.

ЗЫ я тут почитал основы реляционной алгебры над отношениями и понял, что любой запрос - это сложное композиционное выражение реляционной алгебры, которое в качестве входных данных принимает отношения и возвращает всегда тоже отношение, в силу замкнутости всех операций на множестве отношений. Поэтому результат запроса в реляционных базах - это всегда отношение (плоская таблица кортежей). Собственно, это внесло ясность в вопрос. Хотя конечно различные провайдеры данных могут потом его крутить как угодно, полагаю.
0
21.09.2017, 15:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2017, 15:50
Помогаю со студенческими работами здесь

Что такое Microsoft Scripting Editor и что полезного можна с ним делать в файлах
Что такое Microsoft Scripting Editor и что полезного можна с ним делать в файлах*.xls интересует :...

ПР 4, что с ним делать??
я как то наворотил своему сайту (без покупок в бирже, без обмена) при помощи рега в каталогах ПР4....

Kernel_task и что с ним делать?
Добрый день! Я относительно новый пользователь продукции Apple и MAC OS. Столкнулся с...

HIDE и что с ним делать
Обращаюсь к людям, которые могут помочь, а не которые критикуют на чём земля стоит... Есть ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru