» »

sql join stavki in group by

sql join stavki in group by

krennn123 ::

Pozdravljeni,
mene pa zanima, če mi upa kdo na čimbolj enostavnejši način obrazložit kakšna je razlika med left, right in inner joinom... okvirno vem, za kaj se gre (povezuje dve ali več tabel), ne vem pa kakšna je razlika med njimi... pa tudi glede group by stavka me zanima čemu služi :).. se vam že vnaprej zahvaljujem za odgovore.

Invictus ::

Tole si preberi...

https://www.techonthenet.com/oracle/joi...

BTW, če si sam ne boš znal najti infotov, boš bolj slab računalničar.

Za vse ostalo je Google ;).b
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

krennn123 ::

Si preberem in upam, da bom kaj dojel :D... hvala useeno :)

nightrage ::

Če v povezovalni tabeli ne obstaja foreign id (lahko je nullable) za pridobitev rezultata, uporabiš left ali pa right inner join, če so napolnjeni vsi foreign id uporabiš inner join.

Najbolj enostavno je to takole razumeti. Najprej uporabiš inner join, če ne prideš do željenega rezultata pač uporabiš left oz. right inner join. :D

smacker ::

nightrage je izjavil:

Najbolj enostavno je to takole razumeti. Najprej uporabiš inner join, če ne prideš do željenega rezultata pač uporabiš left oz. right inner join. :D

To ne pripomore k razumevanju. Sprobavat vse možnosti zna opica, programer bi pa naj razumel kaj dela.
Na kratko: Povezuješ tabeli A in B.
Pri INNER JOIN vzameš samo take, ki imajo zapis v obeh tabelah - torej v rezultatu boš za vsako vrstico mel podatke iz obeh tabel.
LEFT JOIN - izbereš vse iz tabele A in jim pridružiš B. Če B ne obstaja, so te vrednosti NULL. Vrne torej isto kot INNER JOIN + dodatne vrstice iz A.
RIGHT JOIN - ravno obratno kot LEFT, zdaj izbereš vse iz B in jim dodaš A, kjer obstaja. Izbere isto kot INNER JOIN + dodatne vrstice iz B.
FULL JOIN - Mora bit vsaj v eni tabeli, torej izbere isto kot INNER JOIN + dodatne vrstice iz A (kot pri LEFT JOINU) + dodatne vrstice iz B (kot pri RIGHT JOINU)
Pri vseh razen INNER JOIN se moraš zavedat, da so vrednosti v rezultatu lahko NULL - moraš upoštevat v kodi, ko uporabljaš te vrednosti.
GROUP BY pa se uporablja za združevanje več vrstic v eno. Smiselna je uporaba GROUP BY v navezi z funkcijami, kot so COUNT(štej), SUM (seštej), MAX (največja vrednost), AVG (povprečje),... Na tak način lahko delaš izračune direktno v poizvedbi, podobno kot če bi samo izbral vrednosti in jih potem z zanko pregledal in preračunal.

nightrage ::

Smacker men se ne ljub spise pisati tako kot tebi 8-) Poleg tega sem naredil smeškota na koncu in kaj pri tem razumevanju ni logičnega.

Zgodovina sprememb…

smacker ::

Če se ti ne ljubi odgovorit na vprašanje, bodi pa tiho drugič :D
https://slo-tech.com/forum/t638429/p539...
dipl. ing. pa enga SQL JOINa ne znaš razložit

GupeM ::

Zelo fajn diagram:

nightrage ::

smacker je izjavil:

Če se ti ne ljubi odgovorit na vprašanje, bodi pa tiho drugič :D
https://slo-tech.com/forum/t638429/p539...
dipl. ing. pa enga SQL JOINa ne znaš razložit


Evo smacker najprej odgovor na tole: Da malo popravim temo, napišite kaj ste po izobrazbi, kaj delate in koliko dobite. :)

Drugač pa sej sem malo ponastavil odgovor z mojim stavkom: Če v povezovalni tabeli ne obstaja foreign id (lahko je nullable) za pridobitev rezultata,
uporabiš left ali pa right inner join, če so napolnjeni vsi foreign id uporabiš inner join.

Mogoče je težko razumljiv, priznam, ampak smacker tole ni za nikamor :)))) :
Pri INNER JOIN vzameš samo take, ki imajo zapis v obeh tabelah - torej v rezultatu boš za vsako vrstico mel podatke iz obeh tabel.
Razloži tole frazo "vzameš samo take, ki imajo zapis v obeh tabelah" -> jaz, ki to razumem, te bom malo popravil -> za INNER JOIN pridobiš vse možne rezultate, pri čemer se "ID" v tabeli "A" mora uskladiti z "ID-jem" v tabeli "B", torej z foreign ID-jem.

Naprej sploh nisem šou brat, za prihodnje pa, če že pišeš spise napiš za laike razumljive spise :))))) :D8-)

GupeM ::

@nightrage: Tudi to ni res, ker ni nujno, da joinaš po IDju. Lahko joinaš po različnih stolpcih. V eni tabeli komentar, v drugi cena. Koliko je to smiselno je drugo vprašanje (mogoče včasih je), ni pa treba, da je ID.

smacker ::

nightrage je izjavil:

Drugač pa sej sem malo ponastavil odgovor z mojim stavkom: Če v povezovalni tabeli ne obstaja foreign id (lahko je nullable) za pridobitev rezultata,
uporabiš left ali pa right inner join, če so napolnjeni vsi foreign id uporabiš inner join.

Sej nisem rekel, da je s poenostavljeno razlago kaj narobe, zmotil me je ta stavek:

nightrage je izjavil:

Najbolj enostavno je to takole razumeti. Najprej uporabiš inner join, če ne prideš do željenega rezultata pač uporabiš left oz. right inner join. :D


nightrage je izjavil:

Naprej sploh nisem šou brat, za prihodnje pa, če že pišeš spise napiš za laike razumljive spise :))))) :D8-)

Napisano je za laike, samo ti si dipl. ing. - na višjem nivoju torej.
Drugač pa zanimivo, da ko je treba komu pomagat, se ti ne da spisov pisat, ko se pa trolla pa ti ni škoda besed... Napiš še kako tuparijo da se nasmejim malo no :)

nightrage ::

smacker je izjavil:

nightrage je izjavil:

Drugač pa sej sem malo ponastavil odgovor z mojim stavkom: Če v povezovalni tabeli ne obstaja foreign id (lahko je nullable) za pridobitev rezultata,
uporabiš left ali pa right inner join, če so napolnjeni vsi foreign id uporabiš inner join.

Sej nisem rekel, da je s poenostavljeno razlago kaj narobe, zmotil me je ta stavek:

nightrage je izjavil:

Najbolj enostavno je to takole razumeti. Najprej uporabiš inner join, če ne prideš do željenega rezultata pač uporabiš left oz. right inner join. :D


nightrage je izjavil:

Naprej sploh nisem šou brat, za prihodnje pa, če že pišeš spise napiš za laike razumljive spise :))))) :D8-)

Napisano je za laike, samo ti si dipl. ing. - na višjem nivoju torej.
Drugač pa zanimivo, da ko je treba komu pomagat, se ti ne da spisov pisat, ko se pa trolla pa ti ni škoda besed... Napiš še kako tuparijo da se nasmejim malo no :)


Dej no smacker, še kar čakamo na tole :D: Da malo popravim temo, napišite kaj ste po izobrazbi, kaj delate in koliko dobite. :)
Drugač, to sem pač jaz "Master of disaster" oz "Master blaster". :))8-) pa verjetno nisem edini na tem forumu.

GupeM je izjavil:

@nightrage: Tudi to ni res, ker ni nujno, da joinaš po IDju. Lahko joinaš po različnih stolpcih. V eni tabeli komentar, v drugi cena. Koliko je to smiselno je drugo vprašanje (mogoče včasih je), ni pa treba, da je ID.


To nekako ni res, povezovalna stolpca morata biti istega tipa in tudi enakega pomena. Upam, da se ne motim.

Zgodovina sprememb…

GupeM ::

nightrage je izjavil:

GupeM je izjavil:

@nightrage: Tudi to ni res, ker ni nujno, da joinaš po IDju. Lahko joinaš po različnih stolpcih. V eni tabeli komentar, v drugi cena. Koliko je to smiselno je drugo vprašanje (mogoče včasih je), ni pa treba, da je ID.


To nekako ni res, povezovalna stolpca morata biti istega tipa in tudi enakega pomena. Upam, da se ne motim.

To nekako ni res. Stolpca sta lahko različnih tipov in različnih pomenov (kot sem rekel, o smiselnosti ne bi govoril tukaj). Primer:
SELECT *
FROM table1 AS a
RIGHT JOIN table2 AS b ON (to_char(a.cena) LIKE b.komentar)

Zgornja koda joina tiste, kjer je cena (v tem primeru eksplicitno spremenjena v string, zna pa Oracle tudi sam ugotoviti, da tipa nista enaka in ga sam spremeni) enaka komentarju. Še enkrat: Ne vem koliko je to smiselno, da se pa.

Zgodovina sprememb…

  • spremenil: GupeM ()

nightrage ::

GupeM je izjavil:

nightrage je izjavil:

GupeM je izjavil:

@nightrage: Tudi to ni res, ker ni nujno, da joinaš po IDju. Lahko joinaš po različnih stolpcih. V eni tabeli komentar, v drugi cena. Koliko je to smiselno je drugo vprašanje (mogoče včasih je), ni pa treba, da je ID.


To nekako ni res, povezovalna stolpca morata biti istega tipa in tudi enakega pomena. Upam, da se ne motim.

To nekako ni res. Stolpca sta lahko različnih tipov in različnih pomenov (kot sem rekel, o smiselnosti ne bi govoril tukaj). Primer:
SELECT *
FROM table1 AS a
RIGHT JOIN table2 AS b ON (to_char(a.cena) LIKE b.komentar)

Zgornja koda joina tiste, kjer je cena (v tem primeru eksplicitno spremenjena v string, zna pa Oracle tudi sam ugotoviti, da tipa nista enaka in ga sam spremeni) enaka komentarju. Še enkrat: Ne vem koliko je to smiselno, da se pa.


Ja to kar si naredil zgoraj je slaba praksa semantičnega sql programiranja, saj če logično razmisliš ceno ne moraš primerjati s komentarjem, pa čeprav ceno "kastaš" v enak tip kot je komentar, torej string oz. varchar. To je slab primer arhitekture podatkovne baze. Zgoraj napisani SQL je v MS SQL-u sintaktično nepravilen. Spodaj pišem popravek, menim pa, da je zgornji sql stavek sintaktično pravilen samo za Oracle podatkovne baze.

SELECT *
FROM table1 AS a
RIGHT JOIN table2 AS b ON (CONVERT(varchar(4), a.cena) = b.komentar)

GupeM ::

Saj sem rekel, da o smiselnosti ne bi govoril. Hotel sem ti samo povedati, da tvoja izjava: "jaz, ki to razumem, te bom malo popravil -> za INNER JOIN pridobiš vse možne rezultate, pri čemer se "ID" v tabeli "A" mora uskladiti z "ID-jem" v tabeli "B", torej z foreign ID-jem." tudi ni pravilna. Lahko JOINAŠ po poljubnih stolpcih, ni treba po ID-jih.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

TSQL rekurzivno

Oddelek: Programiranje
11823 (562) hamez66
»

C# iskanje v textboxu iz sqlite baze

Oddelek: Programiranje
141490 (1069) ejresnevem
»

Baza & c#

Oddelek: Programiranje
214015 (3073) xardas
»

[Oracle] Osnovno povpraševanje problem

Oddelek: Programiranje
151790 (1431) zdravc
»

PHP - pomoč

Oddelek: Izdelava spletišč
131786 (1430) BlueRunner

Več podobnih tem