Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

  1. Strona główna
  2. Blog
  3. Bazy danych i SQL

Bazy danych i SQL

Samouczek dotyczący podzapytań SQL: Typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Podzapytanie to zapytanie zawarte w innym zapytaniu. Poznaj każdy typ i jego miejsce, zrozum właściwie skorelowane podzapytania i unikaj pułapki NOT IN, która po cichu nie zwraca żadnych wierszy.

9 min czytania
Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Najważniejsze

  • Podzapytanie to zapytanie zagnieżdżone w innym, a zapytanie zewnętrzne wykorzystuje jego wynik.
  • Podzapytania mogą pojawiać się w WHERE, FROM, SELECT i HAVING.
  • skorelowane podzapytanie odnosi się do zewnętrznego wiersza, więc jest logicznie oceniane w każdym wierszu.
  • Preferuj NOT EXISTS do NOT IN, gdy możliwe są wartości NULL.

Odpowiedź na niektóre pytania wymaga dwóch kroków. „Które zamówienia są powyżej średniej?” wymaga najpierw znalezienia średniej, a następnie porównania z nią każdego zamówienia. Podzapytania SQL pozwalają zapisać oba kroki jako jedną instrukcję.

W tym samouczku omówiono każdy typ przy użyciu dwóch małych tabel. Uruchomiliśmy te zapytania w SQLite 3.50 i pokazane wyniki pochodzą z tego uruchomienia. Standardowa składnia podzapytań jest szeroko obsługiwana, a my wskazujemy miejsca, w których bazy danych się różnią.

Co to jest podzapytanie?

Podzapytanie, zwane także zapytaniem wewnętrznym lub zagnieżdżonym, to instrukcja SELECT umieszczona wewnątrz innej instrukcji, w nawiasach okrągłych. Koncepcyjnie zapytanie wewnętrzne generuje wynik, który następnie wykorzystuje zapytanie zewnętrzne.

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

Przykładowe tabele

CREATE TABLE customers (id INT, name TEXT, city TEXT);
CREATE TABLE orders (id INT, customer_id INT, total INT);

INSERT INTO customers VALUES
 (1,'Asha','Pune'), (2,'Ben','Delhi'), (3,'Chitra','Pune'), (4,'Dev','Goa');

INSERT INTO orders VALUES
 (101,1,1200), (102,1,800), (103,2,300), (104,3,2500), (105,3,100);

Pamiętaj, że Dev nie ma żadnych rozkazów. Ten szczegół ma znaczenie w przypadku kilku przykładów poniżej.

Rodzaje podzapytań w skrócie

Wpisz Powroty Typowa lokalizacja Typowi operatorzy
Skalar Jedna wartość WHERE, SELECT =, >, <
Wielorzędowe Jedna kolumna, wiele wierszy GDZIE IN, ANY, ALL
Tabela (pochodna) Wiele kolumn i wierszy OD Używany jak stół
Skorelowane Zależy od zewnętrznego rzędu WHERE, SELECT Dowolny i EXISTS

Podzapytania skalarne

Podzapytanie skalarne zwraca dokładnie jedną wartość, więc można go używać wszędzie tam, gdzie pojedyncza wartość ma sens. Oto wcześniejsze zapytanie wraz z jego wynikiem. Średnia wszystkich zamówień wynosi 980:

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

-- 101 | 1200
-- 104 | 2500

Nie można było napisać WHERE total > AVG(total), ponieważ agregaty nie są dozwolone bezpośrednio w WHERE. Podzapytanie rozwiązuje ten problem, obliczając wartość osobno.

Co się stanie, jeśli podzapytanie „skalarne” zwróci kilka wierszy? Większość baz danych, w tym PostgreSQL, MySQL i SQL Server, zgłasza błąd. SQLite nie. W naszym teście po cichu użył tylko pierwszego wiersza, co mogło ukryć prawdziwy błąd, więc nie polegaj na tym zachowaniu.

W i NIE W

Gdy wewnętrzne zapytanie zwróci listę, użyj IN. Znajduje to klientów z co najmniej jednym zamówieniem powyżej 1000:

SELECT name FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

-- Asha
-- Chitra

NOT IN robi odwrotnie i znajduje klientów, którzy nigdy nie zamawiali:

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);

-- Dev

To działa tutaj, ale NOT IN ma niebezpieczny przypadek Edge, który omówimy poniżej.

Podzapytania w OD

Podzapytanie w FROM działa jak tabela tymczasowa, często nazywana tabelą pochodną. Jest to przydatne, gdy trzeba dokonać dwukrotnej agregacji, jak w przypadku tego zapytania dotyczącego średnich wydatków na klienta w każdym mieście:

SELECT city, AVG(spent) AS avg_spent
FROM (
  SELECT c.city, SUM(o.total) AS spent
  FROM customers c
  JOIN orders o ON o.customer_id = c.id
  GROUP BY c.id, c.city
) AS per_customer
GROUP BY city;

-- Delhi |  300.0
-- Pune  | 2300.0

Zapytanie wewnętrzne sumuje każdego klienta, a zapytanie zewnętrzne uśrednia te sumy. Nadawanie tabeli pochodnej aliasu jest dobrym zwyczajem, ponieważ wymagają tego niektóre bazy danych. Jeśli GROUP BY jest dla Ciebie nowy, zobacz GROUP SQL BY i HAVING.

Podzapytania w SELECT

Podzapytanie skalarne może również dodać kolumnę obliczeniową. Ten liczy zamówienia na klienta:

SELECT name,
       (SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.id) AS order_count
FROM customers c;

-- Asha   | 2
-- Ben    | 1
-- Chitra | 2
-- Dev    | 0

Dev pojawia się z zerem. Sprzężenie wewnętrzne spowodowałoby całkowite porzucenie Deva, ponieważ Dev nie ma pasujących wierszy. Ten sam wynik można uzyskać za pomocą LEFT JOIN i GROUP BY, co wyjaśniamy w Wyjaśnienie złączy SQL.

Skorelowane podzapytania

Poprzedni przykład jest również skorelowany, ponieważ zapytanie wewnętrzne odwołuje się do c.id z zapytania zewnętrznego. Nieskorelowane podzapytanie może działać samodzielnie. Skorelowany nie może, ponieważ zależy od wartości z bieżącego zewnętrznego wiersza.

Spowoduje to wykrycie zamówień powyżej średniej tego samego klienta:

SELECT o.id, o.customer_id, o.total
FROM orders o
WHERE o.total > (
  SELECT AVG(i.total)
  FROM orders i
  WHERE i.customer_id = o.customer_id
);

-- 101 | 1 | 1200
-- 104 | 3 | 2500

Oto jak to przeczytać. Dla zamówienia 101 wewnętrzne zapytanie uśrednia zamówienia klienta 1 (1200 i 800), co daje 1000. Ponieważ 1200 jest większe, wiersz zostaje zachowany. Dla rzędu 102 obowiązuje ta sama średnia, ale 800 nie jest większa, więc zostaje odrzucona. Pojedyncze zamówienie Klienta 2 jest równe jego własnej średniej, więc ono również zostaje odrzucone.

Funkcja Nieskorelowane Skorelowane
Używa zewnętrznych wartości zapytania? Nie Tak
Czy może biegać samodzielnie? Tak Nie
Logiczne wykonanie Raz Raz na zewnętrzny rząd
Ryzyko wydajności Zwykle niski Może być wysoka na dużych stołach

„Raz na wiersz” opisuje logikę, a optymalizatory zapytań często przepisują je na coś znacznie bardziej wydajnego. Mimo to warto zbadać wolno skorelowane podzapytanie. Indeks w wewnętrznej kolumnie, tutaj orders.customer_id, może mieć duże znaczenie. Zobacz Wyjaśnienie indeksów SQL.

ISTNIEJE I NIE ISTNIEJE

EXISTS zadaje pytanie tak lub nie: czy zapytanie wewnętrzne zwraca co najmniej jeden wiersz? Może zatrzymać się na pierwszym meczu, a to, co w środku wybierzesz, nie ma znaczenia, dlatego ludzie często piszą SELECT 1.

SELECT c.name FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Asha, Ben, Chitra

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Dev

Pułapka NOT IN NULL

Jest to jeden z najczęstszych błędów podzapytań. Stworzyliśmy tabelę z jednym prawdziwym identyfikatorem i jednym NULL, a następnie uruchomiliśmy dla niej oba formularze:

CREATE TABLE r (customer_id INT);
INSERT INTO r VALUES (1), (NULL);

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM r);
-- (no rows at all)

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM r WHERE r.customer_id = c.id);
-- Ben, Chitra, Dev

Dlaczego pierwszy nic nie zwraca? id NOT IN (1, NULL) oznacza id <> 1 AND id <> NULL. Każde porównanie z NULL jest raczej nieznane niż prawdziwe, więc cały warunek nigdy nie może być prawdziwy. Nie pojawia się żaden komunikat o błędzie ani ostrzeżenie, jest po prostu pusty wynik, który wygląda wiarygodnie.

Wskazówka: Domyślnie użyj NOT EXISTS dla zabezpieczeń przed połączeniami. Jeśli używasz NOT IN, dodaj WHERE customer_id IS NOT NULL wewnątrz podzapytania.

Podzapytanie vs JOIN vs CTE

Wiele zapytań można zapisać na więcej niż jeden sposób. Wcześniej znaleźliśmy klientów z dużym zamówieniem za pomocą IN. Oto ten sam wynik z połączeniem:

SELECT DISTINCT c.name FROM customers c
JOIN orders o ON o.customer_id = c.id AND o.total > 1000;

-- Asha
-- Chitra

Zwróć uwagę na DISTINCT. Sprzężenie może generować duplikaty, jeśli klient ma kilka dopasowań, podczas gdy IN i EXISTS nie.

Użyj Kiedy
DOŁĄCZ Potrzebujesz kolumn z obu tabel
W lub ISTNIEJE Wystarczy filtrować według tego, czy istnieje dopasowanie
Tabela pochodna Najpierw musisz agregować, a to pozostaje krótkie
CTE Logika składa się z kilku kroków lub jest używana więcej niż raz
Funkcja okna Potrzebujesz figurki na grupę obok każdego rzędu

Wydajność różni się w zależności od bazy danych i danych, a nowoczesne optymalizatory często tworzą podobne plany. Więc najpierw wybierz najczystszą formę, a następnie sprawdź EXPLAIN, jeśli okaże się, że jest powolny.

Typowe błędy

  • Użyj = z wynikiem wielowierszowym. Użyj IN lub upewnij się, że wewnętrzne zapytanie zwróci jeden wiersz.
  • Użycie NOT IN w kolumnie dopuszczającej wartość null. Możesz po cichu utracić każdy wiersz.
  • Używanie niejasnych aliasów. W skorelowanych zapytaniach kwalifikuj każdą kolumnę, w przeciwnym razie może ona zostać powiązana z niewłaściwą tabelą.
  • Głębokie zagnieżdżanie. Trzy poziomy są trudne do odczytania, więc przekonwertuj je na CTE.
  • Dodanie ORDER BY do środka. Zwykle nie ma to wpływu na wynik zewnętrzny i niektóre bazy danych je odrzucają.

Podsumowanie

Podzapytania są naturalnym sposobem wyrażania pytań dwuetapowych. Zacznij od podzapytań skalarnych i IN, a następnie przećwicz podzapytania skorelowane, rozumując po jednym zewnętrznym wierszu na raz. I pamiętaj o NOT EXISTS, ilekroć możliwe są wartości NULL. Aby poćwiczyć, napisz jedno pytanie na trzy sposoby, z podzapytaniem, złączeniem i CTE, a następnie porównaj oba wyniki i czytelność.

Najczęstsze pytania

Co to jest podzapytanie w SQL?

Podzapytanie to instrukcja SELECT zagnieżdżona w innej instrukcji SQL, ujęta w nawiasy. Instrukcja zewnętrzna wykorzystuje swój wynik jako wartość, listę lub tabelę.

Co to jest skorelowane podzapytanie?

Jest to podzapytanie, które odwołuje się do kolumny z zapytania zewnętrznego. Zależy od bieżącego zewnętrznego rzędu, więc nie może działać samodzielnie.

Co jest szybsze, podzapytanie czy JOIN?

Zależy to od bazy danych i danych, a optymalizatory często tworzą podobne plany. Najpierw napisz najczystszą wersję, a następnie porównaj plany wykonania, jeśli wydajność ma znaczenie.

Jaka jest różnica między IN i EXISTS?

IN porównuje wartość z listą wyników. EXISTS sprawdza, czy w ogóle został zwrócony jakikolwiek wiersz. Zachowują się inaczej w przypadku wartości NULL, gdy są zanegowane.

Czy podzapytanie może zwrócić wiele kolumn?

Tak, gdy jest używany w FROM jako tabela pochodna, a niektóre bazy danych umożliwiają również porównania wierszy. Podzapytanie skalarne musi zwrócić tylko jedną kolumnę i jeden wiersz.

Ucz się dalej

Pracuj z Stack Quora

Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?

Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.

Czytaj dalej

Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój

Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.

Sztuczna inteligencja

Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć

Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…

Przeczytaj artykuł →
DevOps

Wyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo

Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429

Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …

Przeczytaj artykuł →
Automatyzacja testów

Wyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią

Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…

Przeczytaj artykuł →
Testowanie oprogramowania

Wyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%

Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…

Przeczytaj artykuł →
Bazy danych i SQL

DELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich

DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami

Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…

Przeczytaj artykuł →
Tworzenie oprogramowania

Interfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora

Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…

Przeczytaj artykuł →
Tworzenie oprogramowania

Python *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami

Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…

Przeczytaj artykuł →
Tworzenie oprogramowania

Funkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać

Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…

Przeczytaj artykuł →
Sztuczna inteligencja

Kim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić

Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…

Przeczytaj artykuł →
DevOps

Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…

Przeczytaj artykuł →
DevOps

Woluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób

Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…

Przeczytaj artykuł →
Automatyzacja testów

TDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich

TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…

Przeczytaj artykuł →
Testowanie oprogramowania

Testowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady

Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać

Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…

Przeczytaj artykuł →
Bazy danych i SQL

Instrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy

SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…

Przeczytaj artykuł →
Tworzenie oprogramowania

Co to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania

Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami

Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom

Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …

Przeczytaj artykuł →
Sztuczna inteligencja

Czym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa

Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…

Przeczytaj artykuł →
DevOps

Wdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru

Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…

Przeczytaj artykuł →
Automatyzacja testów

Niestabilne testy: co je powoduje i jak je naprawić na dobre

Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…

Przeczytaj artykuł →
Testowanie oprogramowania

Load Testing vs Stress Testing: Differences, Metrics and k6 Examples

Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…

Przeczytaj artykuł →
Testowanie oprogramowania

Przypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich

Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…

Przeczytaj artykuł →
Bazy danych i SQL

Optymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją

Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…

Przeczytaj artykuł →
Bazy danych i SQL

SQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność

SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…

Przeczytaj artykuł →
Tworzenie oprogramowania

Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…

Przeczytaj artykuł →
Tworzenie oprogramowania

Klasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami

Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu

Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…

Przeczytaj artykuł →
DevOps

Polecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami

Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…

Przeczytaj artykuł →
Automatyzacja testów

Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór

Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…

Przeczytaj artykuł →
Testowanie oprogramowania

Partycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach

Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…

Przeczytaj artykuł →
Testowanie oprogramowania

Ważność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady

Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…

Przeczytaj artykuł →
Bazy danych i SQL

Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji

Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…

Przeczytaj artykuł →
Tworzenie oprogramowania

Git merge vs rebase: różnice, przykłady i kiedy czego używać

Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.

Przeczytaj artykuł →
Tworzenie oprogramowania

Python list comprehension: składnia, przykłady i kiedy jej unikać

Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…

Przeczytaj artykuł →
Bazy danych i SQL

SQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)

Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…

Przeczytaj artykuł →