TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach
FEI archív 2011/2012 => 2. ročník => Topic started by: xxx3 on 16.02.2012, 14:10:05
-
SKusali ste si niekto nahodit Oracle na vlastny komp? TO mam stiahnut tie dva subory co maju spolu 2GB z oracle ? :D
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen)
-
SKusali ste si niekto nahodit Oracle na vlastny komp? TO mam stiahnut tie dva subory co maju spolu 2GB z oracle ? :D
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen)
Stačí klient.
Napr. keď chceš 10gR2, tak ideš sem (http://www.oracle.com/technetwork/database/10201winx64soft-090882.html) a vyberieš si len Oracle Database 10g Client Release 2 (10.2.0.1.0). A v prípade Win7 odporúčam inštaláciu spustiť ako správca (ak som to neurobil, zdrbovalo sa mi to...). Takisto aj nainštalovaný SQL Plus treba spúšťať ako správca... Aspoň u mňa.
-
Aha tak už viem prečo mi to nešlo. bu Ja som to inštaloval asi 5+ krát a stále mi vypisovalo chybu pri inštalácii. Neskôr mi to však spolubývajúci spravil br
-
to secky tie oraclacke produkty nainstalovat je umenie, ale ked uz trafis instalacku ta do pohody :D inak ked editnes vlastnosti odkazu, resp. execka co spusta soft tak nemusis zadavat login udaje ta logne automaticky. (to len taky hint :) )
-
hodte sem pls niekto link an konkretneho klienta, ktoreho ste stiahli a ide vam to pod Win 7 64-bit. Diky :D
-
pozrite si archiv
-
hodte sem pls niekto link an konkretneho klienta, ktoreho ste stiahli a ide vam to pod Win 7 64-bit. Diky :D
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (http://www.oracle.com/technetwork/database/10201winsoft-095341.html)
Inštaluješ to potom pomocou priloženého manuálu na moodli.
-
jak sa da pozriet, ze ake tabulky mam uz vytvorene ?
-
jak sa da pozriet, ze ake tabulky mam uz vytvorene ?
Select * from cat;
-
ako testujete ten autoservis ci ste ho spravili spravne ??
-
ako testujete ten autoservis ci ste ho spravili spravne ??
Ako testovať? Do úvahy prichádza akurát metóda Kuknem a vidím ap
-
to secky tie oraclacke produkty nainstalovat je umenie, ale ked uz trafis instalacku ta do pohody :D inak ked editnes vlastnosti odkazu, resp. execka co spusta soft tak nemusis zadavat login udaje ta logne automaticky. (to len taky hint :) )
developer je v pohode.
-
nejaky priklad ako spravit tie vztahy nemate niekto ?
-
nejaky priklad ako spravit tie vztahy nemate niekto ?
Dám jeden príklad, ktorý som dávnejšie implementoval pre jeden web.
Majme dve tabuľky: pretekar a vysledky. V tabuľke pretekar je zapísaný akýsi zoznam pretekárov, ktorí sa zúčastnili nejakej série pretekov. V tabuľke vysledky sú zapisované ich výsledky (umiestnenia) z jednotlivých podujatí. Medzi týmito tabuľkami je vzťah - vo výsledkoch musí byť zaznamenané, ktorému z pretekárov ten-ktorý výsledok prislúcha.
Pretekár je v tabuľke pretekar identifikovaný pomocou id, v tabuľke vysledky dajme tomu že cez id_pretekara.
Vzťah vytvoríš nasledovne:
create table vysledky(
.......,
.......,
.......,
id_pretekara number(5) not null references pretekar(id) on delete cascade
)
-
dik.. a co znamena to on deleta cascade ?
-
dik.. a co znamena to on deleta cascade ?
Keď odstrániš riadok z hlavnej tabuľky, automaticky sa odstránia aj súvisiace riadky zo závislej (závislých) tabuliek.
Teda na predošlom príklade: Z tabuľky pretekar vymažeš pretekára s id dajme tomu 5. Zo závislej tabuľky vysledky sa vymažú všetky výsledky zmazaného pretekára, teda všetky riadky, na ktorých je id_pretekara nastavené na 5.
-
hovorila akou formou to mame odovzdavat? resp. co vsetko mam odovzdat?
-
hovorila akou formou to mame odovzdavat? resp. co vsetko mam odovzdat?
Je to v Moodli ;)
Sem odovzdajte riešenia úloh, ktoré sú špecifikované v dokumente Cvičenie 2 v sekcii Úlohy na samostatné riešenie. Termín odovzdania - do polnoci dňa pred nasledujúcim cvičením. Formát - zazipovaný txt súbor s názvom 2012_priezvisko_meno_cv2.zip
-
aha fakt, diki
prepokladam ze tam len nahadzem prikazy ktore som pouzil na vytvorenie tabuliek, tak?
-
prepokladam ze tam len nahadzem prikazy ktore som pouzil na vytvorenie tabuliek, tak?
:thumbs-up:
-
nam Lalova hovorila, ze nemame nic na domacu ulohu ...
-
nam Lalova hovorila, ze nemame nic na domacu ulohu ...
Jak vám fajne ;D
-
lol ze cviko bez domacej to ja som o takom lem snival :D sme na kazdom mali nove a horsie zadania :D
-
lol ze cviko bez domacej to ja som o takom lem snival :D sme na kazdom mali nove a horsie zadania :D
skym si mal cviko ?
-
ale si myslim, ze Lalova nam zle povedala :D
-
nepodelil by sa niekto o to ako spravit tie vztahy ? ... nejak si myslim, zeby som spravil ale neviem ci dobre, kedze neviem ako vyskusat ci to mam dobre
-
Vyskúšaj to tak, že vymaž niečo z tabuľky auto. Ak ti to zmizne v tabuľke auto, aj v tabuľke asz, máš to dobre.
-
a tie vztahy tvorim len cez tie FOREIGN a PRIMARY KEY ? Ale aj nejak inak to treba poprepajat ?
-
Ja som to riešil cez reference...
create table asz(
spz char(10) not null references auto(spz),
.
.
.
primary key(spz,kod_sluzby,datum_sluzby));
Máš teda spz v tabuľke asz, ktoré je prepojené s spz v tabuľke auto.
Ak vymažeš jedno, malo by sa vymazať aj to druhé.
-
aha .. a cez foreign key si nerobil nic ? Lebo nasiel som na w3cschools dobre vysvetlene tie foreign keys a podla nich tvorenie vtzahov .. ale zas tam som o reference nenasiel nic :D
-
Cez FOREIGN KEY som nerobil nič...
Ešte poznámka k predošlému postu: spz sa vymaže v oboch tabuľkách len v prípade, ak tam pridáš on delete cascade
-
a co tam je v tabulke ze typ serial ? .. to davas ako number ?
-
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement
create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?
-
To je logická schéma, kód robíš podľa fyzickej. Vo fyzickej máš všetko + dole máš ešte nejaké poznámky.
-
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement
create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?
create sequence s_kod_sluzby.
-
ako s tym serial a money ? Number ?
-
Hovorím že pozeraj fyzickú schému. Vo fyzickej tam máš number.
-
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement
create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?
create sequence s_kod_sluzby.
určite ? na cviku sme robili nejake tabulky so sekvenciou a dali sme s_nazov_tabulky ...nie názov stĺpca :) ale keď stĺpec tak stĺpec :P
-
Nie, ja tak viem, že treba názov stĺpca. A tak mi to aj funguje správne.
-
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement
create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?
create sequence s_kod_sluzby.
určite ? na cviku sme robili nejake tabulky so sekvenciou a dali sme s_nazov_tabulky ...nie názov stĺpca :) ale keď stĺpec tak stĺpec :P
V podstate to máš jedno, ako si to pomenuješ. Keď budeš vkladať hodnoty to tabuľky, vložíš len volanie sekvencie s_evc.NEXTVAL. Mne to viac pasuje, keď má sekvencia rovnaké meno ako príslušný stĺpec tabuľky. Ale každý má iný vkus ;) Tabuľka môže mať aj tak len jeden stĺpec s autoincrementom (ale dá sa to obísť).
-
Tabuľka sluzba
· hodnoty v stĺpci kod_sluzby sú autoincrement
create sequence s_sluzba ... alebo s_kod_sluzby ? názov tabulky alebo názov stĺpca ?
create sequence s_kod_sluzby.
určite ? na cviku sme robili nejake tabulky so sekvenciou a dali sme s_nazov_tabulky ...nie názov stĺpca :) ale keď stĺpec tak stĺpec :P
V podstate to máš jedno, ako si to pomenuješ. Keď budeš vkladať hodnoty to tabuľky, vložíš len volanie sekvencie s_evc.NEXTVAL. Mne to viac pasuje, keď má sekvencia rovnaké meno ako príslušný stĺpec tabuľky. Ale každý má iný vkus ;) Tabuľka môže mať aj tak len jeden stĺpec s autoincrementom (ale dá sa to obísť).
Odkial vlastne databaza vie, ktory stlpec inkrementovat? Podla PRIMARY KEY? Asi tomu nerozumiem celkom dobre.
-
Odkial vlastne databaza vie, ktory stlpec inkrementovat? Podla PRIMARY KEY? Asi tomu nerozumiem celkom dobre.
Databáza to vie podľa sekvencie, ktorú si nastavíš. V našom prípade:
Máme tabuľku sluzba:
create table sluzba(
kod_sluzby .......................,
nazov_sluzby .......................,
cena_sluzby .......................,
..............................................
);
a sekvenciu:
create sequence s_kod_sluzby
start with 1
increment by 1;
Teda, máme vytvorenú tabuľku, zatiaľ v nej nie sú žiadne údaje. Skúsime ich tam vložiť (INSERT budeme riešiť tento týždeň):
insert into sluzba(kod_sluzby,nazov_sluzby,cena_sluzby) values(
s_kod_sluzby.NEXTVAL,
'vymena oleja',
86.99);
A pozrime si výstup:
select * from sluzba;
KOD_SLUZBY NAZOV_SLUZBY CENA_SLUZBY
---------- -------------------- -----------
1 vymena oleja 86,99
Databáza zistila, že v tabuľke nemáme nič. V sekvencii máme nastavené, že začíname od jednotky (start with 1). Teraz vložme druhý údaj (druhú zákazku/službu):
insert into sluzba(kod_sluzby,nazov_sluzby,cena_sluzby) values(
s_kod_sluzby.NEXTVAL,
'vymena pneu',
45.26);
A checknime výstup:
select * from sluzba;
KOD_SLUZBY NAZOV_SLUZBY CENA_SLUZBY
---------- -------------------- -----------
2 vymena pneu 45,26
1 vymena oleja 86,99
Databáza zistila, že v tabuľke máme zákazku s ev. č. 1 a keďže v sekvencii máme nastavené inkrementovanie po jednej, tak ďalšiemu riadku tabuľky (zákazke/službe) priradí dvojku.
O primary key napíšem do ďalšieho príspevku.
-
Primary key
To je nejaký primárny kľúč tabuľky, teda stĺpec tabuľky, kde v každom riadku bude jedinečný údaj. V tabuľke sluzba to je stĺpec evc. Každá zákazka/služba bude mať svoje vlastné evidenčné číslo.
Alebo iný príklad. Predstav si db na matrike. Každý človek dostane po narodení svoje rodné číslo, ktoré je jedinečné. Neexistujú dvaja ľudia s rovnakým RČ. Teda v db na matrike je nejaký stĺpec rodne_cislo a je na 100% nastavený ako primary_key. Ak by sme sa tam pokúsili vložiť človeka s rodným číslom, ktoré je už obsadené, vypísalo by to chybu Duplicate entry '......' for key 'PRIMARY' (resp. niečo podobné - toto je hláška z MySQL. Oracle má možno inú. Môžeš si to skúsiť na svojej databáze a uvidíš, čo to bude hlásiť :))
EDIT: No, takže Oracle hádže pri duplicite niečo takéto:
ERROR v riadku 1:
ORA-00001: unique constraint (TvojLogin.SYS_C00243949) violated
Viac o tejto chybe: http://www.dba-oracle.com/sf_ora_00001_unique_constraint_violated.htm (http://www.dba-oracle.com/sf_ora_00001_unique_constraint_violated.htm)
-
sekvencia je na to inkrementovanie, hej ? A vztahy nemaju nic spolocne so sekvenciou, ci?
-
sekvencia je na to inkrementovanie, hej ?
Áno. V MySQLku je to lepšie, tam je auto_increment číslo uložené priamo v tabuľke a vôbec sa oňho nestaráš. V Oracle DB si urobíš sekvenciu a potom pri vkladaní údajov do tabuľky ju zavoláš (s_kod_sluzby.NEXTVAL), aby ti inkrementla hodnotu a vložila ju do príslušného stĺpca.
A vztahy nemaju nic spolocne so sekvenciou, ci?
Nemyslím, žeby to spolu nejako súviselo.
Foreign keys slúžia na to, aby databáza vedela dať do súvisu údaje. Napr.: v tabuľke auto máme poznamenanú ŠPZku. Je to PRIMARY KEY - nechceme, aby sme mali v tejto tabuľke nejaké auto dvakrát. ŠPZku máme aj v tabuľke asz. ŠPZ v tabuľke auto je "parent" a ŠPZ v tabuľke asz "child". Na základe tohto vzťahu si vieme zistiť, že auto s nejakou ŠPZkou malo toho a toho dňa takú a takú opravu. Pomocou ďalších vzťahov, ktoré sú v tej schéme predpísané vieme zistiť aj koľko tá oprava stála a kto túto zákazku prijal. To všetko sa dá vypísať do jednej peknej tabuľky pomocou príkazov JOIN, INNER JOIN, LEFT JOIN (ešte o nich bude reč na cvičeniach).
Existujú tri druhy vzťahov - 1:1, 1:n a m:n.
Popíšem na príkladoch.
Vzťah 1:1 - to je napr. vzťah muž:žena. V našej kultúre je zrejmé, že jedna žena má len jedného muža a naopak. Dá sa to aplikovať aj na školu - teda napr. učiteľ je/môže byť triedny len jednej triede a opačne - nejaká trieda má len jedného triedneho učiteľa.
Vzťah 1:n - to je prípad nášho autoservisu na všetkých troch vzťahoch. Jedno auto môže mať v db zapísaných viacero opráv. Jeden zamestnanec môže mať v db zapísaných viacero prijatých zákaziek (no však bodaj by aj nie, ináč by taký autoservis veľmi rýchlo skrachoval ;D).
Vzťah m:n - toto je prípad vzťahu viac:viac. Teda napr. v škole - každý učiteľ učí veľa žiakov a každý jeden žiak chodí na rôzne hodiny ku viacerým učiteľom.
Sekvencie slúžia čisto len na inkrementáciu hodnôt pri vkladaní údajov do tabuliek.
Heh, som sa nejako rozpísal, tak snáď to niekto dočíta do konca ;D
-
diky za to rozpisanie, mne to pomohlo
-
Yeah! ^^ Vdaka veteran, normalne sa oplatilo byt za blbeho a opytat sa :D
-
a toto, veteran ... ked je podmienka, ze hodnota v stĺpci cena_sluzby je vždy väčšia ako 0
tak to dam len na koniec tabulky ze CHECK (cena_sluzby>0) ? .. elbo niekde som nasiel tak podobnu podmienku, ze constraint cena_sluzby_check CHECK (cena_sluzby>0) ...
-
Yeah! ^^ Vdaka veteran, normalne sa oplatilo byt za blbeho a opytat sa :D
nz :) Radšej sa spýtať a byť blbý raz, ako sa nespýtať a byť blbý navždy ;)
a toto, veteran ... ked je podmienka, ze hodnota v stĺpci cena_sluzby je vždy väčšia ako 0
tak to dam len na koniec tabulky ze CHECK (cena_sluzby>0) ? .. elbo niekde som nasiel tak podobnu podmienku, ze constraint cena_sluzby_check CHECK (cena_sluzby>0) ...
Más zrejme na mysli dopyt:
alter table sluzba add constraint cena_sluzby_check CHECK (cena_sluzby>0);
Toto použiješ, keď si CHECK nenastavil pri prvotnej definícii tabuľky. Prípadne, keď potrebuješ zmeniť nejakú podmienku, resp. nejakú pridať, odobrať a pod. ;) Volá sa to Out-of-line constraint - integritné obmedzenie vložené do definície tabuľky.
-
Kto ma zauje .. zadanie PM
-
na linux, konkretne ubuntu niekto skusal davat tu databazu s sql plus ?
-
vidim ze veteran sa rozbehol tak teda prosim ta ako na to :
• hodnoty v stĺpci evc sú autoincrement
najprv som si vytvoril sekvenciu s_evc start with 1 increment by 1
a teraz si vytvaram tabulku a pre evc mam podla zadania
evc number(6) primary key xxx
ale ma to byt autoincrement, co este mam dopisat namiesto xxx
?
-
hodnoty v stĺpci evc sú autoincrement
najprv som si vytvoril sekvenciu s_evc start with 1 increment by 1
a teraz si vytvaram tabulku a pre evc mam podla zadania
evc number(6) primary key xxx
ale ma to byt autoincrement, co este mam dopisat namiesto xxx
Nič také ako auto increment tam nemôžeš napísať. Oracle by ti vyhodilo hlášku ORA-00907: missing right parenthesis.
Na auto increment máš práve tú sekvenciu. Do definície tabuľky netreba vpisovať nič. Keď budeš vkladať riadky do tejto tabuľky, potom zavoláš sekvenciu cez s_evc.nextVal. Do evc ti to vloží jednotku a aktuálnu hodnotu sekvencie (s_evc.currVal) inkrementne o 1 (na dvojku). Pri vkladaní ďalšieho riadku do tabuľky bude do evc vložená dvojka a hodnota sekvencie sa inkrementne na trojku.
AUTO_INCREMENT sa do definície tabuľky píše v MySQL. Oracle na to má sekvencie... V MySQL by definícia tabuľky zamestnanec vyzerala asi takto:
CREATE TABLE zamestnanec (
evc int(6) NOT NULL AUTO_INCREMENT,
..................
PRIMARY KEY (evc)
) ENGINE=MyISAM;
-
s tym editf suborom, do ktoreho sa zapisuje to co pisem do sql plus nemate taky problem, ze sa vam tam zapisuje vsetko len ak zadate tie prikazy
set editf c:\temp\ab123cd.txt
set long 100000
spool c:\temp\zaznam.txt
a potom ked zatvorite sql plus a znovu otvorite tak vam to tam uz nezapisuje ? Lebo mne to takto robi .. ze uz po druhom otvoreni mi to tam nezapisuje, musim zas zadat tie prikazy a pritom mi zmaze predchadzajuci obsah toho suboru
-
s tym editf suborom, do ktoreho sa zapisuje to co pisem do sql plus nemate taky problem, ze sa vam tam zapisuje vsetko len ak zadate tie prikazy
set editf c:\temp\ab123cd.txt
set long 100000
spool c:\temp\zaznam.txt
a potom ked zatvorite sql plus a znovu otvorite tak vam to tam uz nezapisuje ? Lebo mne to takto robi .. ze uz po druhom otvoreni mi to tam nezapisuje, musim zas zadat tie prikazy a pritom mi zmaze predchadzajuci obsah toho suboru
po každom spustení SQL+ si tie 3 riadky napíš furt, nepamätá si to...
ďalej, do buffra ide výstup až potom, čo klienta zavrieš, teda ak pracuješ ale SQL+ stále beží, ten súbor sa nezmení, až keď ho zavrieš
a veľmi odporúčam na koniec toho posledného príkazu dopísať app (zrejme od slova append - pridať) - miesto prepísania celého buffru Ti to len pridá na koniec nový obsah, mne je takto lepšie, neviem ako ostatným. Takže posledný riadok bude vyzerať:
spool c:\temp\zaznam.txt app
-
dá sa nejako aspoň čiastočne zrýchliť INSERT viacerých riadkov? Syntax z MySQL mi nefunguje a pre tento krát som to vložil všetko ako ťulpas manuálne, ale ak existuje elegentnejšie riešenie v oracli, rád sa to naučím...
Ako postupovať v poslednej úlohe? Opäť to nainsertovať manuálne, alebo je na to nejaký iný (aspoň čiastočne automatický) postup, keďže sú tam už nejaké vzťahy (FK) ?
-
dá sa nejako aspoň čiastočne zrýchliť INSERT viacerých riadkov? Syntax z MySQL mi nefunguje a pre tento krát som to vložil všetko ako ťulpas manuálne, ale ak existuje elegentnejšie riešenie v oracli, rád sa to naučím...
Syntax z MySQL je super, v Oracli je niečo takéto:
insert all
into tablename values (......)
into tablename values (......)
.......
select * from dual;
Takže veľa znakov neušetríš :D
Problém ale nastáva, keď musíš použiť sekvenciu. Predošlý príklad sa v takom prípade použiť nedá. Treba urobiť čosi také:
insert into tablename(id,col2,col3)
select sequencename, inner_view.*
from (select 'value_for_col2','value_for_col3' someval from dual union all
select 'value_for_col2','value_for_col3' someval from dual union all
.......................................
select 'value_for_col2','value_for_col3' someval from dual)
inner_view;
Na môj vkus trošku komplikované...
-
niekto kto sa rozumie do tej autoopravovne ?? potreboval by som skontrolovat to co som spravil :)
edit// mas to tam , dik ;)
-
niekto kto sa rozumie do tej autoopravovne ?? potreboval by som skontrolovat to co som spravil :)
šup do PM ;)
edit// nz ;)
-
lol ze cviko bez domacej to ja som o takom lem snival :D sme na kazdom mali nove a horsie zadania :D
skym si mal cviko ?
ja som mal trosku insie databazy nez inf :D
-
Keby niekto ma problemy, tak http://www.tu-ke.com/forum/2-rocnik-56/ (http://www.tu-ke.com/forum/2-rocnik-56/)!!!!!!!!-databazove-systemy-zadania-!!!!!!!!!-6255/
-
ako zmazat vsetky data z tabulky ? Z asz to islo prikazom truncate table asz; ale z ostanych nejde kvoli tym vztahom, ako to teda odtial zmazem ?
-
ako zmazat vsetky data z tabulky ? Z asz to islo prikazom truncate table asz; ale z ostanych nejde kvoli tym vztahom, ako to teda odtial zmazem ?
delete from table_name;
Ak si pri vytváraní tabuliek použil ON DELETE CASCADE, tak po vymazaní napr. tabuľky auto, sa vymažú údaje aj z tabuľky asz.
-
nedal som tam to on delete cascade ..
a este nieco ... ako vlozit do asz tabulky nejake hodnoty pre konkretne auto ? Autu KE111-XX boli poskytnuté nasledovné služby:
dna 30.12.2010 vymena oleja zamestnancom Janko Hrasko
dna 2.1.2011 vymena vody zamestnancom Juro Janosik
dna 2.1.2011 vysavanie zamestnancom Juro Janosik
-
nedal som tam to on delete cascade ..
Fungovať by to aj tak malo ;) Najprv vymaž asz a potom sa budú dať aj tie ostatné.
a este nieco ... ako vlozit do asz tabulky nejake hodnoty pre konkretne auto ? Autu KE111-XX boli poskytnuté nasledovné služby:
dna 30.12.2010 vymena oleja zamestnancom Janko Hrasko
dna 2.1.2011 vymena vody zamestnancom Juro Janosik
dna 2.1.2011 vysavanie zamestnancom Juro Janosik
Tabuľka asz má stĺpce spz, kod_sluzby, evc, datum_sluzby.
Čiže "dna 30.12.2010 vymena oleja zamestnancom Janko Hrasko":
do stĺpca spz vložíš reťazec KE111-XX. Výmena oleja má v tabuľke sluzba kód 1, teda do stĺpca kod_sluzby vložíš 1. Zákazku vykonal zamestnanec Janko Hraško, ktorý má v tabuľke zamestnanec evc 1, teda do stĺpca evc v tabuľke asz vložíš 1.
-
preco ked napisem: insert into asz values('KE111-XX','22','23','2/1/2011');
mi napise: ORA-02291: integrity constraint (xy123ab.FK_ASZ_ASZ2_SLUZBA) violated - parent
key not found
(cisluje mi od 21 .. a nie je tam '22','22' lebo som spravil preklep pri vkladani Jura Janosika tak preskocilo sa jedno cislo
// prve mi zobralo a toto druhe uz nie
// aj nasledujuce insert into asz values('KE111-XX','29','22','2/1/2011'); mi vezme normalne
// toto tiez neberie: insert into asz values('PO11-XX','23','22','3/1/2011');
// dalsei neberie: insert into asz(spz,kod_sluzby,evc) values('ZA111-XX','26','22');
co s tym moze byt ? ostatne vsetko zobralo
-
a to tam mas az 22 pracovnikov a 23 sluzieb (alebo naopak nepamatam presne) lebo za normalnych okolnosti tak bolo len okolo 7 pracovnikov a taktiez cca 7 sluzieb... alebo mas tu sekvenciu posunutu ?
// toto tiez neberie: insert into asz values('PO11-XX','23','22','3/1/2011'); - nema tam byt nahodou PO111-XX
// dalsei neberie: insert into asz(spz,kod_sluzby,evc) values('ZA111-XX','26','22'); - nemas tam datum , ak ma bzt aktualny´musis tam dat datasys
-
hej od 21 zacinaju cisla ... aj ked neviem preco
daval som starts with 1 increment by 1
-
// toto tiez neberie: insert into asz values('PO11-XX','23','22','3/1/2011'); - nema tam byt nahodou PO111-XX
// dalsei neberie: insert into asz(spz,kod_sluzby,evc) values('ZA111-XX','26','22'); - nemas tam datum , ak ma bzt aktualny´musis tam dat datasys, bez datumu to nemozes dat sa mi zda lebo v tabulke asz je datum not null..
a tu insert into asz values('KE111-XX','22','23','2/1/2011'); skus pozriet ci mas v tabulke sluzba take cislo sluzby, select *from nazov_tabulkz;
-
mal som ... teraz som chcel pozriet a nic z toho co som vkladal mi tam neostalo !!! ako to je mozne ?????
Som dal select * from sluzba; a mi to vypisalo iba jedno co som skusal niekedy minuly tyzden vkladat xD WTF ?
-
;D ;D zda sa mi ze na cviku nas upozornoval ze po tom ako tam tie svoje hodnoty nahadzes musis zadat prikaz commit; aby sa tie tvoje data realne zapisali a ostali tam..
-
kurnik, to mohla aj Lalova povedat :D ... som sa s tym sral zbytocne, mozem odznova, super :D
do rici ani v tom subore to neni :D
-
jj no mozes xDD a ukoncuj aj SQLko korektne prikazom exit...
-
fajn, dik
-
ja som si pekne sekvencie vymazal a nanovo nahodil aby mi to nehádzalo dementne čísla :P pekne od 1 mi to čisluje a kedže som daval pozor a nepomýlil som sa, tak to mám všetko o +1 inkrementovane a je v tom poriadok :)
-
preco ked napisem: insert into asz values('KE111-XX','22','23','2/1/2011');
mi napise: ORA-02291: integrity constraint (xy123ab.FK_ASZ_ASZ2_SLUZBA) violated - parent
key not found
Prečo si dával čísla 22 a 23 do apostrofov? Nie sú tie hodnoty náhodou typu number()?
;D ;D zda sa mi ze na cviku nas upozornoval ze po tom ako tam tie svoje hodnoty nahadzes musis zadat prikaz commit; aby sa tie tvoje data realne zapisali a ostali tam..
jj no mozes xDD a ukoncuj aj SQLko korektne prikazom exit...
Doteraz som commit nikdy nedával a vždy mi všetko ostalo tak, ako som to vložil. Problém je presne v tom príkaze exit. Ak vypneš SQL+ červeným krížikom, nič sa neuloží.
-
ja som si myslel, ze vsetky hodnoty treba davat do apostrofov :D
-
ako sa da skontrolovat struktura tabulky?
3. skontrolujte štruktúru tabulky zam
-
ja som si myslel, ze vsetky hodnoty treba davat do apostrofov :D
Len reťazce (stringy - varchar, char a dátumy). Čísla idú bez úvodzoviek.
ako sa da skontrolovat struktura tabulky?
3. skontrolujte štruktúru tabulky zam
desc zam;
-
ked mam tie vztahy ... M:N sa robi cez dalsiu tabulku
ale tie 1:1 a 1:N sa ako robia v SQL ?
iba dam to tej dabulky kde je ten vztah ku stlpcu, ze REFERENCES nazov_tabulky(stlpec) ? Ci nejak inac sa robi 1:N a 1:1 ?
-
ked mam tie vztahy ... M:N sa robi cez dalsiu tabulku
ale tie 1:1 a 1:N sa ako robia v SQL ?
iba dam to tej dabulky kde je ten vztah ku stlpcu, ze REFERENCES nazov_tabulky(stlpec) ? Ci nejak inac sa robi 1:N a 1:1 ?
Vzťah 1:n - jeden zamestnanec môže mať zapísaných viac vykonaných služieb v autoservise. Teda ináč povedané, evc zamestnanca v tabuľke asz nie je primary key. Ak by bolo, tak by mohol mať každý jeden zamestnanec zapísanú len jednu vykonanú službu (vzťah 1:1).
-
hej chapem co to znamena, ale keby nieco take bolo, ze mas napriklad tabulku zamestnanec kd eje evc, meno, priezvisko a tabulku sluzba kde je cislo_sluzby, nazov_sluzby ... a vztah 1:N ... cize jeden zamestnanec moze vykonavat viac sluzieb ... tak ako sa to zapise v SQL ?
-
hej chapem co to znamena, ale keby nieco take bolo, ze mas napriklad tabulku zamestnanec kd eje evc, meno, priezvisko a tabulku sluzba kde je cislo_sluzby, nazov_sluzby ... a vztah 1:N ... cize jeden zamestnanec moze vykonavat viac sluzieb ... tak ako sa to zapise v SQL ?
Pri vzťahu 1:n platí, že primary key zo strany 1 musí byť pridaný na stranu n ako foreign key.
Odporúčam preštudovať toto: http://db.grussell.org/section006.html#_Toc67114425 (http://db.grussell.org/section006.html#_Toc67114425)
-
mozete mi niekto pomoct?
ked napisem : insert into asz values('KE111-XX',1,1,'30-12-2010');
tak mi vyhodi chybu : ERROR na øádku 1:
ORA-02291: integrity constraint (MK405ZK.SYS_C00252427) violated - parent key
not found
co asi mam zle?
-
mozete mi niekto pomoct?
ked napisem : insert into asz values('KE111-XX',1,1,'30-12-2010');
tak mi vyhodi chybu : ERROR na øádku 1:
ORA-02291: integrity constraint (MK405ZK.SYS_C00252427) violated - parent key
not found
co asi mam zle?
V tabuľke auto nemáš auto s ŠPZ KE111-XX.
http://ora-02291.ora-code.com/ (http://ora-02291.ora-code.com/)
Cause: A foreign key value has no matching primary key value.
Action: Delete the foreign key or add a matching primary key.
-
mozete mi niekto pomoct?
ked napisem : insert into asz values('KE111-XX',1,1,'30-12-2010');
tak mi vyhodi chybu : ERROR na øádku 1:
ORA-02291: integrity constraint (MK405ZK.SYS_C00252427) violated - parent key
not found
co asi mam zle?
V tabuľke auto nemáš auto s ŠPZ KE111-XX.
http://ora-02291.ora-code.com/ (http://ora-02291.ora-code.com/)
Cause: A foreign key value has no matching primary key value.
Action: Delete the foreign key or add a matching primary key.
nechapem, ved insertoval som tam tu spz,
tu je select * from auto:
SPZ T ROK_VYRO
-------- - --------
KE111-XX o 01.02.90
KE222-XX O 11.12.99
KE111-YY o 01.05.89
PO111-XX N 01.02.91
PO333-XX o 01.05.90
NR111-XX p 12.06.98
ZA111-XX O 22.11.99
KE111-ZZ n 01.02.90
NR111-YY o 01.02.91
KE100-XX P 01.02.92
-
Aha, no chyba môže byť aj v tom, že ti chýba služba s kódom 1 alebo zamestnanec s kódom 1.
-
Aha, no chyba môže byť aj v tom, že ti chýba služba s kódom 1 alebo zamestnanec s kódom 1.
no v tom tiez nie je chyba
SQL> select * from sluzba;
KOD_SLUZBY NAZOV_SLUZBY CENA_SLUZBY
---------- -------------------- -----------
1 vymena oleja 55
SQL> select * from zam;
EVC MENO PRIEZVISKO
---------- ---------- -------------
1 Janko Hrasko
-
Fúha. Nechápem potom, prečo vypisuje takú chybu...
For an insert statement, this ORA-02291 error is common when you are trying to insert a child without a matching parent, as defined by a foreign key constraint. In that case, you need to add the parent row to the table and then re-insert your child table row.
Ešte by som skúsil zadať insert takto (vrátane vymenovania stĺpcov):
insert into asz (spz,kod_sluzby,evc,datum_sluzby) values ('KE111-XX',1,1,'30/12/10');
-
mne to tiez robilo a nevedel som co s tym mam robit ... potom som zmazal vsetky tabulky a sekvencie a nahodil ich znova a uz to islo
-
Vie mi niekto vysvetlit aky je to:
slaby vztah
supertyp, subtyp
?
Aj na priklade, napr. v scheme autoservis, s ktorou robime ktory vztah tam je slaby a ktory supertyp ak tam su take ?
-
pri zadaniach si dajte pozor na intregitu databazy (referencna, domenova, entitna integrita atd) ... vela ludi na to zabuda a sposobuje to problemy pri aktualizovani udajov v databaze (insert, update, delete)
-
ako spravim toto? zotrieďte podľa oddelenia a v rámci oddelenia podľa priezviska. Pre kontrolu vypíšte aj oddelenie.
-
hlavne to ma zaujima, ze ako roztriedit dvakrat .. ze najprv podla department_id a potom podla priezviska
-
ako spravim toto? zotrieďte podľa oddelenia a v rámci oddelenia podľa priezviska. Pre kontrolu vypíšte aj oddelenie.
select last_name, department_id from hr.employees order by 2,1;
-
dik .. a do toho zapisu relacnej algebry sa nezapisuje to order by nijak ?
-
dik .. a do toho zapisu relacnej algebry sa nezapisuje to order by nijak ?
Zapisuje sa, ale na prednáške to nebolo, takže som to nepísal. ;)
-
6. uloha: Zistite first_name, last_name zamestnancov, ktorí nie sú v žiadnom oddelení. Pre kontrolu vypíšte aj id oddelenia.
som dal: select first_name, last_name, department_id from hr.employees where department_id is null;
a mi dalo len jeden riadok ... vo vysledkoch je, ze ma byt 72 raidkov .... co mam zle ?
-
6. uloha: Zistite first_name, last_name zamestnancov, ktorí nie sú v žiadnom oddelení. Pre kontrolu vypíšte aj id oddelenia.
som dal: select first_name, last_name, department_id from hr.employees where department_id is null;
a mi dalo len jeden riadok ... vo vysledkoch je, ze ma byt 72 raidkov .... co mam zle ?
Mám pocit, že chyba bude vo výsledkoch. Keď si dám vypísať všetkých zamestnancov (select first_name, last_name, department_id from hr.employees), tak NULL pri department_id má len jeden (Grant Kimbereley).
// EDIT: Inak, IMO je chyba aj pri 6. cvičení v 12. úlohe (má byť 11 výsledkov, v skutočnosti je ich ale až 16).
-
a este s tymto by som potreboval pomoct: 11. Vypíšte spz áut, ktorým boli poskytnuté služby. Duplicity vylúčte.
Ako vylucim duplicity ? ... iba tam dam DISTINCT ?
-
a este s tymto by som potreboval pomoct: 11. Vypíšte spz áut, ktorým boli poskytnuté služby. Duplicity vylúčte.
Ako vylucim duplicity ?
SELECT UNIQUE alebo SELECT DISTINCT. Ak si old-school, tak použi to prvé, ak chceš ísť podľa najnovších Oracle trendov, použi to druhé ;D Sú to ekvivalentné príkazy ;)
-
ok, dakujem ... a este toto, ze ked pisem tu relacnu algebru tak je jedno ci naskor vyberiem stlpce cez "PI" a az potom robim tu podmienku alebo opacne ?
-
ok, dakujem ... a este toto, ze ked pisem tu relacnu algebru tak je jedno ci naskor vyberiem stlpce cez "PI" a az potom robim tu podmienku alebo opacne ?
Nie je to jedno.
-
nie ? A kedy je to ako ? ... nie je jedno ci naskor vyberiem stlpce z tabulky ktore mi treba a potom z nich povyberam len tie raidky, ktore splnaju pomienku ... alebo ci najskor vyberiem vsetky raidky splnajuce podmienku a potom z niych vyberiem len tie stlpce ktore potrebujem vypisat ?
vysledok je rovnaky, nie ?
-
nie ? A kedy je to ako ? ... nie je jedno ci naskor vyberiem stlpce z tabulky ktore mi treba a potom z nich povyberam len tie raidky, ktore splnaju pomienku ... alebo ci najskor vyberiem vsetky raidky splnajuce podmienku a potom z niych vyberiem len tie stlpce ktore potrebujem vypisat ?
vysledok je rovnaky, nie ?
A čo v prípade, ak máš vypísať len také stĺpce, ktorých sa netýka podmienka? ;) Dajme tomu, že máš vybrať first_name a last_name, ale podmienka sa týka napr. hire_date. Ty si najprv vyberieš všetky riadky z tabuľky, ale v nich len stĺpce first_name a last_name. Ako z tohto výberu potom určíš, či je splnená daná podmienka pre hire_date? Nijak. Musíš to urobiť presne opačne. Najprv otestovať podmienku a z riadkov, ktoré ju spĺňajú povyberať tie stĺpce, ktoré treba.
-
no to mas pravdu, ale take v tych ulohach tusim nie je :D
... ale tak radsej davam vsade nasjkor podmienku a potom vyberanie ... tak to nemoze byt zle, snad
-
... ale tak radsej davam vsade nasjkor podmienku a potom vyberanie ... tak to nemoze byt zle, snad
Existujú určite prípady, kedy je to oveľa výhodnejšie písať opačne (nič konkrétne mi ale nenapadá :D). Ale nemyslím, že sa dá niečo pokaziť tým, že sa to napíše "štandardne" (PROJECT stĺpce (SELECT podmienky)).
Takto vyzerá štandardné mapovanie selekcie a projekcie:
(https://www.tu-ke.com/forum/proxy.php?request=http%3A%2F%2Fdb.grussell.org%2Fco22001%2520notes_files%2Fimage118.gif&hash=0e8444c6a182f9249f9ec6dff1b5a402496aeb9e)
-
Ako uplne odstranim tabulku?? myslim tym aj tie haky baky co tam ostanu ked dam select * from cat; ?
-
Ako uplne odstranim tabulku?? myslim tym aj tie haky baky co tam ostanu ked dam select * from cat; ?
purge recyclebin;
-
cv6 - 6. uloha mate to tak ako vo vysledkoch ??
-
cv6 - 6. uloha mate to tak ako vo vysledkoch ??
Ja mám o jeden výsledok viac (16). Ten posledný už (pre dnešný deň) pracuje viac ako 200 mesiacov (200 mesiacov a 9 dní).
-
cv6 - 6. uloha mate to tak ako vo vysledkoch ??
Ja mám o jeden výsledok viac (16). Ten posledný už (pre dnešný deň) pracuje viac ako 200 mesiacov (200 mesiacov a 9 dní).
tak, tak, bohvie kedy to ona selectovala a preto sa to môže líšiť...a inak, ten Current Date čo trebalo zapísať v tvare "201237" tak to ste ako riešili ? lebo ja som to riešil tak, že mi to píše v tvare "YYYYMMDD" čiže pre dnešny dátum by mi vypisalo "20120323" ... a ona nulu nemá vo výsledku, vadí to? :D alebo ako to ona riešila?
-
ta forma je vecou systemu ako ten datum reprezentuje. Myslim ze to je dobre tak
-
lebo ja som to riešil tak, že mi to píše v tvare "YYYYMMDD" čiže pre dnešny dátum by mi vypisalo "20120323" ... a ona nulu nemá vo výsledku, vadí to? :D alebo ako to ona riešila?
AFAIK, v Oracli existuje len jedna číselná reprezentácia mesiaca a to MM (no a ptm ešte RM, rímske čísla). Aj mne to píše 03, ale myslím, že je to OK.
-
lebo ja som to riešil tak, že mi to píše v tvare "YYYYMMDD" čiže pre dnešny dátum by mi vypisalo "20120323" ... a ona nulu nemá vo výsledku, vadí to? :D alebo ako to ona riešila?
AFAIK, v Oracli existuje len jedna číselná reprezentácia mesiaca a to MM (no a ptm ešte RM, rímske čísla). Aj mne to píše 03, ale myslím, že je to OK.
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
select EXTRACT(MONTH FROM sysdate) from dual;
-
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D
-
jak spravim toto: 5. Ohraničte last_name spredu aj zozadu symbolom * ?
LPAD a RPAD su na doplnenie, lenze tam treba zadat dlzku, aku maju mat vsetky retazce a zvysok mi doplni hviezdickami ...
-
jak spravim toto: 5. Ohraničte last_name spredu aj zozadu symbolom * ?
LPAD a RPAD su na doplnenie, lenze tam treba zadat dlzku, aku maju mat vsetky retazce a zvysok mi doplni hviezdickami ...
Dáš funkciu concat do funkcie concat (najprv hviezdička z jednej strany, potom z druhej).
-
a ta dalsia uloha, mam toto: SQL> SELECT employee_id,last_name, TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) "MESIACE" from hr.employees WHERE XXX>200 order by "MESIACE" DESC;
co mam dat miesto XXX ? ... "MESIACE" to neberie
a dik za ten concat
-
a ta dalsia uloha, mam toto: SQL> SELECT employee_id,last_name, TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) "MESIACE" from hr.employees WHERE XXX>200 order by "MESIACE" DESC;
co mam dat miesto XXX ? ... "MESIACE" to neberie
a dik za ten concat
"Mesiace" tam dať nemôžeš, pretože najskôr sa vykonáva klauzula WHERE a vtedy ešte nepoznáme kolónku "Mesiace" (v tom čase to meno ešte nemá) ;) Za XXX dosaď to, čo neskôr pomenuvávaš ako "Mesiace", teda TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)). Nie je to síce pekné riešenie, ale funguje. Krajšie sa to dá urobiť jedine cez two-level select-y (IMHO zbytočná robota).
-
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D
select to_char(sysdate,'YYYYfmMmfmDd') "Current Date"from dual;
:trestac:
-
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D
select to_char(sysdate,'YYYYfmMmfmDd') "Current Date"from dual;
:trestac:
No paráda :hug: Tu (http://ss64.com/ora/syntax-fmt.html) teda asi nebudú vypísané všetky formáty ;D
-
lenže ak si extractuješ mesiac napríkald zo sysdate tak ti vypíše "3" , nie "03" ...
select EXTRACT(MONTH FROM sysdate) from dual;
Problém je, že z extractu vieš vydolovať len jeden údaj :D
select to_char(sysdate,'YYYYfmMmfmDd') "Current Date"from dual;
:trestac:
No paráda :hug: Tu (http://ss64.com/ora/syntax-fmt.html) teda asi nebudú vypísané všetky formáty ;D
Formats that start with FM - zeros and blanks are suppressed.
e.g.
to_char(sysdate, 'FMMonth DD, YYYY'); will return 'June 9, 2005' not 'June 09 2005'
-
ked posielate ulohy na DBS tak tam davate len tie priakzy, ktore zadavate alebo aj vysledok, ktory vam ten prikaz vypise ?
+ 14. uloha - nemate tam uplne ine nazvy department name ?
-
ked posielate ulohy na DBS tak tam davate len tie priakzy, ktore zadavate alebo aj vysledok, ktory vam ten prikaz vypise ?
+ 14. uloha - nemate tam uplne ine nazvy department name ?
veď výsledok máš vypísany v tom pdf na moodli "Vypracovane výsledky"
14. úloha je výsledok opak 14tky, ktorá tam je napísana :D tam je výsledok IS NOT NULL a my máme dať IS NULL :D
-
aha, aj ma to napadlo, ze to bude opak, len som bol lenivy to vyskusat :D
-
Prosim vas, ake je heslo do moodla ? zacina na "d"
vopred dik =) A este ak si to pamatate kedy ma pani T. konzultacne hodiny.
-
Ak sa dobre pamätám, každá skupina má iné heslo.
-
7. select avg(salary) from hr.employees where department_id = 50;
MV1 ← σ department_id=50 (employees)
V ← F AVG salary (MV1)
8. select department_id, avg(salary) from hr.employees
group by department_id
order by 2;
V(department_id, priemer) ← department_id F AVG salary (employees)
mam dotaz, ze preco v tom druhom je tam v tej zatvorke V( priemer) a v prvom nieje, resp. kedy sa to dava, pls skuste mi vysvetlit
to su vzorove riesene priklady z moodla
-
7. select avg(salary) from hr.employees where department_id = 50;
MV1 ← σ department_id=50 (employees)
V ← F AVG salary (MV1)
8. select department_id, avg(salary) from hr.employees
group by department_id
order by 2;
V(department_id, priemer) ← department_id F AVG salary (employees)
mam dotaz, ze preco v tom druhom je tam v tej zatvorke V( priemer) a v prvom nieje, resp. kedy sa to dava, pls skuste mi vysvetlit
to su vzorove riesene priklady z moodla
Ak sa nemýlim, tak je to preto, lebo v sedmičke pracuješ len s jedným stĺpcom. Teda do zátvorky nemusíš nič písať. Akonáhle robíš s viacerými stĺpcami, musíš to uviesť do zátvorky.
-
mozete tu postnut to pdfko s tymi vzorovymi prikladmi ? dik
-
tu je, niekde ku koncu su tie priklady
-
select max(salary), round(avg(salary)) from hr.employees;
algebra bude:
V(max(salary),round(avg(salary)) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(max(salary),round(priemer) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(round(priemer) ) <-- F MAX salary, AVG salary (employees)
-
select max(salary), round(avg(salary)) from hr.employees;
algebra bude:
V(max(salary),round(avg(salary)) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(max(salary),round(priemer) ) <-- F MAX salary, AVG salary (employees)
alebo:
V(round(priemer) ) <-- F MAX salary, AVG salary (employees)
Ja by som dal
V(maximum,round(priemer)) <-- F MAX salary, AVG salary (employees)
-
Tiež tak som to dal.
-
toto mam dobre takto?
select AVG(salary), COUNT(*) "Total" from hr.employees where department_id=60;
MV1 ← sigma department_id=60 (employees)
V ← F AVG salary, F COUNT employee_id (MV1)
-
toto mam dobre takto?
select AVG(salary), COUNT(*) "Total" from hr.employees where department_id=60;
MV1 ← sigma department_id=60 (employees)
V ← F AVG salary, F COUNT employee_id (MV1)
DDL skript je OK. V RA netreba písať pred každou agg. funkciou F. Stačí raz.
-
dik .. a je to zle ked tam je viackrat ? .. ci je to jedno ?
-
dik .. a je to zle ked tam je viackrat ? .. ci je to jedno ?
Nvm či je to zle, ale čo sú vzorové príklady ku cvičeniam, tak tam je F len raz. Takže by som sa toho radšej držal ;)
-
no ja v tych vyriesenych prikladoch nevidim taky priklad kde by boli v jednom priklade pouzite dve funkcie .. vsade je len po jednej ... kde tam vidis taky priklad ? .. tu je pouzite AVG aj COUNT .. ale v tych vzorovych je vsade len bud AVG alebo COUNT ... nikde nie su obe v jednom
-
no ja v tych vyriesenych prikladoch nevidim taky priklad kde by boli v jednom priklade pouzite dve funkcie .. vsade je len po jednej ... kde tam vidis taky priklad ? .. tu je pouzite AVG aj COUNT .. ale v tych vzorovych je vsade len bud AVG alebo COUNT ... nikde nie su obe v jednom
8. cvičenie, príklady na cvičenie, príklad č. 5, strana 10/13
-
aha, OK ... 8. cviko som este nepozeral
-
este toto, dobre je takto? asi 11. uloha
select SUM(salary), department_id from hr.employees group by department_id;
V(sucet, department_id) ← F SUM salary, department_id (employees)
-
este toto, dobre je takto? asi 11. uloha
select SUM(salary), department_id from hr.employees group by department_id;
V(sucet, department_id) ← F SUM salary, department_id (employees)
Skript OK. V RA treba department_id písať pred F, tam nemáš nijakú agg. funkciu. Teda:
V(sucet, department_id) ← department_id F SUM salary (employees)
-
select department_id, job_id, count(*) from hr.employees group by department_id, job_id order by 1;
V(department_id, job_id, pocet) ← department_id, job_id F COUNT employee_id (employees)
1. do zatvorky k V piseme len vtedy ak mame viac stlpcov, alebo aj vtedy ak mame len jeden ?
2. department_id, job_id ktore je pred Fkom, je tam preto lebo je to group podla department_id, job_id ?
3. za Fko davam vsetky "stlpce" ale kedze department_id, job_id je uz red fkom, tak to tam uz dalsi krat nedavam ?
dobre rozumiem ?
-
1. do zatvorky k V piseme len vtedy ak mame viac stlpcov, alebo aj vtedy ak mame len jeden ?
Zátvorka nemusí byť len pri V, ale aj pri akomkoľvek MVx. ;)
Platí, že do zátvorky sa píšu názvy stĺpcov vtedy, ak je na pravej strane agregačná funkcia. A potom tú zátvorku opakuješ pri ďalších nasledujúcich MVx a na konci aj pri V.
Keď máš len jeden stĺpec, väčšinou nepíšeš nič. To sa stáva vtedy, keď máš len jednu agregačnú funkciu, ktorá je zároveň jediným stĺpcom na výpis.
Ak máš však vypísať len round(count(employee_id)), tak v RA ku V napíšeš zátvorku: V(round(pocet)) ← F COUNT employee_id (employees), hoci tam máš len jediný stĺpec.
2. department_id, job_id ktore je pred Fkom, je tam preto lebo je to group podla department_id, job_id ?
V podstate áno. Za GROUP BY píšeš všetky stĺpce zo SELECTu okrem agregačných. Agregačné funkcie (za Fkom) sa píšu na konci, aby boli od "neagragačných stĺpcov" oddelené. Ak to napíšeš opačne, vyzeralo by to tak, že ideš počítať COUNT aj department_id aj job_id
3. za Fko davam vsetky "stlpce" ale kedze department_id, job_id je uz red fkom, tak to tam uz dalsi krat nedavam ?
To Fko označuje, že za ním budeš definovať agregačné funkcie (COUNT, AVG, SUM, MAX, MIN a pod.). Nič viac.
-
dik
-
select first_name,last_name,job_title, department_name from hr.employees join hr.jobs using (job_id) join hr.departments using (department_id) where job_title like '%Manager%';
RA:
MV1 <-- σ job_title like '%Manager%' jobs
MV2 <-- employees |><| job_id = jov_id jobs
MV3 <-- MV2 |><| department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)
alebo:
MV1 <-- employees |><| job_id = jov_id jobs
MV2 <-- MV1 |><| department_id = department_id departments
MV3 <-- σ job_title like '%Manager%' jobs
V <-- π first_name,last_name,job_title, department_name (MV3)
-
MV1 <-- employees |><| job_id = jov_id jobs
MV2 <-- MV1 |><| department_id = department_id departments
MV3 <-- σ job_title like '%Manager%' jobs
V <-- π first_name,last_name,job_title, department_name (MV3)
Keď v MV3 zmeníš to jobs na konci na MV2, bude to "nagyon jó" ;)
-
MV1 <-- employees |><| job_id = jov_id jobs
MV2 <-- MV1 |><| department_id = department_id departments
MV3 <-- σ job_title like '%Manager%' jobs
V <-- π first_name,last_name,job_title, department_name (MV3)
Keď v MV3 zmeníš to jobs na konci na MV2, bude to "nagyon jó" ;)
raz má selekciu v tých riešených úlohach ako prvú a raz pod join...kedy ma byť tak a kedy tak? :D
-
raz má selekciu v tých riešených úlohach ako prvú a raz pod join...kedy ma byť tak a kedy tak? :D
Vo väčšine prípadov dá použiť aj jeden, aj druhý spôsob (ale nemusí to platiť vždy). Potom ale:
MV1 <-- σ job_title like '%Manager%' jobs
MV2 <-- employees ⋈ job_id = job_id jobs <--- MV1
MV3 <-- MV2 ⋈ department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)
Ja to ale riešim na istotu, že si najprv spravím join a až potom selekciu.
-
select first_name,last_name,job_title, department_name from hr.employees join hr.jobs using (job_id) join hr.departments using (department_id) where job_title like '%Manager%';
a nie náhodou:
MV1 <-- σ job_title like '%Manager%' (jobs)
MV2 <-- MV1 ⋈ job_id = job_id jobs
MV3 <-- MV2 ⋈ department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)
???
lebo:
select spz,typ,count(*) from auto join asz using (spz) where typ in ('o','O') group by spz,typ having count(*) = 2;
MV1<-- σ s typ = 'o' OR typ = 'O' (auto)
MV2 <-- MV1 ⋈ spz = spz asz
MV3(spz,typ,pocet) <-- spz, typ F COUNT spz (MV2)
V(spz,typ,pocet) <-- s pocet = 2(MV3)
-
a nie náhodou:
MV1 <-- σ job_title like '%Manager%' (jobs)
MV2 <-- MV1 ⋈ job_id = job_id jobs <---- employees
MV3 <-- MV2 ⋈ department_id = department_id departments
V <-- π first_name,last_name,job_title, department_name (MV3)
Ak narážaš na poradie MV1 a tej druhej tabuľky (má tam byť employees, nie jobs), tak je to v tomto prípade IMHO jedno. Je jedno, či ku medzivýsledku pripojíš employees alebo ku employees medzivýsledok. Výsledok z toho bude rovnaký.
-
skontrolovali by ste mi toto prosim, ci to mam OK ?
select department_name, city, count(*)
from hr.employees OUTER join hr.departments using (department_id) join hr.locations using (location_id)
where city like 'Seattle'
group by department_name, city
having count(*)>=1 AND count(*)<=4
order by 3;
MV1 <- employees OUTER JOIN department_id=department_id departments
MV2 <- MV1 JOIN location_id=location_id locations
MV3 <- sigma city like 'Seattle' (MV2)
MV4(department_name, city, pocet) <- department_name, city, F count employee_id (MV3)
V(department_name, city, pocet) <- sigma pocet between 1 and 4 (MV4)
-
skontrolovali by ste mi toto prosim, ci to mam OK ?
select department_name, city, count(*)
from hr.employees OUTER join hr.departments using (department_id) join hr.locations using (location_id)
where city like 'Seattle'
group by department_name, city
having count(*)>=1 AND count(*)<=4
order by 3;
MV1 <- employees OUTER JOIN department_id=department_id departments
MV2 <- MV1 JOIN location_id=location_id locations
MV3 <- sigma city like 'Seattle' (MV2)
MV4(department_name, city, pocet) <- department_name, city, F count employee_id (MV3)
V(department_name, city, pocet) <- sigma pocet between 1 and 4 (MV4)
Je to dobre, ale nie je potrebné dávať tam OUTER JOIN. Stačí JOIN.
-
ked tam nedam OUTER ale iba JOIN tak sa to berie automaticky ako OUTER JOIN ? alebo INNER ?
-
ked tam nedam OUTER ale iba JOIN tak sa to berie automaticky ako OUTER JOIN ? alebo INNER ?
INNER.
Písať "OUTER JOIN" je zbytočné. Pri OUTER JOINe treba vždy špecifikovať o aký typ OUTER JOINU ide - LEFT (OUTER) JOIN, RIGHT (OUTER) JOIN, FULL (OUTER) JOIN. Bez toho to nemá zmysel ani písať. Kľúčové slovo OUTER je nepovinné, písať ho netreba, ale keď ho napíšeš bez špecifikácie (LEFT, RIGHT, FULL), to je akoby si ho ani nenapísal.
JOIN = INNER JOIN
LEFT JOIN = LEFT OUTER JOIN
RIGHT JOIN = RIGHT OUTER JOIN
FULL JOIN = FULL OUTER JOIN
-
uloha na dalsi tyzden: vytvorte fyzický (relačný) model tak, aby platili všetky integritné obmedzenia
to akoze fyzicku schemu treba spravit ? Taku ako je na moodle Schéma hr (fyzická schéma) pdf ??
-
to akoze fyzicku schemu treba spravit ? Taku ako je na moodle Schéma hr (fyzická schéma) pdf ??
Áno.
-
do tabulky zamul treba pridat stlpce idz a idul ?
a d ozamestnanec evrp ?
-
Yep.
-
a nie idz do rod_prislusnik ?
-
Ja mám idz aj v zamul aj v rod_prislusnik.
-
a nie idz do rod_prislusnik ?
idz musí ísť aj do rod_prislusnik, aj do zamul. V tabuľke zamul sa evidujú informácie o tom, koľko ktorý zamestnanec odpracoval na nejakej úlohe (bez idz by to asi nešlo :)). zamul je teda "sprostredkovateľom" vzťahu m:n medzi tabuľkami zamestnanec a uloha.
-
a toto ako spravit pri create table ?
atribúty datum_narodenia, start_date, ende_date sú v tvare: dd.mm.yyyy
// a teda to predosle takto:
do zamul: idul, idz
do zamestnanec: evrp
do rod_prislusnik: idz
a primary key v zamul bude (idul, idz) ?
takto je to spravne ? urcite aj v rod_prislusnik ma byt idz ? .. lebo ked si pozriete hr schemu tak medzi EMPLOYEES a JOBS je taky isty vztah ako medzi ZAMESTNANEC a ROD_PRISLUSNIK ... a tam je iba z tabulky JOBS, JOB_ID v EMPLOYESS, ale v JOBS nie je EMPLOYEE_ID ...
+ vkladali ste tam aj nejake data do tych tabuliek ? :D ... sice to tam nepise, ale potom by bola blbost robit selecty
-
a toto ako spravit pri create table ?
atribúty datum_narodenia, start_date, ende_date sú v tvare: dd.mm.yyyy
I have no idea ???
// a teda to predosle takto:
do zamul: idul, idz
do zamestnanec: evrp
do rod_prislusnik: idz
takto je to spravne ?
Nie. Do tabuľky zamestnanec sa nedáva žiaden FK.
urcite aj v rod_prislusnik ma byt idz ? .. lebo ked si pozriete hr schemu tak medzi EMPLOYEES a JOBS je taky isty vztah ako medzi ZAMESTNANEC a ROD_PRISLUSNIK ... a tam je iba z tabulky JOBS, JOB_ID v EMPLOYESS, ale v JOBS nie je EMPLOYEE_ID ...
V rod_prislusnik bezpodmienečne musí byť idz. Inak, by si nevedel priradiť rodinného príslušníka ku zamestnancovi.
Medzi hr.employees a hr.jobs je presne opačný vzťah, ako pri zamestnanec a rod_prislusnik.
v hr-schéme: Jeden zamestnanec má jeden job, ale jeden job môže robiť viacero zamestnancov.
v tejto úlohe: Jeden zamestnanec môže mať viacero rod. príslušníkov, ale daný rod. príslušník má väzbu len s jedným zamestnancom
Teda hr.employees akoby zodpovedalo tabuľke rod_prislusnik a hr.jobs zodpovedá tabuľke zamestnanec.
+ vkladali ste tam aj nejake data do tych tabuliek ? :D ... sice to tam nepise, ale potom by bola blbost robit selecty
Nepíše to tam, ale keď nechceš robiť selecty naslepo, tak by bolo dobré si tam nejaké dáta vložiť ;)
-
ok, diky ... som si to zle pozrel v tej hr scheme ... a co si daval ako primary key v zamul ?
-
ok, diky ... som si to zle pozrel v tej hr scheme ... a co si daval ako primary key v zamul ?
Všetky stĺpce od zloženého PK.
-
aj hodiny ?
-
aj hodiny ?
Tam je to také divné...
Primárny kľúč by mala mať každá tabuľka. Ak by sme dali do PK len idz a idul, dosiahli by sme tým to, že daný zamestnanec by už druhýkrát nemohol vykonať tú istú úlohu. Ak dáme do zloženého PK aj hodiny, bude to "menej škodlivé", lebo tým vylúčime "len" to, že daný zamestnanec nebude môcť vykonávať opakovane tú istú úlohu za ten istý odpracovaný čas.
Najideálnejší by tam bol ďalší stĺpec (nejaké idzamul), ktorý by bol jediným PK v tabuľke. Taký stĺpec ale v schéme nie je, takže by sa nemal vytvárať.
-
no to aby akceptoval len taky date format to sa neda v oracle...lebo oracle ma fixny format a len pri inserte sa da formatovat...alebo cez alter session set nls_date_format='tu zapises date format';...inak sa neda
-
ako spravit toto?
6. Zistite priemerný základný plat manažérov. (11800)
-
ako spravit toto?
6. Zistite priemerný základný plat manažérov. (11800)
Vypíšeš AVG salary tých zamestnancov, ktorých employee_id sa nachádza v subqery (select manager_id from hr.employees).
-
dik
-
a s dalsou ulohou mi nevies helpnut?
skusal som toto:
select department_name, min(salary)
from hr.employees join hr.departments using (department_id)
where min(salary) >= (select min(salary) from hr.employees where department_id=80 ) group by department_name;
ale pise mi chybu pri tom where min(salary), ze nie je tam povolena ta dunkcia ... a ked ju tam nedam tak mam iny vysledok
-
a s dalsou ulohou mi nevies helpnut?
skusal som toto:
select department_name, min(salary)
from hr.employees join hr.departments using (department_id)
where min(salary) >= (select min(salary) from hr.employees where department_id=80 ) group by department_name;
ale pise mi chybu pri tom where min(salary), ze nie je tam povolena ta dunkcia ... a ked ju tam nedam tak mam iny vysledok
Agregačné funkcie nesmú ísť do where - na to je určená klauzula having. Takisto ti tam chýba group by. (beriem späť :))
-
ok, mam to diky :)
-
este s tymto mi nevies heplnut? 11. Vypíšte priezviská tých zamestnancov, ktorí opravovali tie isté autá ako Janko Hrasko.
uz len to mi chyba :)
-
este s tymto mi nevies heplnut? 11. Vypíšte priezviská tých zamestnancov, ktorí opravovali tie isté autá ako Janko Hrasko.
Spojíš tabuľky zam a asz. No a odtiaľ budeš hľadať takú spz, pre ktorú platí, že auto, ktoré ju nosí, opravoval zamestnanec s menom Janko a priezviskom Hrasko (čiže v subquery musíš zjoinovať opäť zam a asz). Na výpis dáš potom meno a priezvisko, ktoré by mali byť unique.
-
no to mi je jasne, ael ako to zapisem ?
hlavne to, ze auto opravoval zamestnanec janko hrasko
-
no to mi je jasne, ael ako to zapisem ?
hlavne to, ze auto opravoval zamestnanec janko hrasko
select ....... from ..........
where spz in
(select spz from ........
where ((meno = 'Janko')
and (priezvisko = 'Hrasko')));
-
mi to hodi Janosik a Hrasko ... to je dobre ... Hrasko tam tiez ma byt ?
-
mi to hodi Janosik a Hrasko ... to je dobre ... Hrasko tam tiez ma byt ?
Jááj, na to som zabudol :) Úplne na koniec (za subquery) ešte má byť napísané and priezvisko not like 'Hrasko'
-
Dobrovolnik, ktory by mi zrobil zadanie... samozrejme finacna odmena ho neminie....viac info cez spravy
-
ako by ste spravili relacnu z tohoto ?
SELECT meno,priezvisko,
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Výdaj' AND z.zamestnanec_id=f.zamestnanec_id
)
as "Pocet_vydajov",
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Príjem' AND z.zamestnanec_id=f.zamestnanec_id
) as "Pocet_prijmov"
FROM Zamestnanec f;
-
Niekto, kto má zadanie byt2.pdf? br
-
Niekto, kto má zadanie byt2.pdf? br
Ja :D A okrem toho ešte ďalšie tri ;D
ako by ste spravili relacnu z tohoto ?
SELECT meno,priezvisko,
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Výdaj' AND z.zamestnanec_id=f.zamestnanec_id
)
as "Pocet_vydajov",
(
SELECT count(t.transakcia_id)
FROM Zamestnanec z, Evidencia e, Transakcia t
WHERE z.zamestnanec_id=e.zamestnanec_id AND e.transakcia_id=t.transakcia_id AND transakcia_nazov LIKE 'Príjem' AND z.zamestnanec_id=f.zamestnanec_id
) as "Pocet_prijmov"
FROM Zamestnanec f;
Najprv by som urobil RA pre subqueries (V1, V2) a potom do finálneho výsledku V <--- sigma meno, priezvisko, V1, V2.
-
Caute, mal niekto zadanie banka1 ? Ako ste pls riesili tie zostatky a zosttaok_na_ucte ? Z toho zadania neviem presne urcit ako to ma byt a Telepevska nikdy nie je spokojna :D cize v prilohe jeto zadanie keby niekto chcel nieco navrhnut :D dik
-
Do tabuľky, kde sú informácie o účte, by som do stĺpca zostatok vložil niečo takéto:
počiatočný zostatok - (SELECT SUM(suma_transakcie) FROM ... WHERE id_uctu = ...)
No ale teda subquery v inserte, to je už iné kafíčko... Ech juch... ap
-
Do tabuľky, kde sú informácie o účte, by som do stĺpca zostatok vložil niečo takéto:
počiatočný zostatok - (SELECT SUM(suma_transakcie) FROM ... WHERE id_uctu = ...)
No ale teda subquery v inserte, to je už iné kafíčko... Ech juch... ap
jas om to riesil cez trigger ktory pri vkladani do transakcie automaticky upravil zostatok len ona tam chce este zostaty pri kazdej transakcii ci co... aby som tam mal 10 stlpcov ze zostatok dpc
-
Do tabuľky, kde sú informácie o účte, by som do stĺpca zostatok vložil niečo takéto:
počiatočný zostatok - (SELECT SUM(suma_transakcie) FROM ... WHERE id_uctu = ...)
No ale teda subquery v inserte, to je už iné kafíčko... Ech juch... ap
jas om to riesil cez trigger ktory pri vkladani do transakcie automaticky upravil zostatok len ona tam chce este zostaty pri kazdej transakcii ci co... aby som tam mal 10 stlpcov ze zostatok dpc
Triggre Telepovská zakázala ;D
Takže ona chce mať pri každej transakcii zaevidovaný aktuálny zostatok na účte? No tak potom to treba urobiť opačne, než som napísal:
V tabuľke s transakciami treba urobiť stĺpec akt_zostatok a tam potom vkladať
(SELECT pociatocny_zostatok FROM banka WHERE id_uctu = ...) - zadávaná suma transakcie
-
stači ked mam jednu sekvenciu pouzitu? aj ked by sa dalo aj viac, ale tam mam normalne 1,2,3 napisane cisla.
-
stači ked mam jednu sekvenciu pouzitu? aj ked by sa dalo aj viac, ale tam mam normalne 1,2,3 napisane cisla.
Záleží od toho, čo tie čísla označujú, či sú primárny kľúč, atď. Ale ak tam máš takú vec, že ti s každým riadkom v tabuľke číslo narastá, mala by tam byť sekvencia.
-
okej, takže tak musím pridať hodne veľa sekvencií :D si ma nepotešil.
-
inak nevie niekto kolko casu budeme mat na skuske ?? ???
-
a kolko uloh ma byt ?
-
To všetko som mal napísané na nejakom zdrape, ale už ho neviem nájsť :D
Zdá sa mi, že by na to malo byť 60 minút. Počet otázok si nepamätám, ale polovica by mala byť na selecty a druhá polovica z teórie. Dopisovacie otázky na selecty budú viac bodové ohodnotené, ako TiposBingoOtázky. Tiež sa mi dačo marí o 6 dopisovacích selectoch a 6 TiposBingo selectoch.
Viac si už nepamätám, nemám fotopamäť :D
-
tak co som pozeral v archive, tak tam pisali ze
30 uloh
15 teoria + 15 selekty {cca na polovicu na dopisovanie a dalsie na najdenie spravneho z moznosti}
-
ale je to tak, ze polovica bodov je za teoriu a polovca za selecty ? .. len tie selecty, ktore bude treba dopisovat budu viac ohodnotene ako tie, pri ktorych budu moznosti ?
-
zda sa mi aj ze tie dopisovacie selekty boli po 4b ale to si teraz niesom isty..
-
to "dáva logiku", že dopisovacie selecty budú za najviac bodov pričom ani SQL nebudeme môcť používať :whacko:
-
ale je to tak, ze polovica bodov je za teoriu a polovca za selecty ? .. len tie selecty, ktore bude treba dopisovat budu viac ohodnotene ako tie, pri ktorych budu moznosti ?
Teoretické otázky budú všetky checkbox/radiobutton. Selecty checkbox a textfield. Za textfieldové otázky bude viac bodov. Keďže pomer otázok teória:selecty má byť fifty-fifty, vychádza mi, že za selecty bude viac bodov, než za teóriu.