Author Topic: DBS  (Read 49845 times)

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #150 on: 07.04.2012, 00:53:48 »
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.

« Last Edit: 07.04.2012, 00:56:16 by veteran »

Rajo

  • Sr. Member
  • ****
  • Posts: 346
    • View Profile
Re: DBS
« Reply #151 on: 07.04.2012, 01:45:00 »
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)

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #152 on: 07.04.2012, 02:08:24 »

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ý.

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #153 on: 09.04.2012, 19:17:10 »
skontrolovali by ste mi toto prosim, ci to mam OK ?

Code: [Select]
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)   

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #154 on: 09.04.2012, 20:06:40 »
skontrolovali by ste mi toto prosim, ci to mam OK ?

Code: [Select]
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.

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #155 on: 09.04.2012, 21:29:05 »
ked tam nedam OUTER ale iba JOIN tak sa to berie automaticky ako OUTER JOIN ? alebo INNER ?

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #156 on: 09.04.2012, 22:01:00 »
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

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #157 on: 14.04.2012, 23:20:14 »
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 ??

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #158 on: 14.04.2012, 23:22:55 »
to akoze fyzicku schemu treba spravit ? Taku ako je na moodle Schéma hr (fyzická schéma) pdf ??
Áno.

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #159 on: 15.04.2012, 00:01:57 »
do tabulky zamul treba pridat stlpce idz a idul ?

a d ozamestnanec evrp ?

Wolfdale

  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 489
  • /root
    • View Profile
Re: DBS
« Reply #160 on: 15.04.2012, 00:02:56 »
Yep.

Ešte sme to nedokončili celkom, ale takmer sme už začali.

Rajo

  • Sr. Member
  • ****
  • Posts: 346
    • View Profile
Re: DBS
« Reply #161 on: 15.04.2012, 02:22:30 »
a nie idz do rod_prislusnik ?

Wolfdale

  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 489
  • /root
    • View Profile
Re: DBS
« Reply #162 on: 15.04.2012, 02:41:51 »
Ja mám idz aj v zamul aj v rod_prislusnik.

Ešte sme to nedokončili celkom, ale takmer sme už začali.

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #163 on: 15.04.2012, 15:19:03 »
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.

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #164 on: 15.04.2012, 16:28:15 »
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
« Last Edit: 15.04.2012, 16:56:36 by xxx3 »

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #165 on: 15.04.2012, 17:08:25 »
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ť ;)

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #166 on: 15.04.2012, 17:10:46 »
ok, diky ... som si to zle pozrel v tej hr scheme ... a co si daval ako primary key v zamul ?

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #167 on: 15.04.2012, 17:14:41 »
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.

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #168 on: 15.04.2012, 17:20:18 »
aj hodiny ?

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #169 on: 15.04.2012, 17:33:33 »
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ť.

razer08

  • Newbie
  • *
  • Posts: 37
    • View Profile
Re: DBS
« Reply #170 on: 16.04.2012, 02:18:10 »
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

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #171 on: 21.04.2012, 23:53:17 »
ako spravit toto?

6. Zistite priemerný základný plat manažérov. (11800)


veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: DBS
« Reply #172 on: 22.04.2012, 00:19:50 »
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).

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #173 on: 22.04.2012, 00:30:35 »
dik

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: DBS
« Reply #174 on: 22.04.2012, 00:47:58 »
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