W budowie
WHERE złożone, ORDER BY, LIMIT oraz relacje INNER/LEFT JOIN

Część 12 · SQL: filtrowanie, sortowanie i łączenie tabel — kurs PHP INF.03

Część 12 kursu PHP pod kątem INF.03: SQL: filtrowanie, sortowanie i łączenie tabel. Teoria w skrócie i 16 ćwiczeń z automatycznym sprawdzaniem.

  • 45 min
  • 16 slajdów
  • Notatki nauczyciela: N
  • Strona modułu: otwórz
Plan · 45 min

Co dziś robimy

  1. 12 minFiltrowanie warunkiem WHERE Do wyszukiwania fragmentu tekstu służy LIKE z znakiem procentu: WHERE imie LIKE 'A%'…
  2. 12 minSortowanie i limitowanie wyniku LIMIT ogranicza liczbę wierszy: LIMIT 5 daje pięć pierwszych, a LIMIT 10, 5 — pięć…
  3. 12 minŁączenie tabel JOIN Aliasy skracają zapis i pozwalają odróżnić kolumny o tych samych nazwach.
  4. 4 minĆwiczenia 16 zadań w module — wybierz 3–4 na lekcję
  5. 5 minPodsumowanie bilet wyjściowy i zadanie domowe
Atom 1 z 4 · ~12 min

Filtrowanie warunkiem WHERE

WHERE ogranicza wynik do wierszy spełniających warunek. Warunki łączymy słowem AND lub OR , a wartości tekstowe bierzemy w apostrofy.

  • Do wyszukiwania fragmentu tekstu służy LIKE z znakiem procentu: WHERE imie LIKE 'A%' znajdzie imiona zaczynające się na A, a '%a%' — zawierające literę a.
  • Wartość z formularza trzeba zabezpieczyć przed wstrzyknięciem — najlepiej zapytaniem przygotowanym.
  • Samo dodanie apostrofów nie wystarcza.
Kod · atom 1 · ~3 min

Jak to wygląda w kodzie

$klasa = '3TI';
$sql = "SELECT imie FROM uczniowie WHERE klasa = '" . mysqli_real_escape_string($polaczenie, $klasa) . "'";

$wynik = mysqli_query($polaczenie, $sql);
while ($w = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . htmlspecialchars($w['imie']) . '</p>';
}
Przykład na żywo · atom 1 · ~3 min

Uruchom i pokaż

$klasa = '3TI';
$sql = "SELECT imie FROM uczniowie WHERE klasa = '" . mysqli_real_escape_string($polaczenie, $klasa) . "'";

$wynik = mysqli_query($polaczenie, $sql);
while ($w = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . htmlspecialchars($w['imie']) . '</p>';
}
Sprawdzenie · atom 1 · ~2 min

Pytanie do klasy

Co robi WHERE w zapytaniu?

Atom 2 z 4 · ~12 min

Sortowanie i limitowanie wyniku

ORDER BY ustawia kolejność: ASC rosnąco (domyślnie), DESC malejąco. Można sortować po kilku kolumnach, podając je po przecinku.

  • LIMIT ogranicza liczbę wierszy: LIMIT 5 daje pięć pierwszych, a LIMIT 10, 5 — pięć wierszy od jedenastego.
  • To podstawa stronicowania wyników.
  • Kolejność klauzul jest stała: WHERE , ORDER BY , LIMIT .
  • Przestawienie ich kończy się błędem składni.
Kod · atom 2 · ~3 min

Jak to wygląda w kodzie

$sql = 'SELECT imie, punkty FROM uczniowie
        WHERE punkty > 10
        ORDER BY punkty DESC, imie ASC
        LIMIT 3';

$wynik = mysqli_query($polaczenie, $sql);
while ($w = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . $w['imie'] . ': ' . $w['punkty'] . '</p>';
}
Przykład na żywo · atom 2 · ~3 min

Uruchom i pokaż

$sql = 'SELECT imie, punkty FROM uczniowie
        WHERE punkty > 10
        ORDER BY punkty DESC, imie ASC
        LIMIT 3';

$wynik = mysqli_query($polaczenie, $sql);
while ($w = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . $w['imie'] . ': ' . $w['punkty'] . '</p>';
}
Sprawdzenie · atom 2 · ~2 min

Pytanie do klasy

Co robi ORDER BY DESC?

Atom 3 z 4 · ~12 min

Łączenie tabel JOIN

JOIN pozwala pobrać dane z dwóch tabel po kluczu. Warunek połączenia zapisujemy w ON : ON u.klasa_id = k.id , gdzie litery to aliasy tabel.

  • Aliasy skracają zapis i pozwalają odróżnić kolumny o tych samych nazwach.
  • W SELECT wymieniamy kolumny z obu tabel, np.
  • INNER JOIN zwraca tylko pasujące pary.
  • LEFT JOIN dodatkowo wiersze bez pary — przydaje się, gdy chcemy pokazać także uczniów bez klasy.
Kod · atom 3 · ~3 min

Jak to wygląda w kodzie

$sql = 'SELECT u.imie, k.nazwa
        FROM uczniowie u
        JOIN klasy k ON k.id = u.klasa_id
        ORDER BY k.nazwa, u.imie';

$wynik = mysqli_query($polaczenie, $sql);
while ($w = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . htmlspecialchars($w['imie']) . ' (' . htmlspecialchars($w['nazwa']) . ')</p>';
}
Przykład na żywo · atom 3 · ~3 min

Uruchom i pokaż

$sql = 'SELECT u.imie, k.nazwa
        FROM uczniowie u
        JOIN klasy k ON k.id = u.klasa_id
        ORDER BY k.nazwa, u.imie';

$wynik = mysqli_query($polaczenie, $sql);
while ($w = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . htmlspecialchars($w['imie']) . ' (' . htmlspecialchars($w['nazwa']) . ')</p>';
}
Sprawdzenie · atom 3 · ~2 min

Pytanie do klasy

Po czym łączymy tabele?

Zamknięcie · ~3 min

Co zabrać z lekcji

  • Do wyszukiwania fragmentu tekstu służy LIKE z znakiem procentu: WHERE imie LIKE 'A%' znajdzie imiona zaczynające się na A, a '%a%' — zawierające literę a.
  • LIMIT ogranicza liczbę wierszy: LIMIT 5 daje pięć pierwszych, a LIMIT 10, 5 — pięć wierszy od jedenastego.
  • Aliasy skracają zapis i pozwalają odróżnić kolumny o tych samych nazwach.
  • Ćwiczenia
Bilet wyjściowy: Co zwraca LEFT JOIN?
Odpowiedź: c) Także wiersze bez pary
Hyżyk· Część 12 · SQL: filtrowanie, sortowanie i łączenie tabel — k moduł 1 / 1