{<Z Kordian Zadrożny

AI, Strony WWW, Programowanie, Bazy danych

SQL od Zera, cz. 2: Jak filtrować dane (WHERE) i łączyć światy (JOIN)

utworzone przez | wrz 30, 2025 | Kurs SQL | 0 komentarzy

Wstęp: Od prostego pytania do precyzyjnego śledztwa

Witaj w drugiej części podróży po świecie SQL. W poprzedniej lekcji zrobiliśmy najważniejszy, pierwszy krok: nauczyliśmy się prosić bazę danych o pokazanie nam zawartości jej „segregatorów” za pomocą SELECT i FROM. Wyświetlaliśmy całe tabele lub wybrane kolumny.

Dzisiaj pójdziemy o krok dalej. W karate nie chodzi tylko o to, by uderzyć, ale by trafić w konkretny punkt. W SQL nie chodzi tylko o to, by zobaczyć dane, ale by zobaczyć dokładnie te dane, których potrzebujemy. Nauczymy się sztuki filtrowania, a potem zrobimy coś naprawdę potężnego – połączymy informacje z dwóch różnych tabel.

Część 1: WHERE – Twój filtr do danych

Wyobraź sobie, że nasza tabela Customers z poprzedniej lekcji ma tysiące wpisów. Wyświetlanie ich wszystkich mija się z celem, jeśli interesuje nas tylko jeden, konkretny klient lub klienci z jednego miasta.

Do tego właśnie służy klauzula WHERE. To jest warunek, który muszą spełnić dane, aby zostały wyświetlone. To jak powiedzieć swojemu asystentowi: „Pokaż mi listę klientów, ale tylko tych, którzy są z Londynu„.

Wróćmy do naszego narzędzia online: SQL Tryit Editor – W3Schools

Pamiętasz nasze ostatnie zapytanie? SELECT * FROM Customers;

Teraz dodajmy do niego warunek. Chcemy zobaczyć klientów tylko z Londynu. Zrobimy to tak:

SQL

SELECT * FROM Customers WHERE City = 'London';

Uruchom to zapytanie. Zobacz, co się stało? Lista została przefiltrowana. Widzisz tylko te wiersze, w których kolumna City ma wartość London.

Rozkład na części:

  • WHERE – czyli Gdzie: to słowo kluczowe, które rozpoczyna blok warunku. Zawsze piszemy je po FROM.
  • City = 'London' – to jest nasz warunek. Składa się z trzech części:
    1. Nazwa kolumny (City), którą sprawdzamy.
    2. Operator porównania (=), w tym przypadku „jest równe”.
    3. Wartość, z którą porównujemy ('London').

Ważna uwaga: Zauważ, że tekst 'London’ umieściłem w pojedynczych cudzysłowach (' '). W SQL każdy fragment tekstu (nazywany stringiem) musimy w ten sposób oznaczyć. Liczby natomiast piszemy bez cudzysłowów.

Sprawdźmy to na tabeli Products. Znajdźmy produkty, które kosztują mniej niż 20:

SQL

SELECT * FROM Products WHERE Price < 20;

Proste, prawda? Możesz używać różnych operatorów:

  • = – równa się
  • > – większe niż
  • < – mniejsze niż
  • >= – większe lub równe
  • <= – mniejsze lub równe
  • <> – różne od

Poćwicz sam: Spróbuj znaleźć pracowników (Employees), którzy mają EmployeeID większe od 5.

Ale to nie wszystko. Te operatory są matematyczne. Jeśli chcesz wyszukać dane tekstowe, i wybrać no wszystkie miasta zaczynające się, albo zawierające jakiś tekst, to wtedy używamy operatora LIKE – czyli jak.

SQL

SELECT * FROM Customers WHERE City like '%id%';

Powyżej znajdziemy wszystkie, gdzie w słowie miasto występuje id a znak procenta oznacza, dowolne inne znaki w dowolnej długości.

Czy, chcemy miasta zaczynające się od litery K?: City LIKE 'K%’;

A kończące się na K?: LIKE '%k’;

Z WHERE (=, <, <=,>,>=, <>) i LIKE będziecie korzystać bardzo często!

Część 2: JOIN – Gdy jeden segregator to za mało

Do tej pory pracowaliśmy w obrębie jednej tabeli – jednego „segregatora”. To wygodne, ale w rzeczywistości dane są często powiązane i przechowywane w różnych miejscach. To co łączy te arkusze w różnych segregatorach to relacje pomiędzy nimi.

DLATEGO TE BAZY NAZYWAJAJĄ SIĘ RELACYJNYMI!

Wyobraźmy sobie prosty scenariusz: Mamy segregator Customers (Klienci) i osobny segregator Orders (Zamówienia). W segregatorze Orders jest zapisane, kto złożył zamówienie, ale tylko pod postacią numeru ID klienta (CustomerID). Pełna nazwa tego klienta jest w segregatorze Customers.

Skomplikowane?

Zobacz, nie tak bardzo

W zamówieniach mam numerek który wskazuje na klienta. to jego ID czyli unikalny numer.

Każdy rekord, czyli wiersz w bazie, zazwyczaj ma taką unikalną wartość. A tu właśnie mamy relację, gdzie jeden klient, ma wiele zamówień. ten z numerem 2 ma na tej liście jedno, ale już 4 ma dwa zamówienia a 5 aż trzy.

Co jeśli chcemy zobaczyć listę zamówień, ale obok każdego numeru zamówienia chcemy widzieć pełną nazwę klienta, a nie tylko jego ID? Musimy zajrzeć do obu segregatorów jednocześnie.

Do tego właśnie służy JOIN – połącz albo złącz.

Zobaczmy, jak to wygląda w praktyce. Chcemy wyświetlić numer zamówienia (OrderID) z tabeli Orders oraz nazwę klienta (CustomerName) z tabeli Customers.

SQL

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

Uruchom to zapytanie. Wynik może Cię zaskoczyć. Otrzymaliśmy nową, wirtualną tabelę z dwiema kolumnami, które pochodzą z dwóch różnych źródeł!

I teraz mnie zapytasz, co to jest to INNER.

Na razie, żeby nie było za dużo i za szybko wiedz tylko, iż narzędzie na W3shools używa bardzo prostej, i starej bazy gdzie pewne rzeczy trzeba pisać wprost. INNER jest typem połączenia dwóch tabel, który we wszystkich współczesnych bazach jest domyślny, i pisze się samo JOIN. a więc w MS SQL, PosgreSQL, ORACLE, MYSQL a nawet SQLite nie musisz pisać INNER przed JOIN:)

Rozłóżmy to potężne polecenie na spokojnie:

  1. SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
    • Mówimy, co chcemy zobaczyć. Ponieważ bierzemy dane z dwóch tabel, to trzeba wskazać o kolumnę z której tabeli nam chodzi( NazwaTabeli.NazwaKolumny). (ps. Można a nawet trzeba to sobie upraszać, ale o tym później)
  2. FROM Orders
    • Zaczynamy od naszej głównej tabeli, czyli Orders.
  3. INNER JOIN Customers
    • Mówimy SQL: „A teraz dołącz do tego dane z tabeli Customers„.
  4. ON Orders.CustomerID = Customers.CustomerID
    • To najważniejsza część. To jest instrukcja łączenia. Mówimy: „Połącz wiersz z tabeli Orders z wierszem z tabeli Customers TYLKO WTEDY, GDY wartość w kolumnie CustomerID jest w obu wierszach identyczna”. Gdyby nie to, połączyły by się wszystkie kolumny z innymi kolumnami z drugiej tabeli i był by disaster.

JOIN na początku może wydawać się skomplikowany. To normalne. Najważniejsze jest zrozumienie koncepcji: szukamy wspólnego punktu zaczepienia (klucza) między dwiema tabelami, aby móc połączyć zawarte w nich informacje.

Podsumowanie i zadanie na dziś

Dziś opanowaliśmy dwie niezwykle potężne koncepcje:

  1. Filtrowanie danych za pomocą WHERE, aby znaleźć dokładnie to, czego szukamy.
  2. Łączenie tabel za pomocą JOIN...ON, aby czerpać informacje z wielu źródeł jednocześnie.

To fundamenty, na których opiera się 90% codziennej pracy z danymi.

Twoje zadanie na dziś: Korzystając z poznanej wiedzy, spróbuj napisać zapytanie, które wyświetli nazwy produktów (ProductName) oraz nazwy dostawców (SupplierName), którzy je dostarczają. Podpowiedź: potrzebne tabele to Products i Suppliers. Jaka kolumna może być ich wspólnym „kluczem”?

Daj znać w komentarzach, jak Ci poszło!

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Share This

Share this post with your friends!