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

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

Bazy danych i SQL

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

NULL powoduje jedne z najcichszych błędów w SQL, z zapytaniami, które działają bez błędów, a mimo to tracą wiersze lub wypaczają średnie. Dowiedz się, jak naprawdę zachowuje się wartość NULL, korzystając z przetestowanych przykładów i jak bezpiecznie sobie z tym poradzić.

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

Najważniejsze

  • NULL oznacza brakującą lub nieznaną wartość. To nie jest zero i nie jest to pusty ciąg znaków.
  • Sprawdź to za pomocą IS NULL, ponieważ = NULL nigdy niczego nie pasuje.
  • Większość obliczeń z NULL daje NULL, a WHERE zachowuje tylko wiersze, które są zdecydowanie prawdziwe.
  • Agregaty pomijają wartości NULL, co może po cichu zmienić średnią.

Zapytanie działa bez błędów i zwraca rozsądnie wyglądającą liczbę, ale brakuje wierszy, a średnia jest błędna. Bardzo często przyczyną są Wartości SQL NULL. NULL nie zachowuje się jak jakakolwiek normalna wartość, co zwraca uwagę zarówno początkujących, jak i doświadczonych programistów.

Ten przewodnik pokazuje dokładnie, jak zachowuje się NULL. Uruchomiliśmy każde zapytanie w SQLite 3.50 i pokazane wyniki pochodzą z tego uruchomienia. Większość tych zachowań to standardowy SQL i zauważamy, gdzie bazy danych się różnią, na przykład porządek sortowania NULL i sposób traktowania pustych ciągów przez Oracle.

Co to jest NULL?

NULL jest znacznikiem oznaczającym brak wartości lub jest ona nieznana. Nie jest to wartość w zwykłym sensie, więc są to różne rzeczy:

Wartość Znaczenie Przykład kolumny telefonu
NULL Nieznane lub nie podane Nie znamy numeru
'' Znana, pusta wartość tekstowa Przesłano jako puste
0 Liczba zero Nie dotyczy tekstu, ale jest prawdziwy w przypadku kwot

Różnica ma znaczenie szczególnie w przypadku kwot. Bonus 0 oznacza, że ​​dana osoba nie otrzymała nic. Bonus NULL oznacza, że ​​nikt jeszcze nie wie.

Przykładowa tabela

CREATE TABLE employees (
  id INT, name TEXT, phone TEXT, bonus INT, manager_id INT
);

INSERT INTO employees VALUES
 (1,'Meera','555-0101',500,NULL),
 (2,'Arjun',NULL,300,1),
 (3,'Sara','',NULL,1),
 (4,'Ravi',NULL,NULL,2);

Zauważ, że Sara ma pusty ciąg znaków dla telefonu, podczas gdy Arjun i Ravi mają NULL. Obydwoje są traktowani zupełnie inaczej.

Testowanie dla wartości NULL

Oto błąd, który na początku popełnia prawie każdy:

SELECT name FROM employees WHERE phone = NULL;
-- (no rows)

SELECT name FROM employees WHERE phone IS NULL;
-- Arjun
-- Ravi

SELECT name FROM employees WHERE phone IS NOT NULL;
-- Meera
-- Sara

Pierwsze zapytanie jest prawidłowym kodem SQL i nie powoduje błędu. Po prostu nic nie zwraca, ponieważ porównywanie czegokolwiek z wartością NULL nigdy nie jest prawdą. Sara pojawia się pod IS NOT NULL, ponieważ pusty ciąg znaków jest wartością rzeczywistą. Jednak w Oracle pusty ciąg znaków jest traktowany jako NULL, co jest godnym uwagi wyjątkiem.

Logika trójwartościowa

W większości języków programowania warunek jest prawdziwy lub fałszywy. SQL dodaje trzeci wynik: nieznany. Jeśli nie znasz wartości, nie możesz stwierdzić, czy jest ona równa 5. Nie wiadomo też, czy dwie nieznane wartości są równe, dlatego NULL = NULL nie jest prawdą. W naszym teście wszystkie zwróciły NULL:

SELECT NULL = NULL, NULL <> 1, 1 + NULL, 'a' || NULL;

-- NULL | NULL | NULL | NULL

Łączenie warunków odbywa się według ostrożnych zasad. Oto wyniki naszego testu, gdzie 1 to prawda, a 0 to fałsz:

Wyrażenie Wynik Dlaczego
PRAWDA I NULL NULL Zależy od nieznanej części
FAŁSZ I NULL Fałsz Fałsz, cokolwiek jest nieznane
PRAWDA LUB NULL Prawda Prawda, cokolwiek jest nieznane
FAŁSZ LUB NULL NULL Zależy od nieznanej części
NIE NULL NULL Przeciwieństwem nieznanego jest nieznane

Wiersze, które znikają z WHERE

WHERE przechowuje wiersz tylko wtedy, gdy jego warunek jest true. Wiersze, których wynik jest nieznany, są usuwane wraz z tymi, które są fałszywe. Prowadzi to do zaskakujących wyników:

SELECT name FROM employees WHERE phone <> '555-0101';

-- Sara

Można się spodziewać, że pojawią się Arjun i Ravi, ponieważ ich telefon z pewnością nie jest tym numerem. Ale ich telefon jest nieznany, więc wynik jest nieznany i znikają. Aby je uwzględnić, powiedz to wyraźnie: WHERE phone <> '555-0101' OR phone IS NULL. Negacja też nie pomaga:

SELECT name FROM employees WHERE NOT (bonus > 400);

-- Arjun

Sara i Ravi nie mają żadnego bonusu, więc nie pojawiają się ani w bonus > 400, ani w jego przeciwieństwie. Jest to kluczowa rzecz do zapamiętania: warunek i jego negacja nie zawsze obejmują każdy wiersz.

COALESCE: zapewnienie rozwiązania awaryjnego

COALESCE zwraca pierwszą wartość inną niż NULL na swojej liście i działa ona we wszystkich głównych bazach danych:

SELECT COALESCE(NULL, NULL, 'third', 'fourth');
-- third

SELECT name, COALESCE(phone, 'no phone') FROM employees;
-- Meera | 555-0101
-- Arjun | no phone
-- Sara  |
-- Ravi  | no phone

Sara nadal jest pusta, ponieważ pusty ciąg nie ma wartości NULL. Istnieją podobne funkcje, takie jak IFNULL w MySQL i SQLite, ISNULL w SQL Server i NVL w Oracle. COALESCE to przenośny wybór. Nasz wcześniejszy punkt dotyczący obliczeń ma zastosowanie również tutaj. bonus + 100 daje NULL dla każdego bez premii, więc napisz COALESCE(bonus, 0) + 100, jeśli traktowanie brakującego bonusu jako zera jest prawidłowe dla Twojej firmy.

NULLIF: zmień wartość na NULL

NULLIF(a, b) zwraca NULL, jeśli dwie wartości są równe, w przeciwnym razie zwraca a. Szczególnie przydatne są dwa zastosowania. Może wyczyścić wartości zastępcze:

SELECT name, NULLIF(phone, '') FROM employees WHERE id = 3;
-- Sara | NULL

SELECT name FROM employees
WHERE COALESCE(NULLIF(phone, ''), '') = '';
-- Arjun
-- Sara
-- Ravi

To drugie zapytanie to wygodny sposób na znalezienie wartości „brakujących lub pustych”. Może także ustrzec się przed dzieleniem przez zero, co powoduje błąd w wielu bazach danych:

SELECT total / NULLIF(quantity, 0) FROM sales;

Gdy quantity wynosi 0, daje to NULL zamiast kończyć się niepowodzeniem. W naszym teście SELECT 100 / NULLIF(0, 0) zwróciło NULL.

Agregaty pomijają wartość NULL

W tym miejscu wartość NULL powoduje największe szkody w raportach:

SELECT COUNT(*), COUNT(bonus), SUM(bonus), AVG(bonus),
       AVG(COALESCE(bonus, 0))
FROM employees;

-- 4 | 2 | 800 | 400.0 | 200.0
Wyrażenie Wynik Co to znaczy
COUNT(*) 4 Wszystkie rzędy
COUNT(bonus) 2 Tylko wiersze z premią
SUM(bonus) 800 Wartości NULL są ignorowane
AVG(bonus) 400 800 podzielone przez 2, a nie przez 4
ŚREDNIA(KOALESCJA(bonus, 0)) 200 800 podzielone przez 4

Jaka jest więc średnia premia, 400 czy 200? To zależy od tego, co oznacza NULL w twoich danych. Jeśli NULL oznacza „nie wypłacono żadnej premii”, to 200 jest prawidłowe. Jeśli oznacza to „jeszcze nie zdecydowano”, to 400 może mieć rację. Baza danych nie może podjąć tej decyzji za Ciebie, dlatego pytanie należy skierować do kogoś, kto zna się na branży.

Powiązana pułapka: SUM braku wartości to NULL, a nie 0. Gdy zsumowaliśmy tylko wiersze bez premii, otrzymaliśmy NULL, podczas gdy COUNT zwróciło 0. Kod aplikacji oczekujący liczby może się zawiesić, więc zawiń go: COALESCE(SUM(bonus), 0).

Wskazówka: Jeśli suma raportu wygląda nieprawidłowo, porównaj COUNT(*) z COUNT(column). Jakakolwiek przerwa między nimi od razu informuje, ile wartości NULL ma ta kolumna.

GROUP BY, sortowanie i DISTINCT

Chociaż wartości NULL są „nierówne” w porównaniach, operacje te traktują je jako jedną grupę:

SELECT bonus, COUNT(*) FROM employees GROUP BY bonus ORDER BY bonus;
-- NULL | 2
--  300 | 1
--  500 | 1

SELECT DISTINCT bonus FROM employees;
-- 500, 300, NULL

Zobacz SQL GROUP BY i HAVING, aby uzyskać więcej informacji na temat grupowania. Porządek sortowania to miejsce, w którym bazy danych naprawdę się różnią. SQLite i MySQL traktują NULL jako najmniejszą wartość, podczas gdy PostgreSQL i Oracle traktują ją jako największą. Zatem to samo ORDER BY bonus DESC może umieścić NULL na końcu w jednym i na pierwszym miejscu w drugim. PostgreSQL, Oracle i nowoczesny SQLite pozwalają to określić bezpośrednio, używając NULLS FIRST lub NULLS LAST.

Dołącza

Warunek złączenia przy użyciu = nigdy nie odpowiada NULL, więc wiersze z kluczem NULL wypadają z wewnętrznego złączenia:

SELECT e.name FROM employees e
JOIN employees m ON m.id = e.manager_id;
-- Arjun, Sara, Ravi    (Meera is gone)

SELECT e.name, m.name FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
-- Meera | NULL
-- Arjun | Meera
-- Sara  | Meera
-- Ravi  | Arjun

Meera nie ma menedżera, więc złączenie wewnętrzne po cichu usuwa ten wiersz. A LEFT JOIN zachowuje to, a także tworzy własne wartości NULL dla brakującej strony. Przeczytaj więcej w Wyjaśnienie złączeń SQL.

Pułapka NIE W

Pojedynczy NULL na liście NOT IN usuwa każdy wynik:

SELECT name FROM employees WHERE manager_id NOT IN (1);
-- Ravi

SELECT name FROM employees WHERE manager_id NOT IN (1, NULL);
-- (no rows)

Druga forma oznacza manager_id <> 1 AND manager_id <> NULL i ta ostatnia część nigdy nie może być prawdziwa. Jest to szczególnie niebezpieczne w przypadku podzapytań, gdzie wartość NULL może pojawić się niezauważona. Zamiast tego użyj NOT EXISTS, jak wyjaśniono w naszym samouczku dotyczącym podzapytań SQL. W pierwszym wyniku brakuje również Meery, ponieważ manager_id w tym wierszu ma wartość NULL.

Projektowanie z NULL

  • Domyślnie użyj NOT NULL. Zezwól na wartość NULL tylko wtedy, gdy rzeczywiście może brakować wartości.
  • Dodaj rozsądne wartości domyślne. Na przykład quantity INT NOT NULL DEFAULT 0.
  • Nie używaj wartości magicznych. Data 1900-01-01 lub wiek -1 zastępujący „nieznany” zafałszuje Twoje obliczenia.
  • Poznaj zachowanie UNIQUE. Większość baz danych dopuszcza kilka wartości NULL w kolumnie UNIQUE, a nasz test wstawił dwie wartości bez błędu. SQL Server jest wyjątkiem, ponieważ zwykle na to pozwala.
  • Pamiętaj, że klucz podstawowy nie może mieć wartości NULL. Zobacz klucz podstawowy a klucz obcy.
  • Testuj z wartościami NULL. Dane testowe bez wartości NULL ukrywają te błędy. Uwzględnij je celowo, tak jak w innych przypadkach Edge.

Podsumowanie

Traktuj wartość NULL jako „nieznaną”, a większość jej zachowań zacznie mieć sens: nieznane plus jeden jest nieznane, a nieznane równa się nieznane i nie wiadomo, czy jest prawdziwe. W tym tygodniu przejrzyj jeden ze swoich raportów. Sprawdź kolumny dopuszczające wartość null, używając COUNT(*) i COUNT(column), poszukaj dowolnego NOT IN i zdecyduj, co NULL powinno oznaczać w każdej średniej.

Najczęstsze pytania

Co to jest NULL w SQL?

NULL jest znacznikiem brakującej lub nieznanej wartości. Różni się od zera i od pustego ciągu znaków i wymaga specjalnego traktowania podczas porównań.

Dlaczego = NULL nie działa?

Porównanie czegokolwiek z wartością NULL daje raczej niewiadomą niż prawdę, więc WHERE odrzuca wiersz. Użyj IS NULL lub IS NOT NULL, aby to sprawdzić.

Jaka jest różnica między COALESCEi ISNULL?

COALESCE jest standardowym językiem SQL i akceptuje wiele argumentów. ISNULL jest specyficzny dla SQL Server i wymaga dwóch. W przypadku kodu przenośnego preferuj COALESCE.

Czy COUNT zawiera wartości NULL?

COUNT(*) zlicza wszystkie wiersze, łącznie z tymi z wartościami NULL. COUNT(kolumna) zlicza tylko wiersze, w których ta kolumna nie ma wartości NULL, co może dać mniejszą liczbę.

Czy NULL to to samo, co pusty ciąg znaków?

Nie, w większości baz danych. Pusty ciąg znaków to znana wartość bez znaków, a NULL oznacza nieznaną. Oracle jest godnym uwagi wyjątkiem, ponieważ traktuje puste ciągi jako NULL.

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