Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Databáze – jazyk SQL. • příkaz CREATE • Syntaxe je poměrně složitá a v mnoha ohledech velmi závisí na konkrétním databázovém systému. • Viz. příslušný.

Podobné prezentace


Prezentace na téma: "Databáze – jazyk SQL. • příkaz CREATE • Syntaxe je poměrně složitá a v mnoha ohledech velmi závisí na konkrétním databázovém systému. • Viz. příslušný."— Transkript prezentace:

1 Databáze – jazyk SQL

2 • příkaz CREATE • Syntaxe je poměrně složitá a v mnoha ohledech velmi závisí na konkrétním databázovém systému. • Viz. příslušný manuál oblíbeného databázového systému.

3

4 id_typy_kontaktunazev id_typy_vztahunazev id_osobyprezdivkajmenoprijmenidatum_narozeniid_aadresy id_vztahyid_osoby1id_osoby2poznamkaid_typy_vztahu id_kontaktyid_osobyid_typy_kontaktukontakt id_schuzkydatummistopoznamka osoby typy_kontaktu kontakty typy_vztahu vztahy schuzky id_osobyid_schuzky osoby_schuzky

5 • příkaz INSERT • logika: INSERT kam VALUES co • INSERT INTO tabulka (seznam_sloupců) VALUES (seznam_hodnot) • INSERT [ IGNORE ] [ INTO ] tabulka [ ( sloupec1, sloupec2, … ) ] VALUES ( { výraz1 | DEFAULT | NULL }, … ) • INSERT INTO osoby (jmeno, prijmeni) VALUES (‘Chlastislav’, ‘Peruňka’);

6 • Nemusí se vkládat všechny hodnoty • INSERT INTO osoby (jmeno, prijmeni, prezdivka, datum_narozeni, id_adresy); VALUES ( ' Chlastislav', 'Peruňka', 'Chlastík', NULL, DEFAULT); • Velmi zkrácený zápis: • INSERT osoby VALUES ( ' Chlastislav', 'Sosna', 'Chlastík'); • Vložení data (PgSQL): • INSERT INTO osoby (jmeno, prijmeni, prezdivka, datum_narozeni) VALUES ('Chlastislav', 'Sosna', 'Chlastík', TO_TIMESTAMP(' ', 'DD.MM.YYYY'), ); • Vložení data (MySQL): • INSERT INTO osoby( jmeno, prijmeni, prezdivka, datum_narozeni) VALUES ('Chlastislav', 'Sosna', 'Chlastík' STR_TO_DATE(' ', '%d.%m.%Y' ), );

7 • Pravidla vkládání dat • nevkládá se hodnota automaticky generovaného klíče: auto_increment (MySQL), serial (PgSQL) • výjimkou je hromadný import dat do více tabulek • pokud to definice sloupce (vlastnost NULL) umožňuje není nutné hodnotu vkládat • neuvedení sloupce má stejný efekt jako uvedení DEFAULT (vloží se výchozí hodnota z definice sloupce) • uvedení hodnoty NULL nevloží žádnou hodnotu) • datum se musí vkládat ve formátu DB serveru nebo se do něj musí převést • formátovací funkce se liší pro různé DB servery

8 • příkaz UPDATE • logika: UPDATE kde SET jak WHERE co • UPDATE tabulka SET seznam_modifikací WHERE vyhledávací_podmínka • UPDATE tabulka SET sloupec1 = hodnota1 [,sloupec2 = hodnota2...] [ WHERE vyhledávací_podmínka ] • UPDATE osoby SET vyska = '196' WHERE id_osoby=42;

9 • Pokud není uvedená podmínka WHERE, aktualizují se všechny záznamy v tabulce • UPDATE osoby SET datum_narozeni=NULL; • V podmínce se nejčastěji používá klíč: • UPDATE osoby SET prezdivka = 'Chlastík' WHERE id=42 • UPDATE osoby SET prezdivka = 'Chlastík' WHERE jmeno='Chlastislav' AND prijmeni='Peruňka' AND prezdivka='Chlastik'; • pokud je klíč složený, musí se uvádět všechny složky

10 • příkaz SELECT • logika: SELECT co FROM odkud WHERE jak • co – jaká data chceme, nejčastěji jaké sloupce • odkud – zdroj dat, nejčastěji tabulka nebo kombinace tabulek • jak – jakým způsobem data získat, tedy jaké podmínky pro požadovaná data platí • příkaz SELECT je nejpoužívanější a také nejsložitější příkaz jazyka SQL

11 SELECT [ ALL | DISTINCT ] výběrový_výraz1, výběrový_výraz2, … [ FROM odkazy_na_tabulky [ WHERE vyhledávací_podmínka ] [ GROUP BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] [ HAVING vyhledávací_podmínka ] [ ORDER BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] ]

12 • nejjednodušší struktura: • SELECT seznam_sloupců FROM tabulka [ WHERE podmínka ] • SELECT id_osoby, jmeno, prijmeni FROM osoby WHERE vyska > 190 • Co (operace projekce): • hodnoty ve sloupcích jmeno a prijmeni • Odkud: • z tabulky osoby • Jak (operace selekce): • všechny osoby vyšší než 190 cm

13 SELECT [ ALL | DISTINCT ] výběrový_výraz1, výběrový_výraz2, … [ FROM odkazy_na_tabulky [ WHERE vyhledávací_podmínka ] [ GROUP BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] [ HAVING vyhledávací_podmínka ] [ ORDER BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] ]

14 SELECT [ ALL | DISTINCT ] { * | tabulka.* | [tabulka.]sloupec1 [AS alias1] [,tabulka.]sloupec2 [ AS alias2] [,…] } FROM … • * – vybere všechny sloupce, které se objeví v části FROM • tabulka.* – vybere všechny sloupce zadané tabulky • tabulka.sloupec – vybere sloupec ze zadané tabulky • AS – přiřadí dočasně sloupci jiný název (alias) –

15 • Varianty téhož dotazu: • SELECT schuzky.id_schuzky, schuzky.datum, schuzky.misto, schuzky.poznamka FROM schuzky; • SELECT id_schuzky, datum, misto, poznamka FROM schuzky; • SELECT schuzky.* FROM schuzky; • SELECT * FROM schuzky; • Výběr všech míst na kterých se koná nějaká schůzka: • SELECT misto FROM schuzky; • SELECT ALL misto FROM schuzky; • Bez duplicitních řádků (tabulka × relace) • SELECT DISTINCT misto FROM schuzky; –

16

17 SELECT [ ALL | DISTINCT ] výběrový_výraz1, výběrový_výraz2, … [ FROM odkazy_na_tabulky [ WHERE vyhledávací_podmínka ] [ GROUP BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] [ HAVING vyhledávací_podmínka ] [ ORDER BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] ]

18 • Výběr dat z jedné tabulky není příliš užitečný. • Data je možné získat současně z více tabulek jejich spojením. • Spojením tabulek (Θ - join) dochází k rekonstrukci původního schématu DB. • Tabulkou může být: • relace (skutečná tabulka ve schématu) • pohled (virtuální tabulka ve schématu) • výsledek dotazu (virtuální tabulka) (rekurze) • výsledek spojení tabulek (virtuální tabulka)

19 … FROM tabulka1 [AS alias1] [ [ LEFT | RIGHT | INNER | NATURAL ] JOIN tabulka2 [AS alias1] [ ON spojovací_podmínka ] ] [ WHERE … • Na levé i pravé straně operátoru JOIN je tabulka • Pro spojení je nutné zadat spojovací podmínku, která platí pro všechny řádky výsledné tabulky • Pro NATURAL JOIN (přirozené spojení) je spojovací podmínka automatická – rovnost hodnot ve stejně pojmenovaných sloupcích • Kartézský součin (všechny kombinace): • SELECT * FROM osoby, kontakty;

20 • SELECT * FROM osoby INNER JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby; • Vybere z obou tabulek takové kombinace záznamů pro které platí podmínka (1:1 nebo 1:1..N). • Vybere všechny osoby, které mají nějaký kontakt, každá osoba je uvedena tolikrát kolik má kontaktů. • SELECT * FROM osoby NATURAL JOIN kontakty; • Vybere všechny záznamy ve kterých se rovná hodnota stejně pojmenovaných sloupců. • JOIN, INNER JOIN, NATURAL JOIN je symetrický

21 • SELECT * FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby; • Vybere z levé tabulky vše a z pravé všechny záznamy, pro které platí podmínka (1:0..1 nebo 1:0..N) • Vybere všechny osoby a pokud má osoba kontakty, tak vypíše i kontakty (1:0..1 nebo 1:0..N) • SELECT * FROM osoby RIGHT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby; • Vybere z pravé tabulky vše a z levé záznamy, pro které platí podmínka. • Vybere všechny kontakty a ke každému vypíše osoby (v tomto konkrétním případě je stejné jako INNER JOIN).

22 • SELECT * FROM vztahy LEFT JOIN typy_vztahu ON vztahy.id_typy_vztahu = typy_vztahu.id_typy_vztahu; • Vybere všechny vztahy a ke každému přiřadí typ vztahu. • Vypíše i vztahy, které nemají žádný typ (neměly by existovat). • SELECT * FROM vztahy RIGHT JOIN typy_vztahu ON vztahy.id_typy_vztahu = typy_vztahu.id_typy_vztahu; • Vybere všechny typy vztahů a ke každému přiřadí vztahy, které mají daný typ. • Vypíše i typy vztahů, které nejsou použité.

23 • Ekvivalentní dotazy: • SELECT * FROM kontakty LEFT JOIN typy_kontaktu ON kontakty.id_typy_kontaktu = typy_kontaktu.id_typy_kontaktu; • SELECT * FROM typy_kontaktu RIGHT JOIN kontakty ON kontakty.id_typy_kontaktu = typy_kontaktu.id_typy_kontaktu; • Ekvivalentní dotazy: • SELECT * FROM kontakty INNER JOIN typy_kontaktu ON kontakty.id_typy_kontaktu = typy_kontaktu.id_typy_kontaktu; • SELECT * FROM kontakty NATURAL JOIN typy_kontaktu;

24 … FROM { tabulka1 [AS alias1] | pod_dotaz [ AS alias2] } [ [ LEFT | RIGHT | INNER | NATURAL ] JOIN tabulka2 [ ON tabulka_1.sloupec1 { > | >= | } tabulka_2.sloupec2] ] [ WHERE … • Nejčastěji se spojení používá k rekonstrukci původního schématu. • Spojovací podmínka je tedy nejčastěji rovnost hodnot dvou sloupců, které zajišťují vazbu mezi relacemi. • Spojovací podmínka může být i exotičtější, ale potom je obvykle výhodnější použít WHERE. • Spojovat je možné tabulky – tedy relace i pohledy i výsledky jiných dotazů.

25

26 SELECT [ ALL | DISTINCT ] výběrový_výraz1, výběrový_výraz2, … [ FROM odkazy_na_tabulky [ WHERE vyhledávací_podmínka ] [ GROUP BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] [ HAVING vyhledávací_podmínka ] [ ORDER BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] ]

27 WHERE { výraz1 [NOT] { = | <> | | >= } výraz2 | { ALL | ANY | SOME } pod-dotaz | výraz [NOT] IN { množina_hodnot | pod-dotaz } | výraz [NOT] LIKE vzor | výraz [NOT] BETWEEN dolní_mez AND |horní_mez | výraz [NOT] EXISTS (pod-dotaz) } [ { AND | OR } …]

28 • SELECT jmeno,prijmeni FROM osoby WHERE jmeno LIKE ‘P%’; • SELECT jmeno,prijmeni FROM osoby WHERE (jmeno LIKE ‘P%’) OR (jmeno LIKE ‘L%’); • SELECT jmeno,prijmeni FROM osoby WHERE jmeno LIKE ‘_etr’; • SELECT jmeno,prijmeni FROM osoby WHERE jmeno IN ('Petr', 'Pavel'); • SELECT jmeno,prijmeni FROM osoby WHERE jmeno BETWEEN 'Pavel' AND 'Petr';

29 • Osoby, které jsou vyšší než nejvyšší Petr: SELECT jmeno,prijmeni FROM osoby WHERE vyska >= ALL ( SELECT vyska FROM osoby WHERE jmeno = 'Petr' ); • Seznam osob, které bydlí v Brně: SELECT osoby.jmeno, osoby.prijmeni, adresy.mesto FROM osoby JOIN adresy ON osoby.id_adresy = adresy.id_adresy WHERE mesto = 'Brno';

30 • Seznam osob, které bydlí v Brně, nebo neznámo kde: SELECT osoby.jmeno, osoby.prijmeni, adresy.mesto FROM osoby LEFT JOIN adresy ON osoby.id_adresy = adresy.id_adresy WHERE (mesto = 'Brno') OR (mesto is NULL);

31 • Seznam osob, které bydlí v Brně (s využitím pod-dotazu): SELECT osoby.jmeno, osoby.prijmeni, adresy_brno.mesto FROM osoby JOIN ( SELECT mesto,id_adresy FROM adresy WHERE mesto = 'Brno' ) as adresy_brno ON osoby.id_adresy=adresy_brno.id_adresy;

32 • Seznam všech osob a jejich adresa, pokud bydlí v Brně: SELECT osoby.jmeno, osoby.prijmeni, adresy_brno.mesto FROM osoby LEFT JOIN ( SELECT mesto,id_adresy FROM adres WHERE mesto = 'Brno' ) as adresy_brno ON osoby.id_adresy=adresy_brno.id_adresy;

33 • Výběr všech osob, které mají (s y a s využitím JOINu): SELECT osoby.jmeno,osoby.prijmeni,kontakty.kontakt FROM (osoby JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby ) NATURAL JOIN typy_kontaktu WHERE typy_kontaktu.nazev LIKE '%mail';

34 • Výběr všech osob, které mají (s y a s využitím pod-dotazu): SELECT osoby.prezdivka, kontakty_ y.kontakt FROM osoby JOIN ( SELECT kontakt,id_osoby FROM kontakty NATURAL JOIN ( SELECT id_typy_kontaktu FROM typy_kontaktu WHERE nazev LIKE '%mail') AS typ_ ) AS kontakty_ y ON osoby.id_osoby = kontakty_ y.id_osoby;

35 • Výběr všech osob, které mají (bez ů a s využitím pod-dotazu): SELECT jmeno,prijmeni FROM osoby WHERE id_osoby IN ( SELECT id_osoby FROM kontakty WHERE id_typy_kontaktu IN ( SELECT id_typy_kontaktu FROM typy_kontaktu WHERE nazev LIKE '%mail‚ ) );

36 • Výběr všech osob, které mají (bez ů): SELECT osoby.jmeno, osoby.prijmeni FROM osoby WHERE EXISTS ( SELECT 1 FROM kontakty WHERE EXISTS ( SELECT 1 FROM typy_kontaktu WHERE nazev LIKE '%mail' AND kontakty.id_typy_kontaktu = typy_kontaktu.id_typy_kontaktu ) AND osoby.id_osoby = kontakty.id_osoby );

37

38 SELECT [ ALL | DISTINCT ] výběrový_výraz1, výběrový_výraz2, … [ FROM odkazy_na_tabulky [ WHERE vyhledávací_podmínka ] [ GROUP BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] [ HAVING vyhledávací_podmínka ] [ ORDER BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] ]

39 • COUNT(*), COUNT(sloupec) – počet záznamů • SUM(sloupec) – suma hodnot ve sloupci • AVG(sloupec) – průměr hodnot ve sloupci • MAX(sloupec), MIN(sloupec) – maximum/minimum hodnot ve sloupci • počet záznamů: • COUNT(sloupec) – počet hodnot (počítá duplicity) • COUNT (DISTINCT sloupec) – počet unikátních hodnot • COUNT(*) – zahrnuje i duplicity a prázdné řádky • COUNT(*) – nelze použít v kombinaci s DISTINCT

40 • počet ů každé osoby, která má kontakt • stačí tabulka kontakty • výchozí stav: • rozdělení do skupin podle sloupce v GROUP BY

41 • agregační funkce se aplikuj na každou skupinu zvlášť • výsledek se zapíše do tabulky, kterou tvoří: • sloupce z agregace • výsledek agregační funkce • pro každou skupinu je ve výsledné tabulce jeden řádek • dochází ke sloučení (agregaci) řádků

42 SELECT COUNT(*) FROM osoby; SELECT COUNT(*) FROM osoby NATURAL JOIN kontakty; SELECT COUNT(*) FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby; SELECT COUNT(kontakt) FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby; SELECT COUNT(DISTINCT id_osoby) FROM osoby NATURAL JOIN kontakty;

43 • GROUP BY rozdělí tabulku na skupiny a pro každou skupinu zvlášť spustí agregační funkci. • GROUP BY často obsahuje klíč tabulky. • Počet kontaktů každé osoby která má alespoň jeden kontakt: SELECT COUNT(*), id_osoby FROM osoby JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby;

44 • Počet kontaktů všech osob (pokud osoba nemá kontakt je uvedena hodnota 1): SELECT COUNT(*), id_osoby FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby; • Počet kontaktů všech osob: SELECT COUNT(kontakty.kontakt), id_osoby FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby;

45 • COUNT(*) vrátí počet řádků skupiny

46 • Při použití agregace musí být všechny sloupce v částí SELECT také v části GROUP BY. • Počet kontaktů každé osoby včetně jmen (musí se použít pod-dotaz): SELECT jmeno, prijmeni, pocet FROM osoby JOIN ( SELECT COUNT(kontakty.kontakt) AS pocet, osoby.id_osoby FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby ) AS osoby_pocet ON osoby.id_osoby = osoby_pocet.id_osoby;

47 • Podmínka aplikovaná na agregaci SELECT jmeno, prijmeni, pocet FROM osoby JOIN ( SELECT COUNT(kontakty.kontakt) AS pocet, osoby.id_osoby FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby HAVING pocet > 2 ) AS osoby_pocet ON osoby.id_osoby = osoby_pocet.id_osoby;

48 • Počet kontaktů osob, které mají vztah: SELECT osoby.jmeno, osoby.prijmeni, osoby_pocet.pocet FROM osoby JOIN ( SELECT COUNT(kontakty.kontakt) AS pocet, kontakty.id_osoby FROM osoby LEFT JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby HAVING (( osoby.id_osoby IN (SELECT id_osoby1 FROM vztahy) ) OR ( osoby.id_osoby IN (SELECT id_osoby2 FROM vztahy) ) ) AS osoby_pocet ON osoby.id_osoby=osoby_pocet.id_osoby;

49 • Počet kontaktů osob, které mají vztah: SELECT osoby.jmeno, osoby.prijmeni, osoby_pocet.pocet FROM osoby JOIN ( SELECT COUNT(kontakty.kontakt) AS pocet, osoby.id_osoby FROM osoby JOIN kontakty ON osoby.id_osoby = kontakty.id_osoby GROUP BY osoby.id_osoby HAVING ( EXISTS (SELECT 1 FROM vztahy WHERE (id_osoby1 = osoby.id_osoby) OR (id_osoby2 = osoby.id_osoby) ) ) AS osoby_pocet ON osoby.id_osoby = osoby_pocet.id_osoby;

50 SELECT [ ALL | DISTINCT ] výběrový_výraz1, výběrový_výraz2, … [ FROM odkazy_na_tabulky [ WHERE vyhledávací_podmínka ] [ GROUP BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] [ HAVING vyhledávací_podmínka ] [ ORDER BY { jméno_sloupce | výraz } [ ASC | DESC ], … ] ]

51 • Řadit je možné podle více kriterií. SELECT osoby.jmeno, osoby.prijmeni, adresy.mesto FROM osoby LEFT JOIN adresy ON osoby.id_adresy = adresy.id_adresy ORDER BY adresy.mesto DESC, osoby.prijmeni ASC, osoby.jmeno ASC;

52 • SELECT co FROM odkud WHERE podmínky GROUP BY agregace HAVING vlastnosti ORDER BY jak • Pořadí vyhodnocování: • odkud – první zdroj dat • JOIN – levá strana, pravá strana, podmínka • podmínky – podmínky výběru • agregace – seskupení výběru • vlastnosti – výběr ze skupin • co – omezení na sloupce • jak – seřazení výsledku

53

54 • Sjednocení množin (dvou a více SELECTů) SELECT jmeno, prijmeni FROM osoby JOIN vztahy ON osoby.id_osoby = vztahy.id_osoby1 WHERE vztahy.id_osoby2 = 42 UNION SELECT jmeno, prijmeni FROM osoby JOIN vztahy ON osoby.id_osoby = vztahy.id_osoby2 WHERE vztahy.id_osoby1 = 42 ORDER BY jmeno, prijmeni • Oba dotaz musí mít stejné sloupce (počet, datové typy, význam) • Výsledky se uloží „pod sebe“, duplicity se vyřadí • pokud není zadáno UNION ALL

55 • Pro porovnání hodnot NULL se používá konstrukce IS NULL • Osoby, které nemají SELECT osoby.jmeno, osoby.prijmeni, kontakty_ .kontakt FROM osoby LEFT JOIN ( SELECT kontakt,id_osoby FROM kontakty NATURAL JOIN ( SELECT id_typy_kontaktu FROM typy_kontaktu WHERE nazev LIKE '%mail') AS typ_ ) AS kontakty_ ON osoby.id_osoby = kontakty_ .id_osoby WHERE kontakty_ .kontakt IS NULL;

56 • Při výpisu hodnot NULL se může použít funkce COALESCE(): SELECT osoby.jmeno, osoby.prijmeni, COALESCE(kontakt, FROM osoby LEFT JOIN ( SELECT kontakt,id_osoby FROM kontakty NATURAL JOIN ( SELECT id_typy_kontaktu FROM typy_kontaktu WHERE nazev LIKE '%mail') AS typ_ ) AS kontakty_ ON osoby.id_osoby = kontakty_ .id_osoby;

57 • Trvalé virtuální tabulky definované dotazem. • Automaticky se aktualizují. • Jména a příjmení osob, které mají CREATE VIEW osoby_ y AS SELECT DISTINCT osoby.id_osoby,osoby.jmeno,osoby.prijmeni FROM ( osoby NATURAL JOIN kontakty ) NATURAL JOIN typy_kontaktu WHERE typy_kontaktu.nazev LIKE '%mail';

58 • Vztahy, kde oba účastníci mají SELECT vztahy.*, osoby1.prezdivka, osoby2.prezdivka FROM ( vztahy JOIN osoby AS osoby1 ON vztahy.id_osoby1 = osoby1.id_osoby ) JOIN osoby AS osoby2 ON vztahy.id_osoby2 = osoby2.id_osoby WHERE osoby1.id_osoby IN (SELECT id_osoby FROM osoby_ y) AND osoby2.id_osoby IN (SELECT id_osoby FROM osoby_ y);

59 • Pod-dotaz se musí použít při agregaci a výpisu více sloupců. • JOIN se musí použít při získávání dat z více tabulek (dotazů). • SQL je neprocedurální jazyk: • Při psaní a ladění se musí postupovat hierarchicky, nikoliv sekvenčně. • Komentáře se píší k celému dotazu. • Pokud SQL dotaz nic nevypíše, neznamená to, že je špatně a naopak.


Stáhnout ppt "Databáze – jazyk SQL. • příkaz CREATE • Syntaxe je poměrně složitá a v mnoha ohledech velmi závisí na konkrétním databázovém systému. • Viz. příslušný."

Podobné prezentace


Reklamy Google