PostgreSQL INNER JOIN
INNER JOIN
The INNER JOIN
keyword selects records that have matching values in both tables.
Let's look at an example using our dummy testproducts
table:
testproduct_id | product_name
| category_id
----------------+------------------------+-------------
1 | Johns Fruit Cake |
3
2 | Marys Healthy Mix |
9
3 | Peters Scary Stuff |
10
4 | Jims Secret Recipe |
11
5 | Elisabeths Best Apples |
12
6 | Janes Favorite Cheese |
4
7 | Billys Home Made Pizza |
13
8 | Ellas Special Salmon |
8
9 | Roberts Rich Spaghetti |
5
10 |
Mias Popular Ice |
14
(10 rows)
We will try to join the testproducts
table
with the categories
table:
category_id | category_name |
description
-------------+----------------+------------------------------------------------------------
1 | Beverages | Soft drinks, coffees, teas,
beers, and ales
2 | Condiments | Sweet and savory sauces, relishes,
spreads, and seasonings
3 | Confections | Desserts, candies, and sweet breads
4 | Dairy Products | Cheeses
5 | Grains/Cereals | Breads, crackers, pasta, and cereal
6 | Meat/Poultry | Prepared meats
7 | Produce | Dried fruit and bean
curd
8 |
Seafood | Seaweed and fish
(8
rows)
Notice that many of the products in testproducts
have a
category_id
that does not match any of the
categories in the categories
table.
By using INNER JOIN
we will not get the
records where there is not a match, we will only get the records that matches
both tables:
Example
Join testproducts
to
categories
using the category_id
column:
SELECT
testproduct_id, product_name, category_name
FROM testproducts
INNER JOIN categories ON
testproducts.category_id = categories.category_id;
Run Example »
Result
Only the records with a match in BOTH tables are returned:
testproduct_id | product_name
| category_name
----------------+------------------------+----------------
1 | Johns Fruit Cake | Confections
6 | Janes Favorite Cheese | Dairy Products
8 | Ellas Special Salmon | Seafood
9 | Roberts Rich Spaghetti | Grains/Cereals
(4 rows)
Note: JOIN
and INNER JOIN
will give the same result.
INNER
is the default join type for
JOIN
, so when you write
JOIN
the parser actually writes
INNER JOIN
.