- Stahuj zápisky z přednášek a ostatní studijní materiály
- Zapisuj si jen kvalitní vyučující (obsáhlá databáze referencí)
- Nastav si své předměty a buď stále v obraze
- Zapoj se svojí aktivitou do soutěže o ceny
- Založ si svůj profil, aby tě tví spolužáci mohli najít
- Najdi své přátele podle místa kde bydlíš nebo školy kterou studuješ
- Diskutuj ve skupinách o tématech, které tě zajímají
Studijní materiály
Zjednodušená ukázka:
Stáhnout celý tento materiálKapitola 4: SQL
Základní struktura
Množinové operace
Souhrnné funkce
Nulové hodnoty
Vnořené poddotazy (Nested subqueries)
Odvozené relace
Pohledy
Modifikace databáze
Spojené relace
Jazyk definice dat (Data definition language)
Vložený SQL
Základní struktura
SQL je založen na množinových a relačních operacích s několika modifikacemi a vylepšeními
Typický SQL dotaz má tvar:
select A1, A2, …, An
from r1, r2, …, rm
where P
Ai reprezentuje atributy
ri reprezentuje relace
P je predikát
Tento dotaz je ekvivalentní následujícímu výrazu relační algebry:
(A1, A2, …, An ((P(r1 ( r2 ( … ( rm))
Výsledek každého SQL dotazu je relace.
Klauzule select
Klauzule select odpovídá operaci projekce v relační algebře. Je používána k vypsání požadovaných atributů ve výsledku dotazu.
Najděte jména všech poboček v relaci půjčka
select pobočka-jméno
from půjčka
V syntaxi „čisté“ relační algebry se tento dotaz zapíše takto:
(pobočka-jméno (půjčka)
Hvězdička značí „všechny atributy“
select *
from půjčka
SQL umožňuje duplikáty v relacích i ve výsledcích dotazů.
Pro eliminaci duplikátů vložte klíčové slovo distinct za select.
Najděte jména všech poboček v relaci půjčka a odstraňte duplikáty
select distinct pobočka-jméno
from půjčka
Klíčové slovo all specifikuje, že duplikáty odstraněny nebudou.
select all pobočka-jméno
from půjčka
Klauzule select může obsahovat aritmetické výrazy s operátory +, -, * a / na konstantách nebo atributech n-tic.
Dotaz
select pobočka-jméno, půjčka-číslo, částka * 100
from půjčka
vrátí relaci shodnou s relací půjčka, jen atribut částka je vynásoben číslem 100
Klauzule where
Klauzule where odpovídá operaci výběr v relační algebře. Skládá se z predikátu zahrnujícího atributy relací, které jsou v klauzuli from.
Najděte všechna čísla půjček pro půjčky v pobočce Perryridge s částkami většími než $1200.
select půjčka-číslo
from půjčka
where pobočka-jméno = „Perryridge“ and částka > 1200
SQL používá logické spojky and, or a not. Umožňuje tak použití aritmetických výrazů jako operandů pro operátory porovnání.
SQL zahrnuje operátor porovnání between pro zjednodušení klauzule where, který specifikuje hodnotu z určitého intervalu.
Najděte čísla půjček s částkami mezi $90,000 a $100,000 (tj. ($90,000 a ($100,000)
select půjčka-číslo
from půjčka
where částka between 90000 and 100000
Klauzule from
Klauzule from odpovídá kartézskému součinu z relační algebry. Vypíše relace, které mají být procházeny při vyhodnocování výrazu.
Najděte kartézský součin půjčovatel ( půjčka
select *
from půjčovatel, půjčka
Najděte jméno a číslo půjčky všech zákazníků, kteří mají půjčku v pobočce Perryridge.
select distinct zákazník-jméno, půjčovatel.půjčka-číslo
from půjčovatel, půjčka
where půjčovatel.půjčka-číslo = půjčka.půjčka-číslo and pobočka-jméno = „Perryridge“
Operace přejmenování
Mechanismus pro přejmenovávání relací je v SQL řešen pomocí klauzule as:
staré-jméno as nové-jméno
Najděte jméno a číslo půjčky všech zákazníků, kteří mají půjčku v pobočce Perryridge; nahraďte jméno sloupce půjčka-číslo jménem půjčka-id.
select distinct zákazník-jméno, půjčovatel.půjčka číslo as půjčka-id
from půjčovatel, půjčka
where půjčovatel.půjčka-číslo = půjčka.půjčka-číslo
and pobočka-jméno = „Perryridge“
Proměnné n-tic (Tuple variables)
Proměnné n-tic jsou definovány v klauzuli from pomocí klauzule as.
Najděte jména zákazníků a čísla jejich půjček pro všechny zákazníky, kteří mají půjčku ve stejné pobočce.
select distinct zákazník-jméno, T.půjčka-číslo
from půjčovatel as T, půjčka as S
where T.půjčka-číslo = S.půjčka-číslo
Najděte jména všech poboček, které mají větší aktiva než nějaká pobočka v Brooklynu.
select distinct T.pobočka-jméno
from pobočka as T, pobočka as S
where T.aktiva > S.aktiva and S.pobočka-jméno = „Brooklyn“
Operace s řetězci
SQL zahrnuje operátor pro porovnávání řetězců znaků. Vzorky jsou popsány použitím dvou speciálních znaků:
procento (%). Znak % vyhovuje jakémukoliv podřetězci.
podtržítko (_). Znak _ vyhovuje jakémukoliv znaku.
Najděte jména všech zákazníků, jejichž ulice obsahuje podřetězec ‚Main‘.
select zákazník-jméno
from zákazník
where zákazník-ulice like „%Main%“
Co vyhovuje jménu „Main%“?
like „Main\%“ escape „\“
Uspořádání zobrazení n-tic
Výpis všech zákazníků, kteří mají půjčku v pobočce Perryridge seřazený podle abecedy
select distinct zákazník-jméno
from půjčovatel, půjčka
where půjčovatel.půjčka-číslo = půjčka.půjčka-číslo and
pobočka-jméno = „Perryridge“
order by zákazník-jméno
Můžeme ještě specifikovat desc pro sestupné pořadí nebo asc pro vzestupné pořadí; vzestupné pořadí je implicitní.
SQL musí provést třídění, aby vyhověl požadavku order by. Protože třídění velkého množství n-tic může být drahé, je vhodné třídit pouze v nezbytných případech.
Duplikáty
V relaci s duplikáty může SQL definovat, kolik kopií n-tic se objeví ve výsledku.
Více-množinové verze některých operátorů relační algebry – dané více-množinové relace r1 a r2:
Je-li c1 kopií n-tice t1 v r1 a t1 vyhovuje výběru ((, pak je c1 kopií n-tice t1 v (((r1)
Pro každou kopii n-tice t1 v r1 je kopie n-tice (A(t1) v (A(r1), kde (A(t1) značí projekci jednoduché n-tice t1.
Je-li c1 kopií n-tice t1 v r1 a c2 kopií n-tice t2 v r2, pak je c1 ( c2 kopií n-tice t1.t2 v r1 ( r2.
Předpokládejme, že relace r1 se schématem (A, B) a r2 se schématem © jsou následující více-množiny:
r1 = {(1, a), (2, a)}r2 = {(2), (3), (3)}
Pak (B (r1) bude {(a), (a)}, zatímco (B (r1) ( r2 bude
{(a, 2), (a, 2), (a, 3), (a, 3), (a, 3), (a, 3)}
SQL sémantika duplikátů:
select A1, A2, …, An
from r1, r2, …, rm
where P
je ekvivalentní více-množinové verzi výrazu:
(A1, A2, …, An ((P(r1 ( r2 ( … ( rm))
Množinové operace
Množinové operace union, intersect a except operují na relacích a odpovídají operacím relační algebry (, ( a –.
Každá z těchto operací automaticky eliminuje duplikáty; chceme-li i duplikáty, použijeme více-množinové verze union all, intersect all a except all. Předpokládejme, že se n-tice objeví m-krát v r a n-krát v s, pak se objeví:
(m + n)-krát v r union all s
min(m, n)-krát v r intersect all s
max(0, m – n)-krát v r except all s
Najděte všechny zákazníky, kteří mají půjčku, účet nebo obojí:
(select zákazník-jméno from vkladatel)
union
(select zákazník-jméno from půjčovatel)
Najděte všechny zákazníky, kteří mají půjčku i účet:
(select zákazník-jméno from vkladatel)
intersect
(select zákazník-jméno from půjčovatel)
Najděte všechny zákazníky, kteří mají účet, ale ne půjčku:
(select zákazník-jméno from vkladatel)
except
(select zákazník-jméno from půjčovatel)
Souhrnné funkce
Tyto funkce operují na více-množinových hodnotách sloupců relace a vracejí hodnotu
avg: průměrná hodnota
min: minimální hodnota
max: maximální hodnota
sum: suma hodnot
count: počet hodnot
Najděte průměrnou hodnotu zůstatku účtu v pobočce Perryridge.
select avg (zůstatek)
from účet
where pobočka-jméno = „Perryridge“
Najděte počet n-tic v relaci zákazník.
select count (*)
from zákazník
Najděte počet vkladatelů v bance.
select count (distinct zákazník-jméno)
from vkladatel
Souhrnné funkce – Group by
Najděte počet vkladatelů v každé pobočce.
select pobočka-jméno, count (distinct zákazník-jméno)
from vkladatel, účet
where vkladatel.číslo-účtu = účet.číslo-účtu
group by pobočka-jméno
Poznámka: Atributy v klauzuli select mimo
Vloženo: 24.04.2009
Velikost: 36,18 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Copyright 2023 unium.cz. Abychom mohli web rozvíjet a dále vylepšovat podle preferencí uživatelů, shromažďujeme statistiky o návštěvnosti, a to pomocí Google Analytics a Netmonitor. Tyto systémy pro unium.cz zaznamenávají, které stránky uživatel na webové stránce navštívil, odkud se na stránku dostal, kam z ní odešel, jaké používá zařízení, operační systém či prohlížeč, či jaký má preferenční jazyk. Statistiky jsou anonymní, takže unium.cz nezná identitu návštěvníka a spravuje cookies tak, že neumožňuje identifikovat konkrétní osoby. Používáním webu vyjadřujete souhlas použitím cookies a následujících služeb: