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.
 
