VISUALIZING
SQL JOIN
V I N C E N T C H A N - D E C 2 0 1 6
INNER JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
INNER JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
1 JANE EXECUTIVE
2 MARY MANAGER
3 JOHN SUPERVISOR
Returns all rows when there is at least one
match in BOTH tables
LEFT JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
LEFT JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
1 JANE EXECUTIVE
2 MARY MANAGER
3 JOHN SUPERVISOR
4 EMMA NULL
Return all rows from the left table, and the
matched rows from the right table
RIGHT JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
RIGHT JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
7 NULL CLERK
2 MARY MANAGER
3 JOHN SUPERVISOR
5 NULL EXECUTIVE
1 JANE EXECUTIVE
Return all rows from the right table, and
the matched rows from the left table
FULL OUTER JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
FULL OUTER JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
1 JANE EXECUTIVE
2 MARY MANAGER
3 JOHN SUPERVISOR
4 EMMA NULL
7 NULL CLERK
5 NULL EXECUTIVE
Return all of the records from both tables
LEFT EXCLUDING JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
LEFT JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
WHERE POSITION.POSITION IS NULL
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
1 JANE EXECUTIVE
4 EMMA NULL
Return all of the records in the left table
that do not match any records in the right
table
RIGHT EXCLUDING JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
RIGHT JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
WHERE STAFF.NAME IS NULL
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
7 NULL CLERK
5 NULL EXECUTIVE
Return all of the records in the right table
that do not match any records in the left
table
OUTER EXCLUDING JOIN
TA B L E A TA B L E B
STAFF_ID NAME
1 JANE
2 MARY
3 JOHN
4 EMMA
s t a f f
STAFF_ID POSITION
7 CLERK
2 MANAGER
3 SUPERVISOR
5 EXECUTIVE
1 EXECUTIVE
P O S I T I O N
SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION
FROM STAFF
FULL OUTER JOIN POSITION
ON STAFF.STAFF_ID = POSITION.STAFF_ID
R E S U L T
S Q L C O M M A N D
STAFF_ID NAME POSITION
7 NULL CLERK
5 NULL EXECUTIVE
Return all of the records in the left table
and all of the records in the right table that
do not match
ALTERNATIVELY
A
INNER
JOIN
=
B 1 B 1
C 2 C 2
3
A
RIGHT
JOIN
=
B 1 B 1
C 2 C 2
3 3
A
LEFT
JOIN
=
A
B 1 B 1
C 2 C 2
3
A
FULL
JOIN
=
A
B 1 B 1
C 2 C 2
3 3

SQL JOIN Explained Visually

  • 1.
    VISUALIZING SQL JOIN V IN C E N T C H A N - D E C 2 0 1 6
  • 2.
    INNER JOIN TA BL E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF INNER JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 1 JANE EXECUTIVE 2 MARY MANAGER 3 JOHN SUPERVISOR Returns all rows when there is at least one match in BOTH tables
  • 3.
    LEFT JOIN TA BL E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF LEFT JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 1 JANE EXECUTIVE 2 MARY MANAGER 3 JOHN SUPERVISOR 4 EMMA NULL Return all rows from the left table, and the matched rows from the right table
  • 4.
    RIGHT JOIN TA BL E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF RIGHT JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 7 NULL CLERK 2 MARY MANAGER 3 JOHN SUPERVISOR 5 NULL EXECUTIVE 1 JANE EXECUTIVE Return all rows from the right table, and the matched rows from the left table
  • 5.
    FULL OUTER JOIN TAB L E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF FULL OUTER JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 1 JANE EXECUTIVE 2 MARY MANAGER 3 JOHN SUPERVISOR 4 EMMA NULL 7 NULL CLERK 5 NULL EXECUTIVE Return all of the records from both tables
  • 6.
    LEFT EXCLUDING JOIN TAB L E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF LEFT JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID WHERE POSITION.POSITION IS NULL R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 1 JANE EXECUTIVE 4 EMMA NULL Return all of the records in the left table that do not match any records in the right table
  • 7.
    RIGHT EXCLUDING JOIN TAB L E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF RIGHT JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID WHERE STAFF.NAME IS NULL R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 7 NULL CLERK 5 NULL EXECUTIVE Return all of the records in the right table that do not match any records in the left table
  • 8.
    OUTER EXCLUDING JOIN TAB L E A TA B L E B STAFF_ID NAME 1 JANE 2 MARY 3 JOHN 4 EMMA s t a f f STAFF_ID POSITION 7 CLERK 2 MANAGER 3 SUPERVISOR 5 EXECUTIVE 1 EXECUTIVE P O S I T I O N SELECT STAFF.STAFF_ID, STAFF.NAME, POSITION.POSITION FROM STAFF FULL OUTER JOIN POSITION ON STAFF.STAFF_ID = POSITION.STAFF_ID R E S U L T S Q L C O M M A N D STAFF_ID NAME POSITION 7 NULL CLERK 5 NULL EXECUTIVE Return all of the records in the left table and all of the records in the right table that do not match
  • 9.
    ALTERNATIVELY A INNER JOIN = B 1 B1 C 2 C 2 3 A RIGHT JOIN = B 1 B 1 C 2 C 2 3 3 A LEFT JOIN = A B 1 B 1 C 2 C 2 3 A FULL JOIN = A B 1 B 1 C 2 C 2 3 3