Spojovací kritérium je odvislé od struktury dat.
Není. Spojovací kritérium je závislé na významu dat. Autoři standardu SQL opravdu nebyli tak hloupí, aby vytvořili dva různé příkazy (
INNER JOIN a
OUTER JOIN), které by z hlediska implementace byly identické, pouze by odkazovaly na (nevýznamnou) strukturu databáze. Navíc by jejich rozlišení databáze stejně nedokázala nijak zkontrolovat, takže byste je ve spoustě případů měl špatně.
Tu nám tazatel popsal. V tbl2 mohou a nemusí být záznamy odpovídající tbl1. To je spojovací kritérium.
Nikoli, tazatel napsal, že ve výsledné sadě mají být jen ty záznamy, které mají v tbl2 záznam.
To je spojovací kritérium.
ium zůstane platné za všech okolností, i když se podmínka dotazu změní.
S tímto spojením pak můžete pokládat dotaz, který tazatel položil (najít záznamy, které mají odpovídající záznam v tbl2 a zároveň allowed > 0)
Jenže tazatel položil jiný dotaz. Velda se tady o tom diskuse, klidně se vraťte na začátek tématu a ten dotaz si znovu přečtěte. Tazatel napsal „z tbl1.id_data vybrat pouze to, co v tbl2 je jako allowed >0“. První odpovídající to pochopili tak, jak to tazatel myslel – záznamy neexistující v
tbl2 se vůbec neberou v úvahu, protože ani nebudou výsledkem spojení těch dvou tabulek, a podmínkou pro zobrazení ve výsledné sadě je
tbl2.allowed > 0.
S vaším inner joinem se můžete jít klouzat, při změně podmínky budete muset přeformulovat i joiny.
Kdyby jenom
JOINy, se změnou podmínky budete muset často připojit jiné tabulky… S tím vaším přístupem, kdy chcete mít univerzální dotaz na všechno, ve kterém budete jenom měnit podmínky, byste měl udělat
CROSS JOIN všech tabulek v databázi a pak si v podmínkách poskládat, co zrovna potřebujete.