Было бы интересно узнать про доступ в базу данных из Delphi. Дело в том, что стандартные средства работы с базами данных неудобные и хотелось бы сделать свой графический интерфейс для ввода информации и запуска запросов. Само собой сама база данных будет сделана в штатном графическом интерфейсе, типа SSMS для SQL Server, но в нем неудобно делать рутинный ввод информации и запуск рабочих запросов и хотелось бы сделать свой простенький интерфейс, например в RAD Studio. Дело в том, что есть база и в неё надо по 10 раз в день вводить информацию о своем состоянии и желательно сделать что-то простое и быстрое.
Итак, есть склад, давайте представим у нас есть склад, большой склад, на этом складе есть контейнеры, есть контейнеры, контейнеров много и в каждом контейнере лежат коробки, в каждом контейнере много коробок... у нас есть на складе контейнеры, в контейнерах есть коробки я так и не понял, есть ли у нас склад, контейнеры и коробки, автор, освети эту тему более подробно пожалуйста 🙏🏼
За чем ID_CONTAINER_MOVE? можно при перемещении простотовлять ID_CONTAINER, А если нужно информация о старом контейнере то надо добавлять колтнку OLD_CONTAINER_ID, тогда при запросе у тебя будет 1 условие
Здравствуйте, отличные уроки. Я начинающий. У меня проблема с одной задачой, если можете помогите плз. Не могу найти запрос для такой задачи: Мне нужен запрос, который показывает количество покупок, совершенных клиентами. В нем должны отображаться только клиенты, совершившие более 1 покупки. Результат должен содержать следующие поля: (Имя, Фамилия) , Количество покупок. У меня команда как-то суммирует общее количестко. Талблицы. Clients Products Orders SELECT Clients.FirstName AS "First Name", Clients.LastName AS "Last Name", count(*) AS "Number of Orders" FROM Orders JOIN Clients ON Clients.ClientID=Orders.ClientID GROUP BY Clients.firstname, Clients.lastname;
@@sinosha нужно понимать, какие данные хранятся в таблице Orders (в каком виде и как это вообще выглядит). Если с продуктами и и клиентами все интуитивно понятно) Ну и я бы лично для себя бы все писал в одном стиле и со смыслом. SELECT Clients.FirstName AS "First Name", Clients.LastName AS "Last Name", count(*) AS "Number of Orders" FROM Clients INNER JOIN Orders ON Clients.ClientID=Orders.ClientID GROUP BY Clients.FirstName , Clients.LastName HAVING count(*) > 1 -- вот этого железно не хватало
1. Заменить or на два запроса с union 2. Использовать индексы 3. Переписать запрос на group by idconteiner и having 4. Вся таблица conteiners пойдет left join-ном к предыдущей выборке group by
Добрый день ,подскажите ,пожалуйста,что такое cte и как правильно его писать? Пока не совсем могу это понять. Cte это глубина запроса? Где бы почитать более подробно? Заранее благодарю
select * from containers c join (select ID_CONTAINER, ID_CONTAINER_MOVE ,sum(length*height*width/10000) as volume FROM boxes b WHERE b.ID_STOCK =1 AND b.STATUS =0 AND b.NN_REZERV =0 GROUP BY ID_CONTAINER, ID_CONTAINER_MOVE HAVING volume>50 order by volume) b on (c.id=b.ID_CONTAINER and b.ID_CONTAINER_MOVE=0) or c.ID =b.ID_CONTAINER_MOVE WHERE c.STATUS = 0 У меня 24 контейнера получается. Где ошибка?
SELECT * FROM containers c join ( select b.ID_CONTAINER, b.ID_CONTAINER_MOVE, sum(width * height * length/10000) > 50 check_value from boxes b where b.ID_STOCK = 1 and b.STATUS = 0 and b.NN_REZERV = 0 and b.ID_CONTAINER_MOVE = 0 GROUP BY b.ID_CONTAINER, b.ID_CONTAINER_MOVE) as t on ((t.ID_CONTAINER = c.ID and t.ID_CONTAINER_MOVE = 0) OR (t.ID_CONTAINER_MOVE = c.ID)) WHERE c.STATUS = 0 and check_value is true так правильно?
Походу запилил видос пока ждал выгрузку данных))) а мои 15 минут жизни кто теперь вернет! Я же ждал ответ! )))
Отлично! Побольше задачек. Осилю курс обучения и сразу за задачки! Благодарю!
Мария, спасибо! Здорово, что Вы с нами!
Было бы интересно узнать про доступ в базу данных из Delphi. Дело в том, что стандартные средства работы с базами данных неудобные и хотелось бы сделать свой графический интерфейс для ввода информации и запуска запросов. Само собой сама база данных будет сделана в штатном графическом интерфейсе, типа SSMS для SQL Server, но в нем неудобно делать рутинный ввод информации и запуск рабочих запросов и хотелось бы сделать свой простенький интерфейс, например в RAD Studio. Дело в том, что есть база и в неё надо по 10 раз в день вводить информацию о своем состоянии и желательно сделать что-то простое и быстрое.
Итак, есть склад, давайте представим у нас есть склад, большой склад, на этом складе есть контейнеры, есть контейнеры, контейнеров много и в каждом контейнере лежат коробки, в каждом контейнере много коробок... у нас есть на складе контейнеры, в контейнерах есть коробки
я так и не понял, есть ли у нас склад, контейнеры и коробки, автор, освети эту тему более подробно пожалуйста 🙏🏼
Здравствуйте, Михаил!
Спасибо за обратную связь. Стараюсь теперь меньше повторяться.
🤣
Спасибо! Как раз перед собеседованием немного натаскаться.
Пересмотрел половину ваших видео уже)
И Вам спасибо! Любопытно потом было бы узнать результат! Удачи Вам на собеседовании! Присылайте интересные вопросы - вместе разберём! :)
@@PrimeSoft Хорошо, на следующей неделе напишу)
@@Art-ub1sg ну что, взяли?)
@@FAU5390 походу нет)
Друзья, есть ли предположения по оптимизации запроса?
За чем ID_CONTAINER_MOVE? можно при перемещении простотовлять ID_CONTAINER, А если нужно информация о старом контейнере то надо добавлять колтнку OLD_CONTAINER_ID, тогда при запросе у тебя будет 1 условие
Здравствуйте, отличные уроки. Я начинающий. У меня проблема с одной задачой, если можете помогите плз.
Не могу найти запрос для такой задачи:
Мне нужен запрос, который показывает количество покупок, совершенных клиентами. В нем должны отображаться только клиенты, совершившие более 1 покупки. Результат должен содержать следующие поля:
(Имя, Фамилия) , Количество покупок. У меня команда как-то суммирует общее количестко.
Талблицы.
Clients
Products
Orders
SELECT
Clients.FirstName AS "First Name",
Clients.LastName AS "Last Name",
count(*) AS "Number of Orders"
FROM Orders
JOIN Clients ON Clients.ClientID=Orders.ClientID
GROUP BY Clients.firstname, Clients.lastname;
@@sinosha нужно понимать, какие данные хранятся в таблице Orders (в каком виде и как это вообще выглядит). Если с продуктами и и клиентами все интуитивно понятно)
Ну и я бы лично для себя бы все писал в одном стиле и со смыслом.
SELECT
Clients.FirstName AS "First Name",
Clients.LastName AS "Last Name",
count(*) AS "Number of Orders"
FROM Clients
INNER JOIN Orders ON Clients.ClientID=Orders.ClientID
GROUP BY Clients.FirstName , Clients.LastName
HAVING count(*) > 1 -- вот этого железно не хватало
И как всё-таки оптимизируется этот запрос?
1. Заменить or на два запроса с union
2. Использовать индексы
3. Переписать запрос на group by idconteiner и having
4. Вся таблица conteiners пойдет left join-ном к предыдущей выборке group by
Добрый день ,подскажите ,пожалуйста,что такое cte и как правильно его писать? Пока не совсем могу это понять. Cte это глубина запроса? Где бы почитать более подробно? Заранее благодарю
Поле "NOMER"? Серьезно? А че "id_deliver" тогда? А не "nomer_DoStAvCHiK"?
select * from containers c
join
(select ID_CONTAINER, ID_CONTAINER_MOVE ,sum(length*height*width/10000) as volume
FROM boxes b
WHERE b.ID_STOCK =1
AND b.STATUS =0
AND b.NN_REZERV =0
GROUP BY ID_CONTAINER, ID_CONTAINER_MOVE HAVING volume>50
order by volume) b
on (c.id=b.ID_CONTAINER and b.ID_CONTAINER_MOVE=0) or c.ID =b.ID_CONTAINER_MOVE
WHERE c.STATUS = 0
У меня 24 контейнера получается. Где ошибка?
Сделать JOIN таблиц CONTAINERS и BOXES, а условие указать в предложении HAVING?
Здравствуйте! Использование having - неплохая идея! Посмотрите, еще, пожалуйста, это решение: ruclips.net/video/XdlYeMZBesA/видео.html
Пустые контейнеры понаотправляете. :)
Там нужно на 1000000 делить.
Ярослав, спасибо, что приняли участие в решении задачи! :)
много флуда, надо было отедлить в отдельное видео часть про конфигурацию это не всем интересно
Зачем по 5 раз повторять ненужные фразы? Типо как про кофе?
SELECT *
FROM containers c
join ( select b.ID_CONTAINER, b.ID_CONTAINER_MOVE, sum(width * height * length/10000) > 50 check_value
from boxes b
where b.ID_STOCK = 1
and b.STATUS = 0
and b.NN_REZERV = 0
and b.ID_CONTAINER_MOVE = 0
GROUP BY b.ID_CONTAINER, b.ID_CONTAINER_MOVE) as t
on ((t.ID_CONTAINER = c.ID and t.ID_CONTAINER_MOVE = 0) OR (t.ID_CONTAINER_MOVE = c.ID))
WHERE c.STATUS = 0 and check_value is true
так правильно?