- 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álom půjčka, půjčovatel
where pobočka-jméno = „Perryridge“
and půjčka.číslo-účtu = půjčovatel.číslo-účtu
Modifikace databáze – aktualizace
Všechny účty se zůstatkem přes $10,000 o 6 %, ostatní o 5 %.
Napíšeme dva výrazy update:
update účet
set zůstatek = zůstatek * 1.06
where zůstatek > 10000
update účet
set zůstatek = zůstatek * 1.05
where zůstatek ( 10000
pořadí je důležité
lépe lze vyřešit pomocí výrazu case
Aktualizace pohledu
Vytvoříme pohled na všechna data v relaci půjčka, zakryjte atribut částka
create view pobočka-půjčka as
select pobočka-jméno, půjčka-číslo
from půjčka
Přidáme novou n-tici do pohledu
insert into pobočka-půjčka
values („Perryridge“, „L-307“)
Toto vkládání musí být reprezentováno vložením n-tice („Perryridge“, „L-307“, null) do relace půjčka.
Aktualizaci komplexnějších pohledů je náročné nebo nemožné přeložit a proto nejsou povoleny.
Spojené relace (Joined relations)
Operace spojení vezme dvě relace a jako výsledek vrátí jednu relaci.
Tyto operace jsou typicky používány jako poddotazy v kaluzuli from.
Podmínka spojení (Join condition) – definuje, které n-tice ve dvou relacích si odpovídají a které atributy jsou ve výsledku spojení.
Typ spojení (Join type) – definuje kolik je n-tic v každé relaci, které nedpovídají žádné n-tici v jiné relaci.
Typy spojení
Podmínky spojení
vnitřní spojení
přirozené
levé vnější spojení
na
pravé vnější spojení
použitím (A1, A2, …, An)
plné vnější spojení
Příklady
Relace půjčka
pobočka-jméno
půjčka-číslo
částka
Downtown
L-170
3000
Redwood
L-230
4000
Perryridge
L-260
1700
Relace půjčovatel
zákazník-jméno
půjčka-číslo
Jones
L-170
Smith
L-230
Hayes
L-155
půjčka inner join půjčovatel on půjčka.půjčka-číslo = půjčovatel.půjčka-číslo
pobočka-jméno
půjčka-číslo
částka
zákazník-jméno
půjčka-číslo
Downtown
L-170
3000
Jones
L-170
Redwood
L-230
4000
Smith
L-230
půjčka left outer join půjčovatel on půjčka.půjčka-číslo = půjčovatel.půjčka-číslo
pobočka-jméno
půjčka-číslo
částka
zákazník-jméno
půjčka-číslo
Downtown
L-170
3000
Jones
L-170
Redwood
L-230
4000
Smith
L-230
Perryridge
L-260
1700
null
null
půjčka natural join půjčovatel
pobočka-jméno
půjčka-číslo
částka
zákazník-jméno
Downtown
L-170
3000
Jones
Redwood
L-230
4000
Smith
půjčka natural right outer join půjčovatel
pobočka-jméno
půjčka-číslo
částka
zákazník-jméno
Downtown
L-170
3000
Jones
Redwood
L-230
4000
Smith
null
L-155
null
Hayes
půjčka full outer join půjčovatel using (půjčka-číslo)
pobočka-jméno
půjčka-číslo
částka
zákazník-jméno
Downtown
L-170
3000
Jones
Redwood
L-230
4000
Smith
Perryridge
L-260
1700
null
null
L-155
null
Hayes
Najděte všechny zákazníky, kteří mají v bance buď účet nebo půjčku (ale ne obojí).
select zákazník-jméno
from (vkladatel natural full outer join půjčovatel)
where číslo-účtu is null or půjčka-číslo is null
Jazyk definice dat (Data definition language; DDL)
Umožňuje specifikaci nejen množin atributů, ale také informaci o každé relaci, zahrnující:
Schéma každé relace.
Doménu hodnot spojenou s každým atributem.
Omezení integrity.
Množinu indexů, které budou udržovány pro každou relaci.
Bezpečnostní a autorizační informace o každé relaci.
Fyzickou strukturu uložení na disk pro každou relaci.
Doménové typy v SQL
char(n). Řetězec znaků s pevnou délkou n.
varchar(n). Řetězec znaků s proměnlivou délkou (maximálně n).
int. Celé číslo; závislé na implementaci.
smallint. Krátké celé číslo; závislé na implementaci.
numeric(p,d). Číslo s pevnou desetinnou čárkou s přesností na p míst s d místy vpravo od desetinné tečky.
real, double precision. Čísla s plovoucí desetinnou čárkou; závislé na implementaci.
float(n). Číslo s plovoucí desetinnou čárkou s přesností nejméně na n míst.
date. Datumy obsahující (4bitový) rok, měsíc a den.
time. Čas v hodinách, minutách a sekundách.
Ve všech doménových typech jsou povoleny nulové hodnoty. Deklarování atributu not null je zakazuje.
V SQL-92 vytvoří konstrukce create domain uživatelské doménové typy
create domain osoba-jméno char(20) not null
Konstrukce create table
SQL relace je definována použitím příkazu create table:
create table r (A1 D1, A2 D2, …, An Dn,
,
…,
)
r je jméno relace
každé Ai je jméno atributu ve schématu relace r
Di je datový typ hodnot v doméně atributu Ai
Příklad:
create table pobočka
(pobočka-jménochar(15) not null,
pobočka-městochar(30),
aktivainteger)
Omezení integrity v konstrukci create table
not null
primary key (A1, …, An)
check (P), kde P je predikát
Příklad: Deklarace pobočka-jméno jako primárního klíče pro pobočka a zajištění, že hodnota atributu aktiva bude nezáporná.
create table pobočka
(pobočka-jménochar(15) not null,
pobočka-městochar(30),
aktivainteger,
primary key (pobočka-jméno),
check (aktiva >= 0))
Deklarace atributu jako primary key zajišťuje v SQL-92 automaticky i not null.
Konstrukce drop table a alter table
Příkaz drop table smaže všechny informace o dané relaci z databáze.
Příkaz alter table přidá atributy k existující relaci. Ke všem n-ticím v relaci přiřadí null jako hodnotu po nové atributy. Tvar příkazu je následující
alter table r add A D
kde A je jméno atributu, který je přidán do relace r a D je jeho doména.
Příkaz alter table je často používán též k odstranění (drop) atributů z relace:
alter table r drop A
kde A je jméno atributu relace r.
Zabudovaný SQL
Standard SQL definuje zabudování SQL do řady programovacích jazyků jako jsou Pascal, PL/I, Fortran, C a Cobol.
Jazyk, ve kterém jsou zabudovány SQL dotazy, je nazýván hostitelský jazyk a SQL struktury povolené v hostitelském jazyce vytvářejí zabudovaný SQL.
Výraz EXEC SQL je používán pro identifikaci vloženého SQL dotazu pro preprocesor
EXEC SQL END EXEC
Příklad dotazu
Z hostitelského jazyka najděte jména a čísla účtu s více než částka dolary na nějakém účtu.
Specifikujte dotaz v SQL a deklarujete pro ni kurzor
EXEC SQL
declare c cursor for
select zákazník-jméno, číslo-účtu
from vkladatel, účet
where vkladatel.číslo-účtu = účet.číslo-účtu
and účet.zůstatek > :částka
END-EXEC
Zabudovaný SQL (pokračování)
Výraz open způsobí vyhodnocení dotazu
EXEC SQL open c END-EXEC
Výraz fetch způsobí, že hodnoty jedné n-tice budou vloženy do proměnných hostitelského jazyka.
EXEC SQL fetch c into :cn :an END-EXEC
Výraz close zavře databázový systém, takže se smaže dočasná relace, která obsahuje výsledek dotazu
EXEC SQL close c END-EXEC
Dynamický SQL
Umožňuje programům konstruovat SQL dotazy za běhu.
Příklad použití dynamického SQL z programu v jazyce C.
char *sqlprog = „update účet set zůstatek = zůstatek * 1.05
where číslo-účtu = ?“
EXEC SQL prepare dynprog from :sqlprog;
char účet[10] = „A-101“;
EXEC SQL execute dynprog using :účet;
Dynamický SQL program obsahuje znak ?, který je místem pro hodnotu, která je poskytována před spuštěním SQL programu.
Další rysy SQL
Jazyky čtvrté generace –speciální jazyky asistující aplikačním programátorům při tvorbě uživatelského rozhraní a formátování výstupu
SQL sezení (SQL session) – poskytuje abstrakci klienta a serveru
klient se připojí k SQL serveru, zahájí sezení
spustí sérii výrazů
odpojí sezení
může odevzdat nebo vrátit práci uskutečněnou v sezení
SQL prostředí obsahuje několik komponent (identifikátor uživatele a schéma, které identifikuje, které z několika schémat sezení používá).
- 4. -
Kapitola 4: SQLP002 Úvod do databázových systémů
Vloženo: 24.04.2009
Velikost: 36,18 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Copyright 2024 unium.cz