Конструкция WITH в языке SQL
С помощью конструкции WITH мы можем один раз динамически (то есть "на лету") сформировать таблицу данных до выполнения основной команды SELECT и потом уже в основной команде обращаться к динамически подготовленной таблице несколько раз.
Мои курсы: prime-soft.biz/courses
Телеграм-канал с разными SQL-задачами: t.me/sql_oracle_databases
#SQL #уроки #with #примеры
Пікірлер: 76
Доступно и информативно изложен материал! У Вас самые лучшие уроки!
@PrimeSoft
2 жыл бұрын
Здравствуйте, Екатерина! Спасибо Вам большое за внимание и комментарий!
Спасибо, крутейшее видео!!!!!! Читал несколько статей на тему использования 'WITH', смотрел несколько видео - ничего не понял)) А у Вас с первого раза всё понял! Нашел задачку на использование 'WITH' и используя знания полученные в этом видео решил её самостоятельно решил за 5 минут😀
@PrimeSoft
2 жыл бұрын
Здравствуйте, Михаил, спасибо Вам большое за такой мощный комментарий! Очень приятно! Буду стараться ещё:)
Илья как всегда - на высшем уровне👍 Не описать чувство благодарности Вам!
Отличный урок, Илья! Всё понятно. Большое спасибо!
Ну наконец-то я поняла про with. У вас самое понятное объяснение
Спасибо большое, все очень понятно изложено доступным языком!!!
Как всегда лайк, очень доступно объясняете. Спасибо.
Илья спасибо за урок. Все просто и наглядно объяснили!
было мегапонятно!! спасибо большое, пришел сюда из документации Postgresql ) где ничего не понял. Спасибо что Вы есть.
Ели нашёл достаточно информации на русском, надеюсь в sqlite работает аналогично, побежал тестить!) спасибо
Спасибо! Много нового узнал! Объяснено очень доходчиво
Спасибо, WITH полезный прием) Скоро придем к вам на курс
Как всегда, хорошая и уверенная подача материала Спасибо за ваши уроки :)
@PrimeSoft
2 жыл бұрын
Спасибо Вам, Артём!
омг, ты, меня спас)! отличный гайд.
@PrimeSoft
Жыл бұрын
Спасибо! Очень приятно слышать!
Все отлично понятно. Хотя я это уже знал, но было приятно посмотреть. 👍
Все понятно! Суппер, спасибо, Илья)
Илья, спасибо, хорошее объяснение
Отличные туториалы, все понятно и наглядно показано
@PrimeSoft
10 ай бұрын
Спасибо Вам! Очень приятно!
классно рассказал, подробно и понятно, спасибо большое
Спасибо за информативно видео
@PrimeSoft
2 жыл бұрын
Спасибо Вам, что нашли время для отзыва!
Спасибо, объяснено все доходчиво
молодец , давай еще видео по sql . жду с нетерпением
Спасибо за еще один хороший урок!
@PrimeSoft
2 жыл бұрын
Здравствуйте, Константин! Спасибо Вам большое за внимание! Спасибо, что нашли время написать комментарий. Очень приятно!
спасибо! доходчиво объяснили👍
спасибо большое! теперь мне стало все предельно понятно)
Прекрасно, спасибо!)
Если нужно узнать как работает WITH, смотрите сразу с 9:20
Полезно, спасибо !
спасибо за видео!
@PrimeSoft
5 ай бұрын
Спасибо за внимание! :)
Хороший лектор - рекомендую.
Спасибо!
Благодарю за урок приятно слушать, жаль что курс заканчивается
Спасибо! :)
как всегда СУПЕР))
@PrimeSoft
2 жыл бұрын
Здравствуйте, Игорь! Большое спасибо Вам за внимание!
Красавчик
То что в универах 5 лет объясняют ,тут становится понятным за один урок!
@PrimeSoft
2 жыл бұрын
Спасибо Вам большое за такой отзыв!
@user-ry8rv2to5o
Жыл бұрын
Тебе пять лет объясняли что такое with ?) Советую проверить учреждение в котором ты находился;)
@1boxingclub378
Жыл бұрын
@@user-ry8rv2to5o А его и проверять не надо. Уже и так самый х...вуз на юге рф стал))
В данном случае t - это обычный подзапрос. Подозреваю, что WITH используется в более сложных запросах, где такой подзапрос выполняется многократно. И придумано это было для повышения производительности таких запросов. Подзапрос с WITH вычисляется только один раз, кэшируется, и большой запрос выполняется быстрее. Потому что не приходится получать результирующую выборку подзапроса каждый раз при обращении к ней.
@akss9245
10 ай бұрын
Значит при обновлении основной таблицы t не перевычисляется? В t будут старые данные?
@rayman4x4
10 ай бұрын
@@akss9245 зависит от БД. В Оракле будут данные на момент чтения, даже если сразу после выполнения селекта, который длится какое-то время, они изменились. В SQL Server зависит от того, как она настроена. Грубо говоря, мешают ли читатели писателям и наоборот. Если мешают, то никто их не изменит, пока не закончится селект. Надо смотреть уровни изолированности транзакций.
@akss9245
10 ай бұрын
@@rayman4x4 спасибо!
Спасибо. Очень интересно. Хотел бы послушать хороший разбор про JOIN и ORDER BY, а то везде такая мелкая выжимка, как это работает.
Музыка на фоне как будто я смотрю не только про группировку, а на фоге играет музыка какой-нибудь спортивной тренировки
Добрый! Спасибо за труд! Вопрос такой если в запросе grup by сделать ещё и сортировку по сумме, а в последнем условии сумма=(select сумма from rownum
@ic3shot_
2 жыл бұрын
нет
Можете сделать видео на тему перебора строк в Select? Бывает, что нужно вывести строки с определенными преобразованиями и условиями и приходится перебирать всё через While с использованием Offset fetch rows only(Пропуск строк)
можно же ORDER BY desc использовать или внутренний запрос на макс зарплату
Где найти скрипты для развертывания баз, которые используются как в данном уроке так и в каждом???
надо было наглядно показать два кейса: с with и без. так не успел понять что выиграю если буду юзать
@PrimeSoft
Ай бұрын
Добрый день! Приходите, пожалуйста, к нам на курс по SQL. Все постарался рассказать наглядно и подробно: prime-soft.biz/courses/sql
в чем преимущества With?!? можно таким же образом использовать подзапрос
почему нельзя было в конец запроса поставить букву t, далее навернуть select и так же обращаться например select t.name from(прошлый запрос)
@kekand0s141
2 жыл бұрын
или select t.* from(прошлый запрос)
@PrimeSoft
2 жыл бұрын
Здравствуйте! Тогда бы нам пришлось ещё раз писать тот же запрос в подзапросе (select max()...(прошлый запрос)). То есть один и тот же селект писали бы два раза.
Чем отличается with от create view?
@EdwardNorthwind
Жыл бұрын
with это временная про именованная таблица, она не будет храниться вечно, а просто кешируется для многократного обращения. А view это постоянное представление.
@HillClimbWorld
Жыл бұрын
@@EdwardNorthwind спасибо за разъяснение
А нельзя было составить такую конструкцию? WITH t AS( ........) SELECT MAX( SUM_PAYMENTS ) FROM t . Мне кажется так было бы немного проще.
@PrimeSoft
Жыл бұрын
Здравствуйте! Тогда бы мы знали только стоимость самого дорогого блюда, но на знали бы его названия.
@virtualvortex3146
Жыл бұрын
@@PrimeSoft понятно, дякую!
Много положительного уже сказано, но хотелось бы внести немного критики: 1. Чувствуется, что не хватает сценария. План явно есть, а вот подобрать слова "на лету" не получается. В результате много самоповторов и лишних ответвлений от темы. 2. По большому счёту 14 минут видео можно было уложить в минут 5-7, которые свелись бы к примерно следующему сценарию: - Всем привет, меня зовут _______, я являюсь ведущим разработчиком Oracle SQL в компании Prime Soft и рад приветствовать вас на нашем канале. Сегодня я расскажу вам про конструкцию WITH и как оптимизировать запросы к СУБД для ускорения работы вашего ПО. - Описание вашей задачи ("У нас есть таблица с начислениями, нужно получить сотрудников, которые получили максимальные начисления за период") - Как работает неоптимизированный запрос (я так понимаю, он предполагает вложенные запросы) и почему он является неоптимизированным (запрос дважды бегает в базу, что занимает время) - Как улучшить запрос (создать виртуальную таблицу t.* в оперативной памяти и бегать в неё, потому что она в быстром доступе и содержит меньше количество строк, поэтому её быстрее обрабатывать) - Надеюсь, вам понравилось. Кстати, наша компания занимается тем-то тем-то тем-то (если предполагает, что вас могут смотреть потенциальные клиенты-программисты, которым лень разбираться и проще нанять аутсорс под задачу), а также в описании вы можете найти ссылку на страницу вакансий, возможно, вам будет с нами интересно (если у вас есть вакансии). Всё, вот всё видео. 3. Зачем было показывать вариант с введением числа? 11:21 Это же прямое нарушение ТЗ "Определить сотрудников с максимальными выплатами за период". Признаться, чуть не закрыл в этот момент видео, решив, что на этом всё закончится. Показывать неправильно нужно только тогда, когда неправильный вариант кажется логичным решением, но имеет под собой какие-то минусы. А это - просто зря потраченные 2 минуты видео. 4. Звук. Звук очень тихий и очень высокий. И это не проблема голоса, это проблема микрофона и постобработки. Посмотрите среднестатистическое видео на ютубе и поймёте, какой уровень звука должен быть, чтобы ради просмотра вашего видео зрителю не приходилось крутить громкость. 5. Идея с вебкой отличная, но поскольку вы ничего гениального не показываете на неё, её можно сделать меньше, тогда не придётся её теребонькать по всему экрану, чтобы она ничего не загораживала. 6. Для справки: функция to_date есть в Oracle SQL (судя по тому, что я нашел), но, например, в MySQL её нет. А большинство среднестатистических зрителей подобного контента будут работать как раз либо с ним, либо с PostgreSQL. Учитывайте диалекты SQL и обязательно указывайте везде, где возможно, с каким диалектом работаете именно вы. А в идеале указывайте, какие функции делают то же самое в популярных диалектах, если там есть отличия. Кстати, информацию о ПО, СУБД и т.д. можно размещать в описании или в закрепленном комментарии. 7. 6:36 очень полезное уточнение, не спорю. Но во-первых, зачем вы группируете по ID и по ФИО? Сами же говорите, что эти поля всегда будут уникальны. А СУБД лишнюю проверку делать нужно. Во-вторых, вы, машущий руками, конечно, неплохая визуализация того, что происходит, но если не полениться и сделать анимацию/снять на видео, как рисуете на листочке/показать в рамках реального запроса - было бы в 100 раз понятнее и заняло бы раз в 5 меньше времени.
Я досмотрел и поставил лайк. Подача отвратительная( Попробуй писать сценарий, проговаривать его. Жду новые видео, удачи
Пока рассказывают, - понятно. Как только начинаешь сам выполнять то чувствуешь себя полным говном 😂
@user-vi1hg5ic5d
Жыл бұрын
Жиза
а если сразу написать в конце WHERE t.SUM_PAYMENTS = MAX(t.SUM_PAYMENTS) так не прошло бы?