<<

TSQL JOIN TYPES Created by Steve Stedman SELECT * SELECT * FROM Table1; FROM Table1 t1 Table1 Table2 Table1 Table2 INNER JOIN Table2 t2 SELECT * ON t1.fk = t2.id; FROM Table2; SELECT two tables INNER JOIN

SELECT * SELECT * FROM Table1 t1 FROM Table1 t1 Table1 Table2 LEFT OUTER JOIN Table2 t2 Table1 Table2 RIGHT OUTER JOIN Table2 t2 ON t1.fk = t2.id; ON t1.fk = t2.id;

LEFT OUTER JOIN RIGHT OUTER JOIN

SELECT * SELECT * FROM Table1 t1 FROM Table1 t1 WHERE NOT EXISTS (SELECT 1 Table1 Table2 WHERE EXISTS (SELECT 1 Table1 Table2 FROM Table2 t2 FROM Table2 t2 WHERE t1.fk = t2.id WHERE t1.fk = t2.id ); ); SEMI JOIN ANTI SEMI JOIN

SELECT * SELECT * FROM Table1 t1 FROM Table1 t1 Table1 Table2 LEFT OUTER JOIN Table2 t2 Table1 Table2 RIGHT OUTER JOIN Table2 t2 ON t1.fk = t2.id ON t1.fk = t2.id WHERE t2.id IS NULL; WHERE t1.fk IS NULL; LEFT OUTER JOIN with exclusion RIGHT OUTER JOIN with exclusion – replacement for a NOT IN – replacement for a NOT IN

SELECT * SELECT * FROM Table1 t1 FROM Table1 t1 Table1 Table2 FULL OUTER JOIN Table2 t2 Table1 Table2 CROSS JOIN Table2 t2; ON t1.fk = t2.id; FULL OUTER JOIN CROSS JOIN, the

SELECT * SELECT * FROM Table1 t1 FROM Table1 t1 Table1 Table2 FULL OUTER JOIN Table2 t2 Table1 Table2 ON t1.fk = t2.id INNER JOIN Table2 t2 WHERE t1.fk IS NULL ON t1.fk >= t2.id; OR t2.id IS NULL; FULL OUTER JOIN with exclusion NON-EQUI INNER JOIN

Created By Steve Stedman http://SteveStedman.com Twitter @SqlEmt http://linkedin.com/in/stevestedman Page 1 of 2 TSQL JOIN TYPES Created by Steve Stedman

Correlated SELECT * Correlated SELECT * Sub-query FROM Table1 t1 Sub-query FROM Table1 t1 Table1 or Table1 or Table Valued CROSS APPLY Valued OUTER APPLY Function [dbo].[someTVF](t1.fk) Function [dbo].[someTVF](t1.fk) AS t; AS t; CROSS APPLY OUTER APPLY

SELECT * SELECT * Table3 FROM Table1 t1 Table3 FROM Table1 t1 FULL OUTER JOIN Table2 t2 INNER JOIN Table2 t2 ON t1.fk = t2.id Table1 Table2 ON t1.fk = t2.id Table1 Table2 FULL OUTER JOIN Table3 t3 INNER JOIN Table3 t3 ON t1.fk_table3 = t3.id; ON t1.fk_table3 = t3.id; Two FULL OUTER JOINS Two INNER JOINs

SELECT * SELECT * Table3 FROM Table1 t1 Table3 FROM Table1 t1 LEFT OUTER JOIN Table2 t2 INNER JOIN Table2 t2 ON t1.fk = t2.id ON t1.fk = t2.id Table1 Table2 Table1 Table2 LEFT OUTER JOIN Table3 t3 LEFT OUTER JOIN Table3 t3 ON t1.fk_table3 = t3.id; ON t1.fk_table3 = t3.id; Two LEFT OUTER JOINS INNER JOIN and a LEFT OUTER JOIN SELECT fk as id Sample Schema FROM Table1 Table1 Table2 Table 1 Table 2 EXCEPT (People) (Favorite Colors) SELECT ID FROM Table2; EXCEPT

SELECT fk as id FROM Table1 Table1 Table2 UNION SELECT ID FROM Table2; UNION Table 3 SELECT fk as id (Favorite Foods) Note: names are very FROM Table1 generic to simplify the sample Table1 Table2 INTERSECT queries. Foreign keys are SELECT ID Table1.fk -> Table2.id FROM Table2; Table2.fk_table3 -> Table3.id INTERSECT

Created By Steve Stedman http://SteveStedman.com Twitter @SqlEmt http://linkedin.com/in/stevestedman Page 2 of 2 TSQL JOIN TYPES Created by Steve Stedman

Enjoying my free JOIN Types poster. Take a look at another freebie available at http://DatabaseHealth.com . A free SQL Server performance monitoring tool that I have made available to the SQL Server Community.

Free download, free to use, no strings attached. Enjoy!

Created By Steve Stedman http://SteveStedman.com Twitter @SqlEmt http://linkedin.com/in/stevestedman