Вы находитесь на странице: 1из 3

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 from two tables INNER JOIN

SELECT * SELECT *
FROM Table1 t1 FROM Table1 t1
Table1 Table2 Table1 Table2
LEFT OUTER JOIN Table2 t2 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 EXISTS (SELECT 1 Table1 Table2 WHERE NOT 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 Table1 Table2
FULL OUTER JOIN Table2 t2 CROSS JOIN Table2 t2;
ON t1.fk = t2.id;
FULL OUTER JOIN CROSS JOIN, the Cartesian product

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 Table 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 Table3
FROM Table1 t1 FROM Table1 t1
FULL OUTER JOIN Table2 t2 INNER JOIN Table2 t2
Table1 Table2 ON t1.fk = t2.id Table1 Table2 ON t1.fk = t2.id
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 Table3
FROM Table1 t1 FROM Table1 t1
LEFT OUTER JOIN Table2 t2 INNER JOIN Table2 t2
ON t1.fk = t2.id Table1 Table2
ON t1.fk = t2.id
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 Table 1 Table 2
Table1 Table2
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: Column names are very
FROM Table1 generic to simplify the sample
Table1 Table2 queries.
INTERSECT
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

Вам также может понравиться