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 М.
MS SQL Server Management Studio - CTE i Podzapytania
20:05
Altkom Akademia
Рет қаралды 2 М.
Now THIS is entertainment! 🤣
00:59
America's Got Talent
Рет қаралды 39 МЛН
Sigma girl and soap bubbles by Secret Vlog
00:37
Secret Vlog
Рет қаралды 8 МЛН
Llegó al techo 😱
00:37
Juan De Dios Pantoja
Рет қаралды 48 МЛН
Stay on your way 🛤️✨
00:34
A4
Рет қаралды 7 МЛН
MySQL: JOINS are easy (INNER, LEFT, RIGHT)
5:04
Bro Code
Рет қаралды 356 М.
Dlaczego indeks przyśpiesza wykonywanie zapytań SQL?
17:48
nieinformatyk
Рет қаралды 4,1 М.
SQL WITH czyli CTE   Common Table Expressions
15:22
KajoData
Рет қаралды 970
SQL CTEs (Common Table Expressions) - Why and How to Use Them
7:56
Database Star
Рет қаралды 28 М.
Normalizacja Baz Danych Dla Początkujących + Praktyka
21:08
nieinformatyk
Рет қаралды 15 М.
Pętle w Programowaniu PL/SQL - Simple Loop, While Loop i For Loop
28:55
Transakcja sql - to co jest i jak działa w bazie danych?
18:47
nieinformatyk
Рет қаралды 10 М.
Zapytania DML - czyli jak pracować z danymi w bazie danych
18:53
nieinformatyk
Рет қаралды 1,6 М.
Какой ноутбук взять для учёбы? #msi #rtx4090 #laptop #юмор #игровой #apple #shorts
0:18
Ноутбук за 20\40\60 тысяч рублей
42:36
Ремонтяш
Рет қаралды 68 М.
Что делать если в телефон попала вода?
0:17
Лена Тропоцел
Рет қаралды 2,4 МЛН
КРУТОЙ ТЕЛЕФОН
0:16
KINO KAIF
Рет қаралды 6 МЛН
Как бесплатно замутить iphone 15 pro max
0:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 4 МЛН