a) skuste si precitat co pise Vami odkazovany text: "vykonnostny rozdiel".
Já jsem to samozřejmě četl, a na rozdíl od vás až do konce. „Liší se pouze zápis. Smysl a provádění je stejné.“
b) pouzit Oracle syntax, ktora je syntakticky cukor ako agument, znaci, ze ocividne netusite o com pisete.
Ta Oracle syntax je starší, než JOIN ve standardu. Syntaktický cukr je naopak klíčové slovo
ON ve standardu – v případě
INNER JOIN se podmínka, která se za
ON napíše, jenom pomocí
AND připojí k ostatním podmínkám ve
WHERE. V případě
OUTER JOINu je to to samé, akorát se ta podmínka samozřejmě z
INNER JOIN predikátu musí změnit na
OUTER JOIN. K tomu
JOINu se podmínka pomocí
ON připojuje jenom kvůli přehlednosti, klidně tam můžete dát podmínku, která se spojovaných tabulek nijak netýká, a naopak klidně podmínku pro spojení tabulek můžete dát do
WHERE.
c) ano, vami uvedene dve SQLka nemaju prakticky rozdiel, ale to sa samozrejme netyka toho na co reagujete.
Samozřejmě se to týká toho, na co reaguju. Ten příkaz po změně porovnání
NULL hodnoty na
IS NOT NULL je naprosto správně, oba následující dotazy jsou ekvivalentní a budou mít stejný prováděcí plán:
SELECT z.name, i.zkr
FROM Zam z
LEFT JOIN Info i
ON z.id_z=i.id_z
WHERE (i.datum > 1561939200 OR i.datum IS NULL);
SELECT z.name, i.zkr
FROM Zam z
LEFT JOIN Info i
ON z.id_z=i.id_z AND i.datum > 1561939200
;