Уроки SQL. Иерархические (рекурсивные) запросы / Илья Хохлов

  Рет қаралды 34,228

Prime Soft

Prime Soft

Күн бұрын

При построении SQL запросов иногда может понадобиться соединение таблицы с самой собой. Если таблица содержит список сотрудников с указанием должностной подчиненности, или, например, филиалов и входящих в них под-филиалов, то можно вывести всю иерархию одним запросом, дописав всего лишь несколько слов! В этом уроке рассматриваются иерархические (рекурсивные) запросы.
Практический SQL файл к уроку Вы можете скачать по ссылке:
prime-soft.biz...
Спасибо за Ваше внимание! Напишите, пожалуйста, под видео Ваши комментарии!
#SQL #Базы_данных #ORACLE

Пікірлер: 52
@NadiaBird-i1g
@NadiaBird-i1g 11 ай бұрын
Низкий поклон, лучи благодарности!
@ОлегТумаков-щ1ц
@ОлегТумаков-щ1ц Жыл бұрын
Спасибо чувак, выручил!
@ЮрийБурдяев-л2я
@ЮрийБурдяев-л2я 2 жыл бұрын
Вроде бы курс по всем видам бд, но по факту данный вариант для mySql не подходит.
@levran4ik
@levran4ik 4 жыл бұрын
Полезно, но много лишних слов, долго ждать результата приходится...
@PrimeSoft
@PrimeSoft 4 жыл бұрын
Стараемся все разжёвывать) Чтобы как можно больше людей смогло понять! :) Спасибо за сообщение!
@owlbaseline
@owlbaseline 4 жыл бұрын
Чувак, воду заливаешь не хило. Второй видос смотрю и тебя занясят жёстко. Какой однорукий сотрудник? О чем ты ? Много воды
@irinakamilova8550
@irinakamilova8550 4 жыл бұрын
@@PrimeSoft Спасибо за разжёвывание! Наконец-то я поняла эту тему!))
@rustamakhmullaev5697
@rustamakhmullaev5697 2 жыл бұрын
Спасибо за отличный урок! подскажите пожалуйста, если б в таблице еще б было поле salary, как иерархически найти тех подчиненных у которых зарплата больше менеджера, либо найти менеджера у которого зарплата больше директора?
@shortscute7857
@shortscute7857 3 жыл бұрын
Когда постиг бинарное дерево. И можешь себя считать архитектором матрицы.
@Sibbarb9
@Sibbarb9 3 жыл бұрын
А че не сделал cte
@MrDemonSpeak
@MrDemonSpeak 4 жыл бұрын
Как contact by работает под капотом? Можно подробнее, как именно таблица джойнится сама на себя?
@ivannaboichshikov1367
@ivannaboichshikov1367 3 жыл бұрын
------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 15 | 6450 | 3 | 00:00:01 | | * 1 | CONNECT BY NO FILTERING WITH START-WITH | | | | | | | 2 | TABLE ACCESS FULL | SOTRUDNIKI | 15 | 6450 | 2 | 00:00:01 | ------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): ------------------------------------------ * 1 - access("T"."BOSSID"=PRIOR "T"."ID") * 1 - filter("BOSSID" IS NULL) Конкретно в данном случае - сначала вся таблица зачитывается в память, затем Oracle рекурсивно из зачитанных в память строк получает все строки где BOSS_ID =:ID
@vitalydokuchaev7028
@vitalydokuchaev7028 2 жыл бұрын
Где ты раньше был? Я уже две недели бьюсь над задачей по иерархической структуре БД
@PrimeSoft
@PrimeSoft 2 жыл бұрын
Виталий, приветствую! Уже два года назад для тебя тут выложил видео:) Спасибо, что все таки нашёл меня! :)
@amz2mov
@amz2mov 3 жыл бұрын
Слишком много пустой болтовни и сценического придыхания.
@kasa3172
@kasa3172 2 жыл бұрын
Херня всё это и является стандартом для оракл, лучше покажи если сможешь на примере посгре чтобы грамотно все результаты отображались!
@PassageGamesRus
@PassageGamesRus 9 ай бұрын
На постгресе то легко. Вот майскл... ну или 1кк записей и 16 уровней вложености.
@kamilqiyasov224
@kamilqiyasov224 4 жыл бұрын
А если программисты подчиняются ещё и директору, как это можно реализовать ?
@denis_victorovich_poroshin
@denis_victorovich_poroshin 3 жыл бұрын
Фамилии в таблице - умора )))
@PrimeSoft
@PrimeSoft 3 жыл бұрын
:)
@1boxingclub378
@1boxingclub378 2 жыл бұрын
"будете идти к босу" прям как в игре. Надо победить Боса =_))
@vadimsergeev7874
@vadimsergeev7874 2 жыл бұрын
Все замечательно разжевано, спасибо огромное!!
@docdisel1
@docdisel1 3 жыл бұрын
Почему в приложенном скрипте отрабатывает только первый инсерт? в результате добавляется только одна (первая) директорская запись, остальные нет.
@Paipai-o1y
@Paipai-o1y 3 жыл бұрын
Спасибо, всё очень понятно!
@PrimeSoft
@PrimeSoft 3 жыл бұрын
Спасибо Вам за отзыв!
@vsevidbl4298
@vsevidbl4298 10 ай бұрын
Наконец-то дельный видео-урок, все четко и понятно, сижу уже часа 4 не могу понять что к чему, спасибо за доступное объяснение!
@This_is_our_world
@This_is_our_world 3 жыл бұрын
Как можно выводя в обратном направлении от листочка к корню, оставить только самого низкого уровня и его непосредственного начальника. Пример: оставить Формат К.Б. и Праворукий П.И.
@НурланКадиров-я1ъ
@НурланКадиров-я1ъ 2 жыл бұрын
как вывести для всех сотрудников от листика к корню ?
@dimonthikify
@dimonthikify 2 жыл бұрын
указываешь BossID is not NULL
@mormone123
@mormone123 4 жыл бұрын
это можно же сделать через inner join ?
@PrimeSoft
@PrimeSoft 4 жыл бұрын
Только на один проход. На одну глубину вложенности.
@PassageGamesRus
@PassageGamesRus 9 ай бұрын
Крутой урок. Но толко как это будет работать на 1кк записях и 16 уровней вложености? Если расказываешь про такую структуру, то нужно предоставить варианты оптимизаци или альтернативные структуры. Частично лтрии помогает
@awesomebearaudiobooks
@awesomebearaudiobooks 7 ай бұрын
Что вы имеете в виду по лтрии?
@ci7alex1
@ci7alex1 4 жыл бұрын
Ух ты, жаль такого нет в SYBASE ASE. Кажется...
@НурланКадиров-я1ъ
@НурланКадиров-я1ъ 2 жыл бұрын
как называется обозначение таблицы, столбца (s, FIO)? Звучало как "алио".
@daniilsamodurov5423
@daniilsamodurov5423 Жыл бұрын
очень вовремя пишу, но вроде alias (псевдоним)
@fannygnomes9574
@fannygnomes9574 3 жыл бұрын
В Fierbird и MySQL нет Иерархических запросов. А жаль удобно.
@RFDSFOi
@RFDSFOi 3 жыл бұрын
А как же With Recursive?
@vadimsergeev7874
@vadimsergeev7874 2 жыл бұрын
Стоп, а когда мы идем от подчиненного к боссу, почему у нас дерево такое короткое из трех записей всего?
@PrimeSoft
@PrimeSoft 2 жыл бұрын
Здравствуйте! Потому, что запрос в этом случае выводит иерархию боссов относительно выбранного сотрудника.
@Andrzej3935
@Andrzej3935 2 жыл бұрын
Спасибо, всё очень хорошо обьяснено!
@vyacheslavvaleriia9308
@vyacheslavvaleriia9308 Жыл бұрын
Спасибо, но жаль что синтаксис рассказан исключительно в контексте СУБД Oracle. Хотелось бы увидеть разъяснение на основе общего синтаксиса SQL, подходящего под любую СУБД
@KvantVS
@KvantVS Жыл бұрын
Такие вещи как иерархические запросы во-первых не во всех диалектах SQL есть, во-вторых, очень сильно отличаются, не говоря уже об отличиях в самом синтаксе каждого диалекта. Ну и знать все диалекты SQL совершенно невозможно. Да, они очень похожи, 80% синтаксиса основных команд похожи, но нюансы, нюансы и ещё раз нюансы. Невозможно знать столько различий. Плюс к этому, здесь конкретно уроки по Oracle, т.к. это, наверное, самая объёмная СУБД в мире, с полноценным языком программирования PL/SQL.
@KvantVS
@KvantVS Жыл бұрын
Ну и главное - это было бы нерелевантно. Зачем вам MySQL, например, если вы учите Oracle? Зачем вам Oracle если вы устраиваетесь на DBA-PostgreSQL?
@awesomebearaudiobooks
@awesomebearaudiobooks 7 ай бұрын
@@KvantVSЯ выучил PostgreSQL, но при этом устроился на Oracle. Полезно знать различные концепты из разных диалектов, это также помогает и в принципе понимать программирование на том же Java например. Да и к тому же в некоторых проектах в любом случае придется переходить на другую СУБД поскольку она другая у нового заказчика.
@canniballissimo
@canniballissimo 2 жыл бұрын
это тот же вариант, что в T-SQL команда with?
@PrimeSoft
@PrimeSoft 2 жыл бұрын
Не совсем. Но с помощью WITH в MS SQL Server можно сделать рекурсию. Вот тут пример: kzbin.info/www/bejne/gGSnk61rl96Uq8U
@canniballissimo
@canniballissimo 2 жыл бұрын
@@PrimeSoft спасибо, тоже посмотрю, напомню себе 😊
@vincentvega1903
@vincentvega1903 3 жыл бұрын
+
@PrimeSoft
@PrimeSoft 3 жыл бұрын
Спасибо за комментарий :)
@leha5345
@leha5345 2 жыл бұрын
Слишком подробно
OYUNCAK MİKROFON İLE TRAFİK LAMBASINI DEĞİŞTİRDİ 😱
00:17
Melih Taşçı
Рет қаралды 12 МЛН
From Small To Giant Pop Corn #katebrush #funny #shorts
00:17
Kate Brush
Рет қаралды 70 МЛН
Как подписать? 😂 #shorts
00:10
Денис Кукояка
Рет қаралды 7 МЛН
ИНДЕКСЫ В БАЗАХ ДАННЫХ. СОБЕС В OZON.
33:59
Ваня Ио про разработку
Рет қаралды 56 М.
Главный секрет SQL! Как ускорить запросы в 1000 раз???
22:02
Андрей Иванов | Python
Рет қаралды 15 М.
SQL Join
18:51
Volodya Mozhenkov
Рет қаралды 167 М.
OYUNCAK MİKROFON İLE TRAFİK LAMBASINI DEĞİŞTİRDİ 😱
00:17
Melih Taşçı
Рет қаралды 12 МЛН