1 / 46

Popis jazyka SQL

Popis jazyka SQL. Doc. Ing. Juraj Vaculík, PhD. Jazyk pre manipuláciu s údajmi.

zofia
Télécharger la présentation

Popis jazyka SQL

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. Popis jazyka SQL Doc. Ing. Juraj Vaculík, PhD.

  2. Jazyk pre manipuláciu s údajmi Na rozdiel od programovacích procedurálnych alebo objektových jazykov (C++, PowerBuilder a pod.) radíme štruktúrovaný dopytovací jazyk SQL (Structured Query Language) do kategórie neprocedurálnych jazykov, ktoré popisujú • čo požadujeme od databázy a nie • ako to potrebujeme vykonať. Jazyk SQL

  3. Počiatky jazyka SQL • siahajú do roku 1974, keď bol definovaný firmou IBM jeho predchodca Sequel. • v roku 1987 bol SQL prijatý organizáciou ANSI ako ISO štandard. Tento sa rozšíril v roku 1989 (SQL89) a 1992 (SQL92), čo je aj jeho dnešná platná norma. • zložitosť SQL92 ilustruje aj fakt, že do dnešného dňa žiadna databázová firma nenaprogramovala do svojich systémov jeho plnú implementáciu. Jazyk SQL

  4. Základné črty SQL • uloženie údajov v databáze vo forme tabuliek - reálnych alebo virtuálnych (neexistujúcich, sú to tzv. pohľady); • poloha tabuliek nie je dôležitá, identifikované sú svojim menom; • poradie stĺpcov v tabuľkách nie je dôležité, identifikácia prebieha cez meno stĺpca; • poradie riadkov v tabuľkách nie je dôležité; • údaje sú vždy prezentované koncovému užívateľovi vo forme tabuliek, bez ohľadu na ich vnútornú štruktúru, Jazyk SQL

  5. Indexy, kľúče • sú indexové štruktúry zamerané na zrýchlenie prístupu k riadkom v tabuľkách pri spracovaní užívateľského požiadavku. • Samotný jazyk je však nezávislý na fyzickejorganizácii údajov a o samotnom optimálnom spôsobe využitia indexov rozhoduje systém riadenia databázy. Jazyk SQL

  6. Členenie jazyka SQL • jazyk pre definíciuúdajov DDL; • interaktívny jazyk pre manipulácius údajmi a možnosť definície pohľadov a prístupových práv DML; • možnosť definície integritných obmedzení • riadenietransakcií TCC. Jazyk SQL

  7. Definície údajov v SQL • deklarácii relačného dátového modelu zodpovedá popis dvojrozmernej tabuľky s označenými stĺpcami a riadkami, • v relačnom dátovom modeli môžeme okrem základných tabuliek definovať aj globálne alebo lokálnedočasné tabuľky. Ich obsah nie je stály a po skončení práce s databázou sa vymaže. • Pri definovaní môžeme použiť nasledovné rezervované slová: • CREATE TABLE, ALTER TABLE, DROP TABLE Jazyk SQL

  8. CREATE TABLE CREATETABLE meno_tabuľky(zoznam_prvkov_tabuľky) • NOT NULL - stĺpec nesmie mať hodnotu NULL (prázdnu hodnotu); • DEFAULT - určenie implicitnej hodnoty pre stĺpec; • UNIQUE - všetky hodnoty v stĺpci musia byť unikátne (ani jedna sa nesmie zopakovať); • PRIMARY KEY - stĺpec je definovaný ako primárny kľúč pri zabezpečení referenčnej integrity; • FOREIGN KEY - stĺpec je definovaný ako cudzí kľúč pri zabezpečení referenčnej integrity; • CHECK - zadaný logický výraz pre definovanie prídavných integritných obmedzení; Jazyk SQL

  9. ALTER TABLE Zmena tabuľky • ADD - pridať stĺpec; • DROP - zrušiť stĺpec; • ALTER - zmeniť stĺpec; • ADDCONSTRAINT - pridať integritné obmedzenie; • DROPCONSTRAINT - zrušiť integritné obmedzenie. Jazyk SQL

  10. DROP TABLE • Zabezpečí vymazanie tabuľky z databázy. Nejedná sa o jej fyzické odstránenie, len o prepísanie údajov v systémovom katalógu. • Zároveň dôjde aj k zrušeniu naväzujúcich indexov a pohľadov, čo môžeme ovplyvniť rezervovanými príkazmi RESTRICT alebo CASCADE (tzv. kaskádovité mazanie). Jazyk SQL

  11. Manipulácia s údajmi • Príkazy pre manipuláciu s údajmi obsahujú možnosti ich • selektívneho výberu (SELECT), • aktualizačné príkazy (UPDATE, INSERT, DELETE) a • prípadne ďalšie rozšírenia. Jazyk SQL

  12. Príkaz SELECT ... • Základná konštrukcia príkazu SELECT sa skladá minimálne z nasledujúcich troch zložiek SELECTFROMWHERE, pričom každé z nich je vyhradené slovo: • SELECT obsahuje zoznam mien stĺpcov vytvárajúcich schému tabuľky pre výsledok dopytu reprezentovaným príkazom; • FROM obsahuje zoznam mien tabuliek, nad ktorými je dopyt definovaný; • WHERE obsahuje obecne definovanú podmienku na vyhľadávanieúdajov. V rámci nej môžeme zadať ľubovoľnú podmienku s operátormi =, <>, >, <, <=, >= a AND, OR, NOT. Jazyk SQL

  13. Príkaz SELECT ... • Príkaz SELECT neeliminuje automaticky z výsledku duplicitné riadky a ako výsledok získame tabuľku z riadkami údajov (vyjadríme pomocou slova ALL). • Pokiaľ chceme ako výsledok získať reláciu, musíme použiť slovo DISTINCT (z výberu odstránime duplicity). • Za zoznamom príkazov môžeme ešte uviesť pre konkrétny stĺpec podmienku GROUPBY, ktorá zabezpečí zoradenie celého výberu podľa daného stĺpca a to vzostupne (ASC) alebo zostupne (DESC), Jazyk SQL

  14. Príkaz SELECT SELECT [{DISTINCT | ALL}] [{* | mena_atributov}] FROM mena_relacii [WHERE podmienka] [ORDERBY meno_atributu zoradenie] Jazyk SQL

  15. Zoskupovacie funkcie • COUNT - spočíta prvky výberu, vrátane duplicitných alebo prázdnych (NULL) hodnôt; • SUM - vráti súčet hodnôt (sumu) stĺpca; • MAX - vráti maximum sady hodnôt stĺpca; • MIN - vráti minimum sady hodnôt stĺpca; • AVG - vypočíta aritmetický priemer sady hodnôt stĺpca v dotaze. agregačná_funkcia ([{ALL | DISTINCT}] meno_stĺpca) Jazyk SQL

  16. Zoskupovacie funkcie • GROUPBY - je špeciálny prípad agregačnej funkcie, ktorú aplikujeme na celú tabuľku alebo jej podmnožinu. • Výsledná tabuľka sa konceptuálne (nie fyzicky) rozdelí na skupiny pre ktoré je hodnota zvoleného stĺpca konštantná. Vytvorí sa virtuálna tabuľka, pričom každá skupina tvorí jeden jej riadok. • Pokiaľ chceme aby sa výsledok skladal iba z niektorých skupín, môžeme použiť klauzulu HAVING (ekvivalent klauzuly WHERE pri príkaze SELECT). Samozrejme aj za ňou môžeme použiť doplňujúce agregačné funkcie uvedené na začiatku zoznamu. Jazyk SQL

  17. Predikáty (prísudky) SQL • LIKE - pracuje s podreťazcami hodnôt v definovaných stĺpcoch typu CHAR (textové). Jej použitím môžeme dosiahnuť rôznych výberov, napr. vo forme LIKE ‘%reťazec%’, sa vyhľadajú všetky záznamy, ktoré na ľubovoľnom mieste v poli obsahujú vyhľadávaný reťazec. • MATCH - môžeme ním kontrolovať, či vstupné hodnoty dané ako riadkové výrazy sú z určitej množiny. • UNIQUE - použijeme, pokiaľ chceme otestovať, či v danej množine existujú duplicity. Pokiaľ áno, nadobúda hodnotu FALSE, ináč TRUE. Jazyk SQL

  18. Predikáty (prísudky) SQL • IN - používa sa pri zložitých dopytov, ktoré obsahujú viacnásobné konštrukcie SELECTFROMWHERE. Minimálne jeden z nich je daný nasledovne: meno_stĺpca [NOT] IN poddopyt alebo meno_stĺpca [NOT] IN (zoznam_hodnôt) Pokiaľ sa IN aplikuje na prázdne tabuľky, návratová hodnota je FALSE a pri tabuľkách s prázdnymi riadkami (aj prázdny riadok je hodnota - obsahuje medzery) vracia UNKNOWN. Jazyk SQL

  19. Množinové operácie • Okrem základnej operácie UNION (zjednotenie) štandard SQL92 priniesol aj operácie zodpovedajúce prieniku a rozdielu (INTERSECT a EXCEPT). • Aby bolo možné tieto operácie vykonať, tabuľky musia byť navzájom kompatibilné (rovnaký počet stĺpcov a v nich rovnaké typy údajov). Operácia UNION priamo eliminuje duplikáty bez nutnosti zadávania podmienky DISTINCT. • Treba však rovno povedať, že v súčasných systémoch nie sú väčšinou tieto operácie implementované. Jazyk SQL

  20. Aktualizácie údajov v SQL • INSERT - operácia vkladania riadkov do tabuliek, pričom je nutné špecifikovať hodnoty pre jednotlivé stĺpce alebo kompletne celý riadok podľa špecifikovaného dopytu; • UPDATE - operácia zmeny hodnôt v riadkoch; • DELETE - operácia vymazania definovaných riadkov z tabuliek. Jazyk SQL

  21. Relačné spojenia tabuliek Relačné operácie spojenia sú postavené na Coddovej algebre. V SQL92 môžeme použiť nasledovné varianty: • prirodzené spojenie • krížové spojenie • spojenie cez podmienku • spojenie cez vymenované stĺpce • vnútorné spojenie • vonkajšie spojenie • spojenie zjednotením Jazyk SQL

  22. Prirodzené spojenie • použije sa príkaz NATURAL JOIN. SELECT * FROM U NATURALJOIN V; • V SQL89 bolo nutné použiť SELECT FROM WHERE s operáciou = pre spájacie stĺpce. Jazyk SQL

  23. Krížové spojenie • vytvára kartézsky súčin (spojenie každého riadku z R s každým z S) dvoch tabuliek: SELECT * FROM R CROSSJOIN S; Jazyk SQL

  24. Spojenie cez podmienku • definujeme spájaciu podmienku. Syntax v SQL92 (v SQL89 sa definuje ináč): SELECT * FROM R JOIN S ON A<B; Jazyk SQL

  25. Spojenie cez vymenované stĺpce • rozširuje možnosti prirodzeného spojenia. Pokiaľ máme tabuľku U so stĺpcami (A,B,C) a tabuľku V so stĺpcami (E,A,B) a požadujeme spojenie cez stĺpce (A,B), môžeme napísať: SELECT * FROM U JOIN V USING (A, B); Jazyk SQL

  26. Vnútorné spojenie • predchádzajúce spojenie môžeme nazvať aj ako vnútorné spojenie a napísať ako • INNERJOIN alebo • INNERNATURALJOIN. Jazyk SQL

  27. Vonkajšie spojenie • slúži k pridávaniu niektorých riadkov, ktoré sa ničím nespojili, do výsledku. • Označujeme ako OUTERJOIN alebo NATURALOUTERJOIN. • Riadky sa pridávajú podľa označenia LEFT, RIGHT alebo FULL a to buď z ľavého, pravého alebo obidvoch operátorov. Napr.: SELECT * FROM U NATURALLEFTOUTER JOIN V; Jazyk SQL

  28. Spojenie zjednotením • každý riadok z ľavého alebo pravého operátora je vo výsledku doplnený hodnotami NULL, a to buď sprava alebo zľava. SELECT * FROM U UNIONJOIN V; Jazyk SQL

  29. Integritné obmedzenia • CHECK - kontroluje hodnoty komponentov riadku tabuľky. Môže byť lokálny pre daný stĺpec alebo globálny pre všetky stĺpce jednej tabuľky (rozšírenie SQL92). Akceptuje riadok pokiaľ podmienka nadobudne hodnoty TRUE alebo UNKNOWN. • DEFAULT - kontroluje zadanie implicitnej hodnoty pri vkladaní riadku do tabuľky. • FOREIGN alebo PRIMARYKEY - kontroluje zadanie referenčnej integrity pomocou explicitne definovaných cudzích alebo primárnych kľúčov. Jazyk SQL

  30. Referenčná integrita • určuje logické vzťahy medzi dvoma tabuľkami, pričom jedna z nich je vždy hlavná a druhá vedľajšia. • stĺpec ktorý je viazaný vo vedľajšej (závislej) tabuľke označujeme ako cudzí kľúč (FOREIGNKEY) a • z hlavnej tabuľky ako primárny kľúč (PRIMARYKEY). • Zároveň je možné aj definovanie reakcie systému na narušenie referenčnej integrity a to aj pri aktualizačných operáciách (INSERT, DELETE, UPDATE). Jazyk SQL

  31. Referenčná integrita • Pre INSERT môžeme určiť obmedzenie vloženia riadku do závislej tabuľky. • Pre operáciu DELETE (ekvivalentne aj pre UPDATE): • kaskádové odstránenie riadku • náhrada cudzieho kľúča prázdnou hodnotou • nahradenie cudzieho kľúča implicitnou hodnotou • odstránenie riadku z hlavnej tabuľky z upozornením Jazyk SQL

  32. Kaskádové odstránenie riadku • ONDELETECASCADE pri odstránení riadku z hlavnej tabuľky dôjde k automatickému odstráneniu súvisiacich riadkov aj zo závislých tabuliek; Jazyk SQL

  33. Náhrada kľúča prázdnou hodnotou • SETNULL pri odstraňovaní riadkov v závislej tabuľke, ktoré odkazujú na vymazávaný riadok hlavnej tabuľky, sa hodnota cudzieho kľúča nahradí prázdnou hodnotou; Jazyk SQL

  34. Nahradenie implicitnou hodnotou • SETDEFAULT pri odstraňovaní riadkov v závislej tabuľke, ktoré odkazujú na vymazávaný riadok hlavnej tabuľky, sa hodnota cudzieho kľúča nahradí vopred definovanou hodnotou; Jazyk SQL

  35. Odstránenie riadku • odstránenie riadku z hlavnej tabuľky z upozornením (NO ACTION) operácia vymazania sa nevykoná, pokiaľ pre primárny kľúč odstraňovaného riadku hlavnej tabuľky existuje ekvivalentná hodnota cudzieho kľúča v závislej tabuľke. Niektoré systémy majú túto vlastnosť nastavenú implicitne. Jazyk SQL

  36. Práca s pohľadmi • Pohľady chápeme ako virtuálne (neexistujúce) tabuľky. Sú zamerané hlavne pre potreby užívateľa na definovanie dopytov (údaje sa nedajú meniť), môžu však slúžiť napríklad aj na aktualizáciu údajov a pod. • Pre administrátora sa dajú s výhodou použiť na selektívne určenie ktorá skupina užívateľov má k čomu prístup Jazyk SQL

  37. Práca s pohľadmi ... • Vytvoriť pohľad môžeme pomocou CREATE VIEW, pričom samozrejme môžeme použiť rezervované slová a voľby popísané v predchádzajúcich bodoch. • Syntax: CREATEVIEW meno_pohľadu [(mená_stĺpcov)] AS výraz_dopytu [WITH {CASCADE | LOCAL} CHECKOPTION] Jazyk SQL

  38. Práca s pohľadmi • za „výraz_dopytu“ dosadíme požadovaný dopyt (napr. SELECT názov_stĺpca1, názov_stĺpca2...- FROM názov_tabuľky - GROUP BY...) doplnený o možné agregačné funkcie. • Pokiaľ uvedieme klauzulu WITHCHECKOPTION, musí byť pohľad aktualizovateľný. Zaisťuje dodržiavanie kontroly podmienok v definičnej časti pohľadu pri vykonávaní operácií INSERT a UPDATE. Vymazanie pohľadu je možné pomocou príkazu DROPVIEW, za ktorým uvedieme názov pohľadu. Jazyk SQL

  39. Ochrana údajov • Každý systém má naprogramované rôzne možnosti ochrany a definovania prístupových práv pre jednotlivých užívateľov (alebo skupiny), čo vyplynulo hlavne z nutnosti viacpoužívateľského prístupu do databáz. SQL definuje ochranu pre nasledovné akcie: • výber údajov (SELECT), • ich modifikácia (INSERT, UPDATE, DELETE), • odkazovanie (REFERENCES) a • použitie. Jazyk SQL

  40. Ochrana údajov - syntax GRANT {ALL PRIVILEGES | zoznam_privilégií} ON objekt TO {PUBLIC user_identif1[,user_identif2]...} [WITH GRAND OPTION] zoznam_privilégií:=privilegium[,privilegium]... privilegium:=SELECT | DELETE | INSERT [(meno_stlpca1[,meno_stlpca2]...)] | UPDATE [(meno_stlpca1[,meno_stlpca2]...)] | REFERENCES [(meno_stlpca1[,meno_stlpca2]...)] | USAGE Jazyk SQL

  41. Ochrana údajov - popis • Klauzula WITHGRANDOPTION umožňuje prideľovanie prístupových práv aj ďalším užívateľom, okrem tých, ktorý nie sú vymenovaný za klauzulou TO. Je veľmi vhodná vtedy, keď sa požaduje prístup k jednej tabuľke rôznym skupinám užívateľov. • Samozrejme, stupeň privilégií definujeme na najnižšej možnej úrovni, aby nedošlo k úniku informácií. Jazyk SQL

  42. Budúcnosť jazyka SQL Hlavné smery rozšírenia, ktoré prináša SQL, sú nasledovné: • relačné • procedurálne • objektové Jazyk SQL

  43. Relačné rozšírenia • pridanie ďalších predikátov a hlavne triggerov (procedúry, ktoré sú spustené pri výskytu určenej udalosti), ktoré databázové firmy implementovali každá vlastným spôsobom a teda rozdielne. • Jedná sa o dlhodobý problém, lebo mali byť už včlenené v norme SQL. Jazyk SQL

  44. Procedurálne rozšírenia • rozšírenie o uloženéprocedúry, čo sú príkazy SQL preložené, optimalizované a uložené na databázovom servery. • Ich používanie výrazne zlepšuje dobu odozvy a to hlavne u tých, ktoré vyžadujú komplikovanú optimalizáciu databázovým serverom. Jazyk SQL

  45. Objektové rozšírenia • rozšírenie o objektovo - orientované rysy jazyka - abstraktné typy údajov, dedenie, polymorfizmus a pod. • Pri rozšírení sa postupuje na základe Manifestu objektovo - orientovaných databázových systémov. Jazyk SQL

  46. Ďakujem za pozornosť

More Related