1 / 23

Databázové systémy I

Databázové systémy I. Přednáška č. 4 RNDr. David Žák, Ph.D . Fakulta elektrotechniky a informatiky david.zak @ upce.cz. Obsah. Vnitřní a vnější spojení tabulek Opakování Spojování více než 2 tabulek (SQL 92) Vlastní spojení Aliasy Setřídění výsledku Logické operátory.

fayre
Télécharger la présentation

Databázové systémy I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Databázové systémy I Přednáška č. 4 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatikydavid.zak@upce.cz

  2. Obsah • Vnitřní a vnější spojení tabulek • Opakování • Spojování více než 2 tabulek (SQL 92) • Vlastní spojení • Aliasy • Setřídění výsledku • Logické operátory Databázové systémy 1 - př. 4

  3. Spojení tabulek – syntaxe SELECT Vnitřní spojení INNER INNER JOIN, JOIN Do výsledku budou zahrnuty pouze ty řádky, pro které byla nalezena odpovídající hodnota v druhé tabulce. Vnější spojení OUTER Ve výsledku budou i ty řádky, pro které nebyly nalezeny odpovídající hodnoty v druhé tabulce. • Pravé (RIGHT JOIN) .. Ve výsledku budou všechny řádky z pravé (druhé tabulky). Nebyl-li nalezen aspoň jeden odpovídající řádek v levé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z první tabulky. • Levé (LEFT JOIN) .. Ve výsledku budou všechny řádky z levé (první tabulky). Nebyl-li nalezen aspoň jeden odpovídající řádek v pravé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z druhé tabulky. • Úplné (FULL JOIN) .. Ve výsledku budou všechny řádky z levé i pravé (první i druhé tabulky). Databázové systémy 1 - př. 4

  4. Spojení tabulek SCHÉMA A_OBCHOD Produkty Příklad: Máme 4 tabulky popisující produkty, jejich dodavatele, lokální zastoupení v ČR a pobočky, v nichž mají tato zastoupení vlastní prodejny. Dodavatele Pobocky Zastoupeni Databázové systémy 1 - př. 4

  5. Databázový model – schéma A_OBCHOD Databázové systémy 1 - př. 4

  6. Spojení tabulek – příklady SCHÉMA A_OBCHOD Zjistěte produkty a města, v nichž je lze přímo od oficiálního zastoupení dodavatele v ČR zakoupit. • Varianta dle SQL92: • SELECT DISTINCT Produkty.oznaceni, Pobocky.mesto • FROM Produkty JOINZastoupeni • ON produkty.dodavatel_id = zastoupeni.dodavatel_id • JOIN Pobocky • ON zastoupeni.zastoupeni_id = pobocky.zastoupeni_id; Databázové systémy 1 - př. 4

  7. Spojení tabulek – příklady SCHÉMA A_OBCHOD Zjistěte produkty a města, v nichž je lze přímo od oficiálního zastoupení dodavatele v ČR zakoupit. • Varianta dle SQL89: • SELECT DISTINCT Produkty.oznaceni, Pobocky.mesto • FROM Produkty, Zastoupeni,Pobocky • WHEREprodukty.dodavatel_id = zastoupeni.dodavatel_id • AND zastoupeni.zastoupeni_id = pobocky.zastoupeni_id; Databázové systémy 1 - př. 4

  8. Spojení tabulek – příklady SCHÉMA A_OBCHOD Zjistěte názvy všech dodavatelů, kteří nemají v ČR oficiální zastoupení a doplňte názvy jejich produktů, které lze na trhu zakoupit (pokud nějaké dodávají). • SELECT Dodavatele.nazev, Produkty.oznaceni • FROM Dodavatele • LEFTJOINzastoupeni • ON dodavatele.dodavatel_id = zastoupeni.dodavatel_id • LEFTJOIN Produkty • ON dodavatele.dodavatel_id = produkty.dodavatel_id • WHERE zastoupeni.zastoupeni_id IS NULL; Databázové systémy 1 - př. 4

  9. Spojení tabulek – příklady Příklady využití vnějších spojení: • Zobrazení všech dodavatelů, tedy i těch, kteří nedodávají žádný výrobek • Zobrazení všech výrobků, tedy i těch, které nejsou přiřazeny žádnému dodavateli • S využitím agregačních funkcí zobrazení počtu výrobků, které dodávají jednotliví dodavatelé (s vnějším spojením se zobrazí i hodnoty 0 u těch dodavatelů, kteří žádný výrobek nedodávají,v případě vnitřního spojení ve výsledku nebudou vůbec zahnuti) Databázové systémy 1 - př. 4

  10. Logické operátory AND a zároveň (vrací ANO, pokud oba operandy jsou zároveň ANO) OR nebo (vrací ANO, pokud alespoň jeden operand je ANO) NOT není pravda, že (vrací ANO, když následující operand je NE) Databázové systémy 1 - př. 4

  11. Pravdivostní tabulka AND Databázové systémy 1 - př. 4

  12. Pravdivostní tabulka OR Databázové systémy 1 - př. 4

  13. Pravdivostní tabulka NOT Databázové systémy 1 - př. 4

  14. Logické operátory – příklady SCHÉMA A_OBCHOD Příklady použití logických operátorů v jednoduchém dotazu nad jedinou tabulkou: • SELECT DISTINCT oznaceni, cena • FROM Produkty • WHERE cena > 25000 ; • SELECT DISTINCT oznaceni, cena • FROM Produkty • WHERE cena IS NULL OR oznaceni LIKE ‘A%’; • SELECT DISTINCT oznaceni, cena • FROM Produkty • WHERE (cena <30000 AND oznaceni LIKE 'A%') OR dodavatel_id IS NULL; Databázové systémy 1 - př. 4

  15. Aliasy v syntaxi příkazu SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> …………. <seznam výstupních sloupců> =[ALL|DISTINCT|DISTINCTROW]{ * | <specifikace sloupce1>[, <specifikace sloupce2>[, …]] } <specifikace sloupce>= {<název sloupce>|< specifikacetabulky> . <název sloupce>|< specifikacetabulky> . * |výraz} [[AS]<pojmenování sloupce>] < specifikacetabulky>= {<název tabulky>|<pojmenování tabulky>|<název pohledu>} [<pojmenování tabulky>] Databázové systémy 1 - př. 4

  16. Aliasy – příklad SCHÉMA A_OBCHOD Příklad SELECTprd.oznaceni AS Vyrobek, dod.NazevVyrobce FROMProdukty prd, Dodavateledod WHEREdod.dodavatel_id = prd.dodavatel_id; Databázové systémy 1 - př. 4

  17. Aliasy – kdy se bez nich neobejdeme ? SCHÉMA A_CLOVEK Příklad - spojení tabulky s tou samou tabulkou Máme dánu tabulku: LIDE(Id, jmeno, prijmeni, narozen, pohlaví, Id_otce, Id_matky) Zjistěte jména dětí, které mají matku Boženu Malou? SELECT deti.jmeno as jmeno_ditete FROM lide rodice JOIN lide deti ON deti.Id_matky=rodice.Id WHERE rodice.jmeno LIKE 'Božena' AND rodice.prijmeni LIKE 'Malá'; Databázové systémy 1 - př. 4

  18. Aliasy – kdy se bez nich neobejdeme ? SCHÉMA A_CLOVEK Další příklady Zjistěte jména dětí, které mají rodiče s Id=2? SELECT vnoucata.jmeno as jmeno_vnoucete FROM lide JOIN lide detiON (deti.Id_matky=lide.Id OR deti.Id_otce=lide.Id) WHERE lide.id=2; Databázové systémy 1 - př. 4

  19. Aliasy – kdy se bez nich neobejdeme ? SCHÉMA A_CLOVEK Další příklady Zjistěte jména vnoučat, které má osoba s Id=6? SELECT vnoucata.jmeno as jmeno_vnoucete FROM lide JOIN lide detiON (deti.Id_matky=lide.Id OR deti.Id_otce=lide.Id) JOIN lide vnoucataON (vnoucata.Id_matky= deti.Id OR vnoucata.Id_otce= deti.Id) WHERE lide.id=6; Databázové systémy 1 - př. 4

  20. Řazení v syntaxi příkazu SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION|UNION ALL|INTERSECT|MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] Databázové systémy 1 - př. 4

  21. Řazení výsledku SCHÉMA A_CLOVEK Vypište obsah tabulky produkty. Výsledek setřiďte podle sloupce dodavatel_id sestupně a podle ceny vzestupně. SELECT produkty.* FROM produkty ORDER BY dodavatel_id DESC, cena ASC; Databázové systémy 1 - př. 4

  22. Řazení výsledku – podle čísla sloupce SCHÉMA A_CLOVEK Vypište obsah tabulky produkty. Výsledek setřiďte podle sloupce dodavatel_id sestupně a podle ceny vzestupně. SELECT produkt_id, oznaceni, dodavatel_id, cena FROM produkty ORDER BY 3, 4 ASC; -- vzestupné řazení není třeba explicitně uvádět Databázové systémy 1 - př. 4

  23. Výrazy • Výraz je skupina konstant, proměnných a funkcí spojených pomocí operátorů. Výsledkem je hodnota. Datový typ je odvozen z datových typů jednotlivých prvků ve výrazu. • Automatická konverze datových typů • (například znaky na číslo při sčítání atd.) • Základními kameny výrazů jsou • Názvy sloupců • Textové konstanty • Číselné konstanty • Výsledky funkcí • Hodnota NULL • Uzavření do závorek • Unární (+/-) a binární operátory • Vnořené dotazy (SELECT ….) Databázové systémy 1 - př. 4

More Related