INNER JOIN combines records from two tables.
An INNER JOIN matches column values in two tables.
A query can contain zero, one, or multiple JOIN operations.
INNER JOIN is the same as JOIN; the keyword INNER is optional.
List all suppliers with their products, sorted by company.
SELECT CompanyName, ProductName
FROM Supplier S
INNER JOIN Product P ON S.Id = P.SupplierId
ORDER BY CompanyName
| CompanyName | ProductName |
|---|---|
| Aux joyeux ecclésiastiques | Côte de Blaye |
| Aux joyeux ecclésiastiques | Chartreuse verte |
| Bigfoot Breweries | Sasquatch Ale |
| Bigfoot Breweries | Steeleye Stout |
| Bigfoot Breweries | Laughing Lumberjack Lager |
| Cooperativa de Quesos 'Las Cabras' | Queso Cabrales |
| Cooperativa de Quesos 'Las Cabras' | Queso Manchego La Pastora |
| Escargots Nouveaux | Escargots de Bourgogne |
![]() |
|
INNER JOIN syntax.
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
The INNER keyword is optional and is the same as a JOIN.
INNER JOINs are the most commonly used form of JOIN operations.
| CUSTOMER |
|---|
| Id |
| FirstName |
| LastName |
| City |
| Country |
| Phone |
| ORDER |
|---|
| Id |
| OrderDate |
| OrderNumber |
| CustomerId |
| TotalAmount |
SELECT OrderNumber, TotalAmount, FirstName, LastName, City, Country
FROM [Order] O
INNER JOIN Customer C ON C.Id = O.CustomerId
| OrderNumber | TotalAmount | FirstName | LastName | City | Country |
|---|---|---|---|---|---|
| 542378 | 440.00 | Paul | Henriot | Reims | France |
| 542379 | 1863.40 | Karin | Josephs | Münster | Germany |
| 542380 | 1813.00 | Mario | Pontes | Rio de Janeiro | Brazil |
| 542381 | 670.80 | Mary | Saveley | Lyon | France |
| 542382 | 3730.00 | Pascale | Cartrain | Charleroi | Belgium |
| 542383 | 1444.80 | Mario | Pontes | Rio de Janeiro | Brazil |
| 542384 | 625.20 | Yang | Wang | Bern | Switzerland |
![]() |
|||||
| PRODUCT |
|---|
| Id |
| ProductName |
| SupplierId |
| UnitPrice |
| Package |
| IsDiscontinued |
| ORDERITEM |
|---|
| Id |
| OrderId |
| ProductId |
| UnitPrice |
| Quantity |
| ORDER |
|---|
| Id |
| OrderDate |
| OrderNumber |
| CustomerId |
| TotalAmount |
SELECT O.OrderNumber, CONVERT(date,O.OrderDate) AS Date,
P.ProductName, I.Quantity, I.UnitPrice
FROM [Order] O
INNER JOIN OrderItem I ON O.Id = I.OrderId
INNER JOIN Product P ON P.Id = I.ProductId
ORDER BY O.OrderNumber
This query performs two INNER JOIN operations with 3 tables.
The O, I, and P are table aliases.
Date is a column alias.
| OrderNumber | Date | ProductName | Quantity | UnitPrice |
|---|---|---|---|---|
| 542378 | 7/4/2012 | Queso Cabrales | 12 | 14.00 |
| 542378 | 7/4/2012 | Singaporean Hokkien Fried Mee | 10 | 9.80 |
| 542378 | 7/4/2012 | Mozzarella di Giovanni | 5 | 34.80 |
| 542379 | 7/5/2012 | Tofu | 9 | 18.60 |
| 542379 | 7/5/2012 | Manjimup Dried Apples | 40 | 42.40 |
| 542380 | 7/8/2012 | Jack's New England Clam Chowder | 10 | 7.70 |
| 542380 | 7/8/2012 | Manjimup Dried Apples | 35 | 42.40 |
| 542380 | 7/8/2012 | Louisiana Fiery Hot Pepper Sauce | 15 | 16.80 |
| 542381 | 7/8/2012 | Gustaf's Knäckebröd | 6 | 16.80 |
| 542381 | 7/8/2012 | Ravioli Angelo | 15 | 15.60 |
| 542381 | 7/8/2012 | Louisiana Fiery Hot Pepper Sauce | 20 | 16.80 |
| 542382 | 7/9/2012 | Sir Rodney's Marmalade | 40 | 64.80 |
| 542382 | 7/9/2012 | Geitost | 25 | 2.00 |
![]() |
||||