mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
Open software as four years from Windows and Office to policy.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
ec7aa63159
commit
264f4a73d8
84 changed files with 3327 additions and 4 deletions
79
content/programove-vybaveni/3-rocnik/07-mysql-join.md
Normal file
79
content/programove-vybaveni/3-rocnik/07-mysql-join.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-mysql-join
|
||||
nazev: MySQL: spojení tabulek
|
||||
popis: INNER JOIN přes trida_id a proč se název třídy neopakuje v každém řádku.
|
||||
nazev_cviceni: Kvíz: JOIN
|
||||
nadpis_kvizu: Doplňte spojení
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Jedna pravda
|
||||
*Název jen jednou*
|
||||
|
||||
- Název 1.A je v tabulce tridy jednou. V zaci je jen trida_id.
|
||||
- Když by název ležel i u žáka, oprava překlepu znamená projít všechny žáky.
|
||||
- To je důvod dvou tabulek. Excel to umí jen ručně, databáze vztahem.
|
||||
- JOIN tabulky spojí ve výsledku dotazu. Nesloučí je do jedné natrvalo.
|
||||
|
||||
> Tip: Po JOIN pořád existují dvě tabulky. Výsledek dotazu je jen pohled pro tento příkaz.
|
||||
|
||||
## INNER JOIN
|
||||
*Shoda klíčů*
|
||||
|
||||
- INNER JOIN vrátí řádky, kde se klíče sejdou. Žák a jeho třída.
|
||||
- ON z.trida_id = t.id je podmínka spojení. Není to totéž co WHERE na název.
|
||||
- Bez ON server buď příkaz odmítne, nebo spojí každý řádek s každým.
|
||||
- Přezdívky z a t jsou v dotazu proto, aby bylo jasné, která tabulka je která.
|
||||
|
||||
> Tip: WHERE t.nazev = '1.A' přijde až po spojení. Nejdřív se tabulky potkají, pak se filtruje.
|
||||
|
||||
## Celý příkaz
|
||||
*Jak má vypadat*
|
||||
|
||||
- SELECT z.prijmeni, z.jmeno, t.nazev FROM zaci AS z INNER JOIN tridy AS t ON z.trida_id = t.id;
|
||||
- WHERE t.nazev = '1.A' z toho udělá jen jednu třídu.
|
||||
- ORDER BY z.prijmeni výsledek seřadí.
|
||||
- Sloupce pište s přezdívkou tabulky. Samotné id by bylo nejasné, mají ho obě tabulky.
|
||||
|
||||
> Tip: Když příkaz hlásí nejednoznačný sloupec id, napište z.id nebo t.id. Server nehádá.
|
||||
|
||||
## Zadání: jeden JOIN
|
||||
*Cvičení*
|
||||
|
||||
- Do dotazy.sql přidejte dotaz, který vypíše příjmení, jméno a název třídy.
|
||||
- Jen třída 1.A, seřazené podle příjmení.
|
||||
- Anna Nováková v něm je včetně textu 1.A, ne jen čísla 1.
|
||||
- Příkaz spusťte dvakrát. Výsledek má být stejný, JOIN data nemění.
|
||||
|
||||
> Tip: Když vidíte číslo místo 1.A, vybíráte trida_id a ne t.nazev. Doplňte sloupec z tabulky tridy.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Které spojení ukáže žáka i název jeho třídy?
|
||||
- SELECT * FROM zaci;
|
||||
- [x] SELECT z.prijmeni, t.nazev FROM zaci AS z INNER JOIN tridy AS t ON z.trida_id = t.id;
|
||||
- DELETE FROM tridy;
|
||||
- INSERT INTO tridy VALUES ('1.A');
|
||||
> JOIN vezme příjmení z žáků a název z tříd tam, kde se id shoduje.
|
||||
|
||||
## Co patří do ON?
|
||||
- [x] z.trida_id = t.id
|
||||
- t.nazev = '1.A'
|
||||
- ORDER BY z.prijmeni
|
||||
- USE skola
|
||||
> ON je shoda klíčů. Filtr na název 1.A je WHERE, ne spojení.
|
||||
|
||||
## Proč není název třídy uložený u každého žáka?
|
||||
- MySQL to neumí
|
||||
- [x] Aby se název měnil na jednom místě
|
||||
- Protože text v MySQL nejde uložit
|
||||
- Aby nešel JOIN
|
||||
> Jedna pravda v tabulce tridy. Žáci drží jen číslo.
|
||||
|
||||
## Co JOIN udělá s uloženými tabulkami?
|
||||
- Sloučí je natrvalo do jedné
|
||||
- [x] Jen složí výsledek dotazu, tabulky zůstanou dvě
|
||||
- Smaže cizí klíče
|
||||
- Převede je na Excel
|
||||
> Výsledek je odpověď na příkaz. tridy a zaci na serveru zůstávají.
|
||||
Loading…
Add table
Add a link
Reference in a new issue