Jak działa WITH w SQL, czyli co to jest Common Table Expression (CTE)?

  Рет қаралды 4,244

nieinformatyk

nieinformatyk

Күн бұрын

✅Klauzula WITH SQL lub inaczej CTE SQL to bardzo przydatna funkcjonalność języka zapytań SQL pozwalają zwiększyć czytelność polecenia SELECT. Często jest traktowana jako lepsza alternatywa do podzapytania (subquery). W tym materiale wyjaśnię Ci jak SQL WITH działa, jakie ma wady i zalety oraz kiedy decydować się w zapytaniu SQL na CTE, a kiedy na standardowe podzapytanie.
🎁 ODBIERZ PREZENTY
1) Książka o tym, jak się przebranżowić na bazodanowca: promo.podstawybazdanych.pl/
2) Lista najczęstszych błędach programistów PL/SQL: promo.plsql.pl/
== 🔗 Przydatne linki z nagrania:==
📥kod z lekcji do pobrania: drive.google.com/file/d/13_46...
🎁Zapisy na kurs SQL: promo.mistrzsql.pl/
🏷️co to jest hurtownia danych: • Hurtownia danych - co ...
🏷️ścieżki dostępu do danych: • Jak przyśpieszyć zapyt...
🏷️co to jest hint optymalizatora sql? • Jak działają hinty opt...
== 👌 Polecam obejrzeć:==
Jak łączyć tabele w SQL instrukcją JOIN: • Łączenie tabel SQL, cz...
Co to jest hurtownia danych? • Hurtownia danych - co ...
== ⏱️ Plan odcinka:==
00:00 wprowadzenie do odcinka
00:43 co to jest WITH SQL / co to jest CTE SQL?
01:42 przykład with w zapytaniu SELECT (with vs subquery)
03:10 jak długo mamy dostęp do danych z CTE?
04:27 zalety CTE
11:26 wady CTE
16:42 cte vs podzapytanie
#bazodanowiec
== 👨‍💻 Poznaj mniej lepiej:==
* Moja strona: www.nieinformatyk.pl/
* Kod z odcinka: www.nieinformatyk.pl/pliki
* Facebook: / nieinformatyk
* Linkedin: / darekbutkiewicz
* Instagram: / nieinformatyk
* Twitter: / nieinformatyk
Zasubskrybuj mój kanał: kzfaq.info...
🏁 Witaj na moim kanale :)
Jestem programistą baz danych Oracle oraz developerem hurtownii danych (ETL). W tym miejscu dzielę się z oglądającymi wiedzą dotyczącą relacyjnych baz danych, praktycznych technik pisania SQL oraz optymalizacji kodu PL/SQL. Jeśli chcesz zdobyć praktyczną i rzetelną więdzę o bazach danych to trafiłeś na właściwe miejsce.
🚨 Więcej informacji o bazach danych znajdziesz na www.nieinformatyk.pl
📧 Masz pytanie, prośbę, sugestię? Pisz śmiało na kontakt@nieinformatyk.pl

Пікірлер: 31
@mariuszpodlecki3153
@mariuszpodlecki3153 Жыл бұрын
Fajny kanał, dopiero zaczynam przygodę z twoim kanałem, ale chętnie pooglądam filmy :) życzę dalszego rozwoju! :)
@nieinformatyk
@nieinformatyk Жыл бұрын
Dzięki, zapraszam do wspólnej nauki:)
@MsMalcolmX
@MsMalcolmX Жыл бұрын
Jak zwykle materiał na najwyższym poziomie :) Pozdrawiam ;)
@nieinformatyk
@nieinformatyk Жыл бұрын
dzięki Bartosz :)
@kate_z317
@kate_z317 Жыл бұрын
Dziękuję za ten film! :)
@nieinformatyk
@nieinformatyk Жыл бұрын
proszę bardzo :)
@martinnereg6769
@martinnereg6769 Жыл бұрын
Serwus Darek, w końcu znalazłem czas, aby obejrzeć Twoją lekcję. Cały czas miałem ją na liście otwartej z moim zadaniami. Teraz rozumiem czym jest CTE i powinienem go kojarzysz przede wszystkim z operacjami w hurtowniach danych. Uważam że lekcja bardzo interesująca tymbardziej, że w Internecie trudno znaleźć tak dobrze "spakowane" informacje o CTE. Pozdrawiam.
@nieinformatyk
@nieinformatyk Жыл бұрын
Dzięki Martin :)
@martinnereg6769
@martinnereg6769 Жыл бұрын
@@nieinformatyk Darek a czy nagrywałeś może lekcję o instrukcji MERGE? Dzięki za Twój czas.
@nieinformatyk
@nieinformatyk Жыл бұрын
@@martinnereg6769 Nie, jeszcze nie nagrywałem. Znajdzie się na pewno w kursie SQL: promo.mistrzsql.pl/
@KRusin-po8mu
@KRusin-po8mu 5 ай бұрын
Hej, dziękuję, film mega przydatny. Czy planujesz jeszcze rozwinąć temat struktur drzewiastych? (Connect by prior) :)
@nieinformatyk
@nieinformatyk 5 ай бұрын
W najbliższym czasie na YT raczej nie, bo mam już przygotowanych kilka tematów na kolejne materiały. W kursie SQL promo.mistrzsql.pl/ będzie ten temat kompleksowo poruszony: CONNECT BY (NOCYCLE), START WITH, ORDER BY SIBLINGS, LEVEL, CONNECT_BY_ISCYCLE, CONNECT BY_ISLEAF, PRIOR, CONNEC_BY_ROOT oraz SYS_CONNECT_BY_PATH. Porównamy też sobie te Oraclowe rozwiązanie z RECURSIVE CTE :)
@Siejec
@Siejec 7 ай бұрын
Super filmik! Naturalny bez fakeowych reakcji. 7:00 to dokładnie twarz jaką ja robię kiedy kwerenda nie działa jak byłem pewien, że powinna zadziałać
@nieinformatyk
@nieinformatyk 7 ай бұрын
Haha, staram się przygotowywać do nagrań, ale nie zawsze wychodzi idealnie w 100%:)
@Tylywizor
@Tylywizor Жыл бұрын
Temat na czasie dla mnie, dzisiaj przerobiłem zapytanie z CTE na tabelki tymczasowe #. Czas z 2 minut zszedł do 1 sec :D Nie wiem jakim cudem bo zapytanie nie było jakies skomplikowane.
@nieinformatyk
@nieinformatyk Жыл бұрын
Brawo :)
@MeggaFelipe
@MeggaFelipe Жыл бұрын
#zasieg CTE spoko, ale nerwy zawsze mam jak cos zakomentuje w kodzie żeby je pościć a później tego szukam w 300 linijkach.
@nieinformatyk
@nieinformatyk Жыл бұрын
Bywa upierdliwe. Dobrze dlatego nie przesadzać z tym cte i używać widoków i tabel zmaterializowanych. Kod robi się od razu krótszy.
@dariuszmion2764
@dariuszmion2764 6 ай бұрын
W kwestii Common Table Expression (CTE) przydało by się rozszerzenie materiału o zapytania rekurencyjne "WITH RECURSIVE" 😉
@nieinformatyk
@nieinformatyk 6 ай бұрын
Będę to dokładnie omawiał w kursie SQL: promo.mistrzsql.pl/ Porównamy też sobie RECURSIVE CTE z CONNECT BY w Oracle :)
@dariuszmion2764
@dariuszmion2764 6 ай бұрын
@@nieinformatyk Nie Pomijaj też MySQL i MariaDB jako bardzo popularnych silników bazodanowych ;)
@nieinformatyk
@nieinformatyk 6 ай бұрын
@@dariuszmion2764 w kursie omawiam każde zagadnienie na przykładzie Oracle, Sql Server i Postgres. Rozszerzanie tego na kilka kolejnych silników wydłużałoby jeszcze bardziej kurs, a tego chciałem uniknąć.
@markippo
@markippo Жыл бұрын
Myślę, że ta ciągła popularność cte w Oracle jest efektem problematycznej implementacji tabel tymczasowych. Nie używałem już Oracle/pl/sqla od dłuższego czasu, ale w 11g tymczasówki były fatalne i dalekie od into #tabelka. W sql server cte można spotkać bardzo rzadko albo jako efekt zaprzeszłości, wzięcia czegoś pierwszego lepszego lub bardzo specjalistycznych zastosowań. Sam korzystam z nich do prostej deduplilacji - w myśl zasady relacyjnej "modifikacja obiektu abstrakcyjnego, zmienia obiekt fizyczny", widziałem też bardziej analityczne zastosowania rekurencyjne, gdzie cte odwołuje się do cte. W bazach data warehouse być może zastosowanie dla cte jest większe, ale ich użycie jest zwykle bardzo problematyczne i dość niewydajne. Problemem jest jak zwykle ram, którego w HD jest zawsze za mało, a nierozważne użycie cte tylko ten problem potęguje. No i całość jest doraźna - każdorazowo zapytanie musi zostać wykonane, co przy pracach rozwojowych jest... Utrudnieniem... W zastosowaniach analitycznych unikałbym cte jak ognia, lepiej już tworzyć stałe, techniczne tabele, które po zakończeniu zostaną zdropowane. Większe zapytania wyraźnie korzystają na atomizacji, gdzie każde kolejne kroki są stosunkowo niespomplikowane, nie posiadają ani podzapytań (zwłaszcza w Select) , ani cte - korzystają z kroków poprzedzających. Uważam, że bazy Oracle bardziej nadają się do HD, pl/sql też jest dalece bardziej rozbudowany od t-sqla, ale nie rozumiem, dlaczego Oracle pokpiło tak te tymczasówki - to bardzo wygodne rozwiązanie.
@nieinformatyk
@nieinformatyk Жыл бұрын
Ja mam dobre doświadczenie z CTE w hurtowni, świetnie sobie radził i do tego upraszczał czytelność :) Trzeba było tylko uważać by nie nadużywać HINT-a MATERIALIZE bo łatwo zapchać pamięć, szczególnie, gdy zapisujemy w liście SELECT więcej kolumn niż de facto jest potrzebne.
@DenizDemir-wz5vq
@DenizDemir-wz5vq Жыл бұрын
#zasieg
@TomaszTomzik
@TomaszTomzik Жыл бұрын
A wg mnie hint "materialize" powinien być domyślny w with. Co do pierwszej wady to się nie zgodzę, trudno uznać za wadę złe użycie danego rozwiązania... Generalnie wady trochę wyciągnięte na siłę ;)
@nieinformatyk
@nieinformatyk Жыл бұрын
Dzięki za opinię Tomasz :) Moim zdaniem WITH służy do tworzenia logicznych bloków zapytań, które zapisane jako jeden SELECT są nieczytelne. Jeśli z kolei używamy WITH-a do prostego SELECT * FROM tabela to uzyskujemy efekt dokładnie odwrotny - zwiększamy niepotrzebnie ilość linii kodu i sprawiamy, że ktoś inny może się doszukiwać drugiego dna tego rowiązania -> "hm.. po co ktoś tu robił witha? Chodzi o plan zapytania? pewnie umie zrobić łączenie po kilku kolumnach więc po coś to jest " Ja przynajmniej miałbym takie rozkminy :) To trochę jakbyś użył funkcji analitycznej zamiast standardowego grupowania - tylko dlatego, że jest trendy i każdy pisze, że to zaawansowany SQL.
@nieinformatyk
@nieinformatyk Жыл бұрын
A co do materialize? Czemu tak uważasz? Jeśli ktoś do podzapytania z WITH-a będzie odnosił się tylko raz w SELEC-ie to na moje oko ten hint bardziej zaszkodzi, bo będzie narzut czasu na niepotrzebne tworzenie segmentu tymczasowego z danymi. Wtedy trzeba by pisać NOMATERIALIZE :)
@TomaszTomzik
@TomaszTomzik Жыл бұрын
@@nieinformatyk Materlizowanie czasami działa szybciej nawet jak się odwołujesz raz... na to wskazuje moje doświadczenie, ale nie dam sobie ręku uciąć.
@maciejszypula
@maciejszypula Жыл бұрын
Szacun za Kimballa na półce :)
@nieinformatyk
@nieinformatyk Жыл бұрын
Dobra ksiazka:)
Poziomy izolacji sql - wyjaśnienie dla laika + przykłady
27:36
nieinformatyk
Рет қаралды 3,7 М.
Dlaczego indeks przyśpiesza wykonywanie zapytań SQL?
17:48
nieinformatyk
Рет қаралды 4,1 М.
Red❤️+Green💚=
00:38
ISSEI / いっせい
Рет қаралды 79 МЛН
WHAT’S THAT?
00:27
Natan por Aí
Рет қаралды 13 МЛН
A little girl was shy at her first ballet lesson #shorts
00:35
Fabiosa Animated
Рет қаралды 3,1 МЛН
Mom's Unique Approach to Teaching Kids Hygiene #shorts
00:16
Fabiosa Stories
Рет қаралды 28 МЛН
SQL WITH czyli CTE   Common Table Expressions
15:22
KajoData
Рет қаралды 970
Transakcja sql - to co jest i jak działa w bazie danych?
18:47
nieinformatyk
Рет қаралды 10 М.
SQL CTEs (Common Table Expressions) - Why and How to Use Them
7:56
Database Star
Рет қаралды 28 М.
Jak wyświetlić i analizować dane z tabeli SQL?
18:10
nieinformatyk
Рет қаралды 3,8 М.
Indeks w bazie danych   co to jest i jak działa #62
16:35
nieinformatyk
Рет қаралды 26 М.
Projektowanie bazy danych w pigułce
22:57
nieinformatyk
Рет қаралды 12 М.
Ile zajmuje dostanie pierwszej pracy jako programist(k)a? 🕒
13:07
Jak zacząć programować?
Рет қаралды 152 М.
1$ vs 500$ ВИРТУАЛЬНАЯ РЕАЛЬНОСТЬ !
23:20
GoldenBurst
Рет қаралды 1,8 МЛН
iPhone socket cleaning #Fixit
0:30
Tamar DB (mt)
Рет қаралды 15 МЛН
Смартфон УЛУЧШАЕТ ЗРЕНИЕ!?
0:41
ÉЖИ АКСЁНОВ
Рет қаралды 1,2 МЛН
Новые iPhone 16 и 16 Pro Max
0:42
Romancev768
Рет қаралды 684 М.
НЕ БЕРУ APPLE VISION PRO!
0:37
ТЕСЛЕР
Рет қаралды 198 М.