0% found this document useful (0 votes)
31 views

03 Joins

The document provides an overview of different types of JOINs in SQL. It begins by explaining INNER JOINs, which return rows that match in both tables being joined. It provides an example of joining a registrations table and logins table to return matching rows. It then explains OUTER JOINs, specifically FULL OUTER JOINs, which return all rows even if they do not match in both tables.

Uploaded by

hughston.musashi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

03 Joins

The document provides an overview of different types of JOINs in SQL. It begins by explaining INNER JOINs, which return rows that match in both tables being joined. It provides an example of joining a registrations table and logins table to return matching rows. It then explains OUTER JOINs, specifically FULL OUTER JOINs, which return all rows even if they do not match in both tables.

Uploaded by

hughston.musashi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 95

JOINS

SQL

● Welcome to this section on JOINS.


● JOINS will allow us to combine information from
multiple tables!
● Let’s see what we will learn in this section
SQL

● Section Overview
○ Creating an alias with the AS clause
○ Understanding different kinds of JOINs
■ INNER JOINS
■ OUTER JOINS
■ FULL JOINS
■ UNIONS
○ Challenge Tasks
AS
SQL

● Before we learn about JOINs , let’s quickly cover the


AS clause which allows us to create an “alias” for a
column or result.
● Let’s see the example syntax
SQL

● SELECT column AS new_name


FROM table
SQL

● SELECT SUM(column) AS new_name


FROM table
SQL

● Example
SQL

● Example
SQL

● Example
SQL

● The AS operator gets executed at the very end of a


query, meaning that we can not use the ALIAS inside
a WHERE operator.
● Let’s walk through a few examples in pgAdmin!
INNER JOIN
SQL

● There are several types of JOINs, in this lecture we


will go through the simplest JOIN type, which is an
INNER JOIN
SQL

● What is a JOIN operation?


● JOINs allow us to combine multiple tables together.
● The main reason for the different JOIN types is to
decide how to deal with information only present in
one of the joined tables.
SQL

● Let’s imagine a simple example.


● Our company is holding a conference for people in
the movie rental industry.
● We’ll have people register online beforehand and then
login the day of the conference.
SQL

● After the conference we have these tables

REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● The respective id columns indicate what order they


registered or logged in on site.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● For the sake of simplicity, we will assume the names


are unique.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● To help you keep track, Registrations names’ first


letters go A,B,C,D
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● An INNER JOIN will result with the set of records


that match in both tables.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● An INNER JOIN will result with the set of records


that match in both tables.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM TableA


INNER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM TableA


INNER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM TableB


INNER JOIN TableA
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM Registrations


INNER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM Registrations


INNER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM Registrations


INNER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM Registrations


INNER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS

reg_id name RESULTS log_id name

1 Andrew reg_id name log_id name 1 Xavier

2 Bob 1 Andrew 2 Andrew 2 Andrew

3 Charlie 2 Bob 4 Bob 3 Yolanda


4 David 4 Bob
SQL

● SELECT reg_id,Logins.name,log_id
FROM Registrations
INNER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id

1 Andrew 2

2 Bob 4
SQL

● SELECT reg_id,Logins.name,log_id
FROM Registrations
INNER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id

1 Andrew 2

2 Bob 4
SQL

● Remember that table order won’t matter in an INNER


JOIN
● Also if you see just JOIN without the INNER,
PostgreSQL will treat it as an INNER JOIN.
● Let’s see some examples in pgAdmin!
OUTER JOINS
SQL

● There are few different types of OUTER JOINs


● They will allow us to specify how to deal with values
only present in one of the tables being joined.
● These are the more complex JOINs, take your time
when trying to understand them!
SQL

● In these lectures we will explain:


○ FULL OUTER JOIN
■ Clarifying WHERE null
○ LEFT OUTER JOIN
■ Clarifying WHERE null
○ RIGHT OUTER JOIN
■ Clarifying WHERE null
FULL OUTER JOIN
SQL

● Let’s review our two example tables from the


previous lectures.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● We know we would join these tables together on the


name column
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● Recall we match Andrew and Bob in both tables

REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● But we have names that only appear in one table!

REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● Let’s see how the different OUTER JOINs deal with


this discrepancy.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

We will first take a look at the simplest, which is a


FULL OUTER JOIN
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM TableA


FULL OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM TableB


FULL OUTER JOIN TableA
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM Registrations


FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name

REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id name


REGISTRATIONS LOGINS
1 Andrew
reg_id name log_id name
2 Bob
1 Andrew 1 Xavier
3 Charlie
2 Bob 2 Andrew

3 Charlie 4 David
3 Yolanda
4 David 4 Bob
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id name


REGISTRATIONS LOGINS
1 Andrew 2 Andrew
reg_id name log_id name
2 Bob 4 Bob
1 Andrew 1 Xavier
3 Charlie
2 Bob 2 Andrew
4 David
3 Charlie 3 Yolanda
4 David 4 Bob
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id name


REGISTRATIONS LOGINS
1 Andrew 2 Andrew
reg_id name log_id name
2 Bob 4 Bob
1 Andrew 1 Xavier
3 Charlie null null
2 Bob 2 Andrew
4 David null null
3 Charlie 3 Yolanda
4 David 4 Bob
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id name


REGISTRATIONS LOGINS
1 Andrew 2 Andrew
reg_id name log_id name
2 Bob 4 Bob
1 Andrew 1 Xavier
3 Charlie null null
2 Bob 2 Andrew
4 David null null
3 Charlie 3 Yolanda
null null 1 Xavier
4 David 4 Bob
null null 3 Yolanda
FULL OUTER JOIN
with WHERE
Get rows unique to either table
(rows not found in both tables)
SQL
● SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
WHERE TableA.id IS null OR
TableB.id IS null
SQL
● SELECT * FROM TableB
FULL OUTER JOIN TableA
ON TableA.col_match = TableB.col_match
WHERE TableA.id IS null OR
TableB.id IS null
SQL
SELECT * FROM Registrations FULL OUTER JOIN
Logins
ON Registrations.name = Logins.name
WHERE Registrations.reg_id IS null OR
Logins.log_id IS null
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
RESULTS

reg_id name log_id name


REGISTRATIONS LOGINS
1 Andrew 2 Andrew
reg_id name log_id name
2 Bob 4 Bob
1 Andrew 1 Xavier
3 Charlie null null
2 Bob 2 Andrew
4 David null null
3 Charlie 3 Yolanda
null null 1 Xavier
4 David 4 Bob
null null 3 Yolanda
SQL
● SELECT * FROM Registrations FULL OUTER JOIN Logins
ON Registrations.name = Logins.name
WHERE Registrations.reg_id IS null OR
Logins.log_id IS null
REGISTRATIONS RESULTS LOGINS

reg_id name reg_id name log_id name log_id name

1 Andrew 3 Charlie null null 1 Xavier

2 Bob 4 David null null 2 Andrew

3 Charlie 3 Yolanda
null null 1 Xavier
4 David 4 Bob
null null 3 Yolanda
SQL

● Let’s see a quick example in pgAdmin of FULL


OUTER JOINs!
LEFT OUTER JOIN
SQL

● A LEFT OUTER JOIN results in the set of records


that are in the left table, if there is no match with the
right table, the results are null.
● Later on we will learn how to add WHERE statements
to further modify a LEFT OUTER JOIN
SQL

● SELECT * FROM TableA


LEFT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM TableA


LEFT JOIN TableB
ON TableA.col_match = TableB.col_match
SQL

● SELECT * FROM TableA


LEFT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL ORDER
MATTERS FOR
● SELECT * FROM TableA LEFT OUTER JOIN!
LEFT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL ORDER
MATTERS FOR
● SELECT * FROM TableA LEFT OUTER JOIN!
LEFT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
SQL

Let’s explore a LEFT OUTER JOIN with our two


example tables.
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM Registrations


LEFT OUTER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS

reg_id name log_id name

1 Andrew 1 Xavier

2 Bob 2 Andrew

3 Charlie 3 Yolanda
4 David 4 Bob
SQL

● SELECT * FROM Registrations


LEFT OUTER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS
RESULTS
reg_id name log_id name
reg_id name log_id name
1 Andrew 1 Xavier
1 Andrew 2 Andrew
2 Bob 2 Andrew
2 Bob 4 Bob
3 Charlie 3 Yolanda
3 Charlie null null
4 David 4 Bob
4 David null null
SQL

● SELECT * FROM Registrations


LEFT OUTER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS
RESULTS
reg_id name log_id name
reg_id name log_id name
1 Andrew 1 Xavier
1 Andrew 2 Andrew
2 Bob 2 Andrew
2 Bob 4 Bob
3 Charlie 3 Yolanda
3 Charlie null null
4 David 4 Bob
4 David null null
LEFT OUTER JOIN
With WHERE
Get rows unique to left table
SQL
● What if we only wanted entries unique to Table A?
Those rows found in Table A and not found in Table
B.
SQL
● SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
WHERE TableB.id IS null
SQL

● SELECT * FROM Registrations


LEFT OUTER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS LOGINS
RESULTS
reg_id name log_id name
reg_id name log_id name
1 Andrew 1 Xavier
1 Andrew 2 Andrew
2 Bob 2 Andrew
2 Bob 4 Bob
3 Charlie 3 Yolanda
3 Charlie null null
4 David 4 Bob
4 David null null
SQL
SELECT * FROM Registrations
LEFT OUTER JOIN Logins
ON Registrations.name = Logins.name
REGISTRATIONS
WHERE Logins.log_id IS null LOGINS

reg_id name log_id name

1 Andrew 1 Xavier
RESULTS
2 Bob 2 Andrew
reg_id name log_id name
3 Charlie 3 Yolanda
3 Charlie null null
4 David 4 Bob
4 David null null
SQL

● Let’s see some examples of LEFT OUTER JOINs in


pgAdmin!
RIGHT JOINS
SQL

● A RIGHT JOIN is essentially the same as a LEFT


JOIN, except the tables are switched.
● This would be the same as switching the table order in
a LEFT OUTER JOIN.
● Let’s quickly see some examples of a RIGHT JOIN.
SQL

● SELECT * FROM TableA


RIGHT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match

Table A Table B
SQL

● SELECT * FROM TableA


RIGHT JOIN TableB
ON TableA.col_match = TableB.col_match

Table A Table B
SQL
● SELECT * FROM TableA
RIGHT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
WHERE TableA.id IS null

Table A Table B
SQL

● It is up to you and how you have the tables organized


“in your mind” when it comes to choosing a LEFT vs
RIGHT join, since depending on the table order you
specify in the JOIN, you can perform duplicate JOINs
with either method.
JOIN
CHALLENGE TASKS
UNIONS
SQL

● The UNION operator is used to combine the result-set


of two or more SELECT statements.
● It basically serves to directly concatenate two results
together, essentially “pasting” them together.
SQL

● SELECT column_name(s) FROM table1


UNION
SELECT column_name(s) FROM table2;
SQL

Let’s explore a UNION with two example tables.

Sales2021_Q1 Sales2021_Q2

name amount name amount

David 100 David 200

Claire 50 Claire 100


SQL

● SELECT * FROM Sales2021_Q1


UNION
SELECT * FROM Sales2021_Q2;
name amount

David 100

Claire 50

David 200

Claire 100
SQL

● SELECT * FROM Sales2021_Q1


UNION
SELECT * FROM Sales2021_Q2
ORDER BY name;
name amount

David 100

David 200

Claire 50

Claire 100
JOIN
Challenges
SQL

● California sales tax laws have changed and we need to


alert our customers to this through email.
● What are the emails of the customers who live in
California?
SQL

● Expected Results
SQL

● Hints
○ You will need to use the address and customer
tables.
○ Look at the district column
SQL

SELECT district,email FROM address


INNER JOIN customer ON
address.address_id = customer.address_id
WHERE district = 'California'
SQL

● A customer walks in and is a huge fan of the actor


“Nick Wahlberg” and wants to know which movies he
is in.
● Get a list of all the movies “Nick Wahlberg” has been
in.
SQL

● Expected Results

……………...
SQL

● HINTS
○ You will need to do 2 JOINs in a row to do this in
a single query.
○ Try using the online documentation or a simple
google search to see how this is done.
○ Tables to use: actor, film, film_actor
SQL

SELECT title,first_name,last_name
FROM film_actor INNER JOIN actor
ON film_actor.actor_id = actor.actor_id
INNER JOIN film
ON film_actor.film_id = film.film_id
WHERE first_name = 'Nick'
AND last_name = 'Wahlberg'

You might also like