Prosba o kontrolu kodu z učebnice – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prosba o kontrolu kodu z učebnice – MS SQL – Fórum – Programujte.comProsba o kontrolu kodu z učebnice – MS SQL – Fórum – Programujte.com

 

Shockwave
~ Anonymní uživatel
107 příspěvků
5. 4. 2017   #1
-
0
-

Ahoj, poprosil bych někoho erudovaného, jestli by se prosím podíval nad označený text v učebnici, zda tam není chyba ve vstup/výstup na 3tím řádku v sql kodu , jestli to náhodou nemá být spíš takto:

img:  http://shockwave3.rajce.idnes.cz/Kniha_kontrola/#kniha1.jpg

WHERE E1.ID=E2.MGR_ID

Děkuji moc

Nahlásit jako SPAM
IP: 78.156.128.–
KIIV
~ Moderátor
+43
God of flame
5. 4. 2017   #2
-
0
-

#1 Shockwave
E1 je brano jako zamestnanec a E2 jako jeho manazer. Zamestnanec ma vlastni ID a ID jeho manazera je v MGR_ID. Tudiz v knize je to spravne.

Pokud to prohodis, tak E1 bude manazer a spojenim s E2 se pak ziskaji jeho podrizeni. (Ne ze by to byl nejak zvlast velky rozdil)

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
shockwave
~ Anonymní uživatel
107 příspěvků
5. 4. 2017   #3
-
0
-

#2 KIIV
Takže tohle dobře není?

~~WHERE E1.ID=E2.MGR_ID  /tohle je právě upravený kod z knihy

Nahlásit jako SPAM
IP: 92.62.232.–
KIIV
~ Moderátor
+43
God of flame
5. 4. 2017   #4
-
0
-

#3 shockwave
v knize je:    E1.MGR_ID = E2.ID   a to odpovida popisu.

Asi by bylo jeste lepsi, kdyby pouzili nazvy vybranych polozek ve stylu:

SELECT E1.NAME Zamestnanec, E2.NAME Manazer

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
shockwave
~ Anonymní uživatel
107 příspěvků
5. 4. 2017   #5
-
0
-

Asi sem natvrdlej, ale nechápu proč ~~ E1.MGR_ID (kde E1 jsou zaměstnanci se míchá s MGR_ID, kde toto je ID managera )= E2.ID (a kde se míchá E2. s ID. kde E2 jsou vedoucí zaměstnanci a ID je ID zaměstnanců) 

E1.MGR_ID = E2.ID  

Nahlásit jako SPAM
IP: 92.62.232.–
KIIV
~ Moderátor
+43
God of flame
5. 4. 2017   #6
-
0
-

#5 shockwave
Manazer je ale take zamestnanec. Nad sebou uz nikoho nema akorat generalni reditel (tady je prapodivne pouzito MGR_ID 0).

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Ovrscout
~ Anonymní uživatel
113 příspěvků
5. 4. 2017   #7
-
0
-

#5 shockwave

V MGR_ID je uloženo zaměstnanecké ID šéfa, neboli když číslo ze sloupce MGR_ID vyhledáš ve sloupci ID, tak dostaneš řádku s údaji o šéfovy.

Důležité je pochopit ten podtržený text níže, zkus si zavolat ten dotaz bez té části s where a jukni na výsledek. Nebo kukni na obrázky http://www.w3resource.com/sql/joins/cross-join.php

Pro lepší srozumitelnost si pak tu podmínku můžeme obrátit na: E2.ID=E1.MGR_ID.
A potom, se ta podmínka dá číst nějak takto:
Ze všech kombinací záznamů(řádek) E1,E2 chci takové, kde v E2 bude záznam o šefovy který šéfuje zaměstnanci uvedenému v E1. Ostatní kombinace se zahodí.

P.S. Asi by mělo být tučně zvýrazněno že cross join jako takový, vytváří všechny možné kombinace ze kterých se pak filtruje. Což pro větší než malý počet řádek může být opravdu hoodně kombinací.
Nicméně v závislosti na podmínce si s tím optimalizátor někdy dokáže  pohrát a převést to na jiný typ joinu.
Např zde https://msdn.microsoft.com/en-us/library/ms190690.aspx .

Navíc mi přijde že ostatní typy joinů jsou tak nějak čitelnější a lépe vyjadřují co programátor vlastně chtěl a tím jsou i méně náchylné na chyby. No ale nejsem nějak velký "databázista", tak tohle poslední ber s rezervou.

Nahlásit jako SPAM
IP: 92.62.237.–
P
~ Anonymní uživatel
212 příspěvků
6. 4. 2017   #8
-
0
-

#1 Shockwave
Prozradim Ti jedno male tajemstvi - URL adresy lze vkladat jako aktivni hyperlinky pomoci ikonky s obrazem retezu nad polem, kam pises svoje prispevky.

Nahlásit jako SPAM
IP: 37.48.50.–
peter
~ Anonymní uživatel
4016 příspěvků
6. 4. 2017   #9
-
0
-

Taky to zkusim vysvetlit, ale zkusim to pres tabulky 

id_zam, id_manazer, name
1, null, Lojza
2, null, Tomas
3, 2, Maruska
4, 2, Renata

Lojza a Tomas jsou sefove. Tomas ma sekretarku Marusku, takze Maruska ma vyplneno i id_manazera. A taky ma pod sebou uklizecku.
A ted ty potrebujes SELECTem treba vypsat, seznam sefu a koho maji pod sebou. Ta tabulka by mela vypadat nejak takto

+-------+-----------------+
| name  | zametsnanci     |
+-------+-----------------+
| Lojza |                 |
| Tomas | Maruska, Renata |
+-------+-----------------+

SELECT name FROM zamestnanci WHERE id_manager IS NULL -- seznam sefu

SELECT name FROM zamestnanci WHERE id_manager = 2 -- seznam zamestnancu konkretniho sefa

A ted se to da udelat nekolika zpusoby. Bud to zgrupovat, jedna obri tabulka, elegantni dotaz. Nebo to prilepit jako sloupec. A nebo muzes vybrat id manazeru, osekat to treba na 0-30 a pouzit ten seznam pro vyber zamestnancu. Zpusob zalezi na tom, kolik toho mas v db a kolik toho chces vypisovat. To grupovani bude fungovat, pokud nemas v db moc zaznamu a moc propojeni. Takova bezna firma ma tak do 5 skupin vedeni, ale treba u google by to uz mohl byt casove problem a narocne na db.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:bc70:92...–
peter
~ Anonymní uživatel
4016 příspěvků
6. 4. 2017   #10
-
0
-

jo, a kdyz to budes grupovat, tak tam budes davat misto
a.id_manager = 2
a.id_manager = b.id_zamestnanec
A problem u google by prave by, ze delas propojeni velka tabulka na velka tabulka, coz je casove n*n kroku. Kdyz bys takovych grupovani potreboval udelat vic, tak se to zasekne na nekolik dni :)

To je pripad jednoho programu, co delali kolegove. Maji tam seznam knizek (vedeckych publikaci), kazda knizka ma nekolik autoru a ted potrebovali najit vsechny knizky, ktere maji spolecnych 5 autoru nebo v jinem pripade, kde je alespon 1 z tech 5 autoru. Meli to krasne grupovani, autoru bylo mas tak 100, knizek tak 1000. Jenze to je n * n * n * n * n mega obri tabulka, ze 100 radku maji pak 10.000.000.000 radku :) Delalo to 7 dni. Cely dotaz jsem pak prepsal tak, ze vyberu seznam id pro kazdou podminku zvlast, pojim pres UNION a pak to zgrupuji pres COUNT(id)>0 pro alespon 1 nebo COUNT(id)==5 pro vsech 5 autoru. Blik, asi 0.2s misto 7 dni :)
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:bc70:92...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý