Razširjeni select stavek

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje

Vaje:05.12.2005

RAZŠIRJENI SELECT STAVEK


SELECT [DISTINCT|ALL] seznam_atributov FROM tabele ali poizvedbe iz imenom WHERE logični pogoj GROUP BY seznam_atributov HAVING pogoj, ki ga izpolnujejo skupine ORDER BY atribut [ASC|DESC] ;ASC = naraščajoče; DESC = padajoče

Razlike med WHERE in HAVING



[ ] } [ ] } S1 [ P ] } [ ] } [ ] } [ ] } S2


[ ] } [ ] } [ P' ] } [ ] } [ ] } S3


P' = negacija Pja (ne izpolnuje pogoj)


1. Za vsako mesto izpišite najnižji procent provizije, ki ga ima nek agent iz tega mesta.


' izpiše samo procent SELECT MIN(procent) FROM agent GROUP BY mesto;

' izpiše mesto in procent SELECT mesto, MIN(procent) FROM agent GROUP BY mesto;


2. Isto kot prej. Za vsako mesto razen Ljubljene. SELECT mesto, MIN(procent) FROM agent GROUP BY mesto HAVING mesto <> 'Ljubljana';

ali

SELECT mesto, MIN(procent) FROM agent GROUP BY mesto HAVING mesto NOT IN 'Ljubljana';


Opomba; HAVING - Lahko se uporablja skupinske atribute!


3. za vsak izdelek izpišite koliko krat je bil naročen! SELECT iid, COUNT(*) FROM narocilo GROUP BY iid;


Opomba: * da izbereš vse podatke ozrioma vse vrstice;


4. Izpišite imena tistih mest v katerih živita vsaj po dva agenta.


SELECT mesto FROM agent GROUP BY mesto HAVING COUNT(aid) >= 2 ORDER BY mesto;

ali

SELECT mesto FROM agent GROUP BY mesto HAVING COUNT(aid) >= 2 ORDER BY mesto ASC;


Opomba: Ne mešat skupinske atribute in tiste normalne!!! Skupina kot celota.



POGLEDI (VIEW)

Sintaksa: CREATE VIEW ime_pogleda [(imena_atributov)] AS SELECT ...

Opomba: Imena št v (imena_atributov) mora biti enako ... v rezultatu! Priporočeno je da v SELECT stavku atribute, ki so podvojeni preimenuje!


Pogled lahko uničemo tako da ga zavrnemo: DROP VIEW ime_pogleda;



CREATE VIEW vnarocilo AS -- narecimo pogled SELECT * FROM stranka s, agent a, izdelek i, narocilo n -- kartezičen produkt WHERE s.sid=n.sid AND a.aid=n.aid AND i.iid=n.iid; -- izbedba stika med temi tabelami


CREATE VIEW vnarocilo SELECT s.sid, s.ime AS 'sime', s.mesto AS 'smesto', a.aid,a.ime AS 'aime', a.mesto AS 'amesto', i.iid, i.ime AS 'iime',i.mesto AS 'imesto', i.zaloga, i.cena, n.nid,n.mesto,n.kosov,n.koncna_cena;

Opomba: Morda ni pravilno kaj prepisalo (ta zadnji CREATE VIEW).


CREATE MATERIALIZE VIEW Za materialni view!



INDEKSIRANJE

To nam pride prav predvsem za iskanje.

Z drevesnim indeksi lahko zmanjšamo same indekse!?!? Drevo optimalno dela če je pravilno uravnoteženo (predstavlji si drevo) - logaritmična


Če se tabele pogosto spreminjano naj se nebi splačalo INDEKSIRANJE. Če gre za manjšo tabelo se tudi ne splača INDEKSIRANJE.


Sintaksa: CREATE [UNIQUE] INDEX ime_indeksa ON ime_Tabele (eznam_atributov);


Opomba: UNIQUE - določa (pričakuje) enolične vrednosti

Kako indekse uporabljamo? Ko mi uporabimo tabelo se ta indeks avtomatično uporabi, če je to smisenlo ali je to potrebno.


Ko se nekega indeksa naveličamo. Za brisanje, odstranjevanje! Sintaksa: DROP INDEX ime_indeksa;


Vrnimo se k tabeli naročila... Pogosto povezuje stranke, agente in izdelke. Ključ te tabele je ŠIFRA tabele. Do šifre mi nikoli ne dostopamo. Dostopamo pa do teh atributih zato bi bilo smisenlo te tri atribute indeksirati!

CREATE INDEX narocilo_index ON narocilo (sid,aid,iid);

Vprašanje je? Ali se dejansko splača?

To je boljše! Pohitri dostop! CREATE INDEX index_narocilo_sid ON narocilo (sid);


Kako je z pogledi in indeksi? Pogledi se ne morejo indeksirati. Indeksiramo po atributih po katerih se primerja poizvedba.

Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja