Ask Your Question
0

SQL CROSS JOIN

asked 2014-12-14 16:18:24 +0100

gandalf gravatar image

Ahojte, nevedel by ma niekto posunut resp. inspirovat nejak, ako vyuzit v nejakom dotaze kartezsky sucin? Neviem na to vobec nic vymysliet. Dakujem

edit retag flag offensive close delete

1 Answer

Sort by » oldest newest most voted
1

answered 2014-12-14 16:25:38 +0100

Josef Kokeš gravatar image

updated 2014-12-14 16:38:02 +0100

Abych řekl pravdu, připadá mi obtížné najít příklad, ve kterém by se kartézský součin nepoužil - jde o jednu z nejběžnějších operací.

V zadání semestrálky nebo co děláte jste určitě měli i požadavek na nějaký vztah M:N, ne? Každý výběr, který bude chtít údaje z obou entit, použije cross-join. Uvažujte například entity FILM a HEREC a dotaz "Chci všechny herce, kteří se objevili ve filmu X". Nebo CLANEK a OBRAZEK a dotaz "Chci všechny obrázky, které byly zobrazené u článků, které mají v názvu slovo 'FIT' " (předpokládám něco jako iDNES, kde se jeden ilustrační obrázek dá k libovolnému množství článků). Nebo třeba STUDENT, PREDMET a ZNAMKA a dotaz "Chci průměrnou známku za BI-DBS v roce 2014".

EDIT: Možná už chápu, o co vám jde: Kartézský součin se téměř vždy používá s nějakou omezující podmínkou. Čistý kartézský součin bez podmínky moc běžný není. No a ten omezený součin se dá zrovna tak dobře zapsat CROSS JOINem (explicitním nebo implicitním) jako INNER JOINem:

SELECT * FROM tab1, tab2 WHERE tab1.pole1=tab2.pole2;
SELECT * FROM tab1 CROSS JOIN tab2 WHERE tab1.pole1=tab2.pole2;
SELECT * FROM tab1 JOIN tab2 ON tab1.pole1=tab2.pole2;
edit flag offensive delete publish link more

Comments

Aha, ano islo presne o to, ze som nechapal k comu to je dobre spojit vsetko so vsetkym. Predpokladam, ze tie tri dotazy, co ste dali su ekvivalentne, potom je to uplne lahke. Dakujem :) EDIT: Aha, nie su ekvivalentne, jasne uz chapem.

gandalf ( 2014-12-14 16:54:30 +0100 )edit

Výsledek je ekvivalentní, ale může se lišit optimalizace provádění prvních dvou dotazů a toho třetího. Odlišný výsledek by dal OUTER JOIN (LEFT nebo RIGHT) místo JOIN ve třetím příkladu.

Josef Kokeš ( 2014-12-14 17:33:24 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-14 16:18:24 +0100

Seen: 9,273 times

Last updated: Dec 14 '14