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

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

Bazy danych i SQL

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

CASE WHEN to sposób pisania logiki „jeśli-to” w języku SQL. Poznaj oba formularze, a następnie używaj ich do etykiet, raportów w stylu przestawnym, niestandardowego sortowania i bezpiecznych aktualizacji, unikając jednocześnie pułapek NULL i porządkowania.

8 min czytania
Instrukcja SQL CASE WHEN: składnia, prawdziwe przykłady i typowe błędy

Najważniejsze

  • CASE zwraca wartość na podstawie pierwszego warunku, który jest prawdziwy.
  • Najpierw postaw najbardziej szczegółowe warunki, w przeciwnym razie te późniejsze mogą nigdy nie zostać osiągnięte.
  • W przypadku braku ELSE zwracane są niedopasowane wiersze NULL.
  • Wewnątrz SUM lub COUNT CASE zamienia jedno zapytanie w kompaktowy raport w stylu przestawnym.

Większość raportów wymaga pewnej logiki: oznaczaj zamówienia jako duże lub małe, zliczaj zamówienia opłacone i oczekujące obok siebie lub najpierw pokazuj pozycje pilne. SQL CASE WHEN obsługuje to wszystko bezpośrednio w zapytaniu i działa we wszystkich głównych bazach danych.

Uruchomiliśmy każde zapytanie w SQLite 3.50 i pokazane wyniki pochodzą z tego uruchomienia. CASE jest częścią standardowego SQL, więc w tych przykładach zachowuje się tak samo w PostgreSQL, MySQL, SQL Server i Oracle.

Co to jest PRZYPADEK KIEDY?

CASE jest wyrażeniem, a nie oddzielnym poleceniem. Ocenia warunki w kolejności i zwraca wartość, więc może przejść wszędzie tam, gdzie dozwolona jest wartość: w SELECT, WHERE, GROUP BY, ORDER BY lub wewnątrz funkcji. Zawsze kończy się na END.

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE fallback
END

Przykładowa tabela

CREATE TABLE orders (id INT, customer TEXT, total INT, status TEXT);

INSERT INTO orders VALUES
 (1,'Asha',1200,'paid'), (2,'Ben',300,'pending'),
 (3,'Asha',800,'paid'), (4,'Chitra',2500,'shipped'),
 (5,'Dev',150,'cancelled'), (6,'Ben',NULL,'pending');

Zauważ, że rząd 6 nie ma sumy. Ten rząd ma znaczenie później.

Przeszukany przypadek

Jest to bardziej elastyczna forma, ponieważ każdy WHEN ma swój własny pełny warunek:

SELECT id, total,
       CASE
         WHEN total >= 1000 THEN 'large'
         WHEN total >= 500 THEN 'medium'
         ELSE 'small'
       END AS size
FROM orders;

-- 1 | 1200 | large
-- 2 |  300 | small
-- 3 |  800 | medium
-- 4 | 2500 | large
-- 5 |  150 | small
-- 6 | NULL | small

Spójrz na ostatni rząd. Zamówienie 6 nie ma sumy, ale jest oznaczone jako „małe”. Obydwa porównania z wartością NULL nie były prawdziwe, więc padło na ELSE. Jak to naprawić, pokazujemy w sekcji NULL. Zawsze nadawaj wynikowi nazwę, używając AS, w przeciwnym razie możesz otrzymać niezręczną nazwę kolumny.

Prosty PRZYPADEK

Kiedy porównujesz jedną kolumnę ze stałymi wartościami, krótsza forma jest lepiej czytana:

SELECT id,
       CASE status
         WHEN 'paid' THEN 'Complete'
         WHEN 'shipped' THEN 'Complete'
         WHEN 'pending' THEN 'Waiting'
       END AS label
FROM orders;

-- 1 | Complete
-- 2 | Waiting
-- 3 | Complete
-- 4 | Complete
-- 5 | NULL
-- 6 | Waiting
Formularz Porównuje Czy można używać zakresów? Najlepsze dla
Proste Jedno wyrażenie równości Nie Mapowanie kodów na etykiety
Przeszukano Dowolny warunek na oddział Tak Zakresy, wiele kolumn, kontrole NULL

Porządek ma znaczenie

CASE zatrzymuje się na pierwszym prawdziwym warunku i jest to najczęstszy błąd logiczny. Zamień dwa warunki z naszego wcześniejszego zapytania:

SELECT id, total,
       CASE
         WHEN total >= 500 THEN 'medium'
         WHEN total >= 1000 THEN 'large'
         ELSE 'small'
       END AS size
FROM orders WHERE id IN (1, 4);

-- 1 | 1200 | medium
-- 4 | 2500 | medium

Teraz już nic nie może być „duże”. Suma 2500 to także co najmniej 500, więc pierwsza gałąź wygrywa, a druga nigdy nie zostaje osiągnięta. Nie pojawia się żaden błąd, tylko błędne etykiety. W przypadku zakresów najpierw umieść najbardziej restrykcyjny warunek lub zapisz całe zakresy, np. total >= 500 AND total < 1000.

Co się stanie, jeśli nie będzie WIĘCEJ?

W naszym prostym przykładzie CASE powyżej zamówienie 5 zostało anulowane i żaden oddział się tym nie zajął, więc wynik był NULL. Czasami właśnie tego chcesz, jak pokazano w następnej sekcji. Jednak przy tworzeniu etykiet zwykle lepsze jest jasne ELSE 'other', ponieważ uwidacznia nieoczekiwane wartości, zamiast pozostawiać puste miejsca w raporcie.

Wskazówka: Wszystkie gałęzie powinny zwracać ten sam typ. Mieszanie tekstu i liczb działa luźno w SQLite, ale bardziej rygorystyczne bazy danych, takie jak PostgreSQL, zgłoszą błąd lub spróbują przekonwertować wartości w niezamierzony sposób.

Raporty w stylu przestawnym z SUM

Jest to jeden z najbardziej przydatnych wzorców w codziennym języku SQL. Zawijanie CASE w agregację zamienia wiersze w kolumny, z jednym wierszem na klienta:

SELECT customer,
       SUM(CASE WHEN status = 'paid' THEN total ELSE 0 END) AS paid,
       SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders
FROM orders
GROUP BY customer
ORDER BY customer;

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

Jedno zapytanie daje teraz zarówno wypłacone przychody, jak i liczbę oczekujących zamówień, bez potrzeby stosowania oddzielnych zapytań lub łączeń. Wzorzec działa w prawie każdej bazie danych, w przeciwieństwie do dedykowanej składni PIVOT, którą oferują tylko niektóre. Jeśli GROUP BY jest dla Ciebie nowy, przeczytaj SQL GROUP BY i HAVING.

Liczy się warunkowo

COUNT pomija wartości NULL, więc CASE bez ELSE zlicza tylko pasujące wiersze:

SELECT COUNT(*) AS all_orders,
       COUNT(CASE WHEN status = 'paid' THEN 1 END) AS paid_orders,
       COUNT(CASE WHEN total >= 1000 THEN 1 END) AS large_orders
FROM orders;

-- 6 | 2 | 2

Bądź ostrożny: jeśli dodasz ELSE 0 wewnątrz COUNT, każdy wiersz będzie liczony, ponieważ 0 nie jest równe NULL. Użyj ELSE 0 z SUM i pomiń to z COUNT. PostgreSQL i SQLite obsługują również COUNT(*) FILTER (WHERE ...), co ładnie się czyta, ale nie jest dostępne wszędzie.

Grupowanie według CASE

Możesz tworzyć własne segmenty, a następnie podsumowywać je:

SELECT CASE WHEN total >= 1000 THEN 'large' ELSE 'other' END AS bucket,
       COUNT(*)
FROM orders
GROUP BY bucket
ORDER BY bucket;

-- large | 2
-- other | 4

Grupowanie według aliasów działa w SQLite, PostgreSQL i MySQL. SQL Server na to nie pozwala, więc musiałbyś powtórzyć całe wyrażenie lub najpierw umieścić zapytanie w CTE lub podzapytaniu.

Sortowanie niestandardowe za pomocą ORDER BY

Kolejność alfabetyczna rzadko jest tym, czego oczekuje firma. CASE umożliwia zdefiniowanie własnego zamówienia:

SELECT id, status FROM orders
ORDER BY CASE status
           WHEN 'pending' THEN 1
           WHEN 'paid' THEN 2
           ELSE 3
         END, id;

-- 2 | pending
-- 6 | pending
-- 1 | paid
-- 3 | paid
-- 4 | shipped
-- 5 | cancelled

Zamówienia oczekujące są na pierwszym miejscu, co jest przydatne w przypadku kolejki roboczej. Druga kolumna sortowania id utrzymuje wiersze w przewidywalnej kolejności w każdej grupie.

CASE w AKTUALIZACJI

CASE pozwala jednej instrukcji zastosować różne zmiany w różnych wierszach. W tym miejscu małe oczekujące zamówienia są oznaczane do sprawdzenia:

UPDATE orders
SET status = CASE
               WHEN status = 'pending' AND total < 500 THEN 'review'
               ELSE status
             END;

SELECT id, status FROM orders WHERE customer = 'Ben';

-- 2 | review
-- 6 | pending

ELSE status powoduje, że inne wiersze pozostają niezmienione. Pominięcie tego jest niebezpieczne, ponieważ niedopasowane wiersze zostaną ustawione na NULL. Bez klauzuli WHERE ta instrukcja dotyczy także każdego wiersza, dlatego w przypadku dużych tabel dodaj filtr i rozważ zawinięcie zmiany w transakcji, aby móc sprawdzić wynik przed zatwierdzeniem. Zauważ też, że rząd 6 nie uległ zmianie, ponieważ jego suma NULL nie spełniła total < 500.

Pułapki NULL

NULL powoduje dwa oddzielne problemy z CASE. Po pierwsze, prosta forma porównuje przy użyciu równości i nic nie jest równe NULL, nawet samo NULL:

SELECT CASE NULL WHEN NULL THEN 'matched' ELSE 'not matched' END;

-- not matched

Zatem CASE col WHEN NULL nigdy nie pasuje. Zamiast tego użyj szukanego formularza z IS NULL. Po drugie, jak widzieliśmy w przypadku rzędu 6, wartość NULL wymyka się z porównań i ląduje w ELSE. Rozwiązanie polega na tym, aby najpierw to sprawdzić:

SELECT id,
       CASE
         WHEN total IS NULL THEN 'unknown'
         WHEN total >= 1000 THEN 'large'
         ELSE 'other'
       END AS size
FROM orders WHERE id IN (1, 2, 6);

-- 1 | large
-- 2 | other
-- 6 | unknown

Zamówienie 6 otrzymuje teraz uczciwą etykietę. Nasz przewodnik po wartościach SQL NULL opisuje w pełni to zachowanie.

CASE vs inne opcje

Opcja Pracuje w Użyj go, kiedy
SPRAWA Wszystkie główne bazy danych Chcesz przenośnej logiki
ŁĄCZENIE Wszystkie główne bazy danych Potrzebujesz tylko rezerwy dla wartości NULL
IF() MySQL’a Prosty wybór w obie strony
IIF() Serwer SQL, SQLite Prosty wybór w obie strony
DECODE() Wyrocznia Starszy kod Oracle
Tabela przeglądowa Wszystko Mapowanie jest długie lub często się zmienia

Ta ostatnia opcja zasługuje na przemyślenie. Jeśli CASE rozrośnie się do trzydziestu gałęzi i pojawi się w pięciu zapytaniach, przenieś mapowanie do tabeli i dołącz do niej. Wtedy zmiana jest aktualizacją w jednym wierszu, a nie zmianą kodu w pięciu miejscach.

Typowe błędy

  • Zła kolejność warunków. Szeroki warunek najpierw ukrywa węższe.
  • Zapominanie END. To najczęstszy błąd składniowy.
  • Używając WHEN NULL. To nigdy nie pasuje, więc użyj WHEN col IS NULL.
  • Dodanie ELSE 0 do COUNT. Zlicza wszystkie wiersze.
  • Pomijanie ELSE w AKTUALIZACJI. Może wyczyścić wartości z wartością NULL.
  • Filtrowanie według CASE w WHERE. Może uniemożliwić użycie indeksu. Zobacz nasz przewodnik po optymalizacji zapytań SQL.

Podsumowanie

CASE WHEN to niewielka funkcja, która wykonuje ogromną pracę. Zapamiętaj trzy zasady: wygrywa pierwsza prawdziwa gałąź, niedopasowane wiersze stają się NULL bez ELSE, a NULL wymaga własnego sprawdzenia. Aby poćwiczyć, weź raport, który aktualnie tworzysz z kilkoma zapytaniami i spróbuj utworzyć go jako jedno zapytanie, używając SUM(CASE ...).

Najczęstsze pytania

Co robi CASE WHEN w SQL?

Dodaje logikę „jeśli-to” do zapytania. SQL sprawdza każdy warunek po kolei i zwraca wartość pierwszego, który jest prawdziwy, lub wartość ELSE, jeśli żaden nie jest spełniony.

Co się stanie, jeśli w instrukcji CASE nie będzie ELSE?

Wiersze, które nie spełniają żadnego warunku, zwracają wartość NULL. Jest to przydatne w COUNT, ale w etykietach i aktualizacjach może powodować puste miejsca lub utratę danych.

Czy mogę użyć CASE w klauzuli WHERE?

Tak, ponieważ jest to wyrażenie. Jednak zwykłe warunki AND i OR są zwykle jaśniejsze i częściej korzystają z indeksu.

Jaka jest różnica między prostym a przeszukiwanym CASE?

Simple CASE porównuje jedno wyrażenie ze stałymi wartościami w celu zapewnienia równości. Przeszukiwany CASE ma pełny warunek w każdym WHEN, więc może obsłużyć zakresy i kontrole NULL.

Czy instrukcje CASE można zagnieżdżać?

Tak, CASE może pojawić się wewnątrz innego. Głębokie zagnieżdżanie staje się jednak trudne do odczytania, więc rozważ połączenie warunków za pomocą AND lub użycie tabeli przeglądowej.

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ł →