About INNER Join Operations

The result set of an INNER join contains rows from two or more tables that have matching values based on the defined join-predicate and that meet any WHERE clause criteria. In other words, rows with that matching value must exist in both tables. In the case of one table having duplicate row values, that row will be returned twice in the result set and both rows will be joined to the one row in the second table. Another way of writing an INNER join is to use comma separated table names in the FROM clause and including the join-predicate on the where clause, along with any additional WHERE clause statements.

Using the tables created at About Join Operations Supported by NuoDB, select all of the goalies for both the "BOS" team and the "BUF" team. Selecting only the rows required from the teams table, and using an INNER join on the players table, will only return players for those teams.

SELECT t.*,p.* FROM teams t
              INNER JOIN players p ON p.team_id = t.team_id
WHERE t.team_id in ('BOS','BUF');
 TEAM_ID    TEAM_NAME    WINS  LOSSES  DIVISION_ID  PLAYERID    PLAYER_NAME   YEAR  TEAM_ID  POSITION 
 -------- -------------- ----- ------- ------------ ---------- -------------- ----- -------- ---------
   BOS    Boston Bruins   49     29         NE      khudoan01  Anton Khudobin 2011    BOS        G    
   BOS    Boston Bruins   49     29         NE      rasktu01   Tuukka Rask    2011    BOS        G    
   BOS    Boston Bruins   49     29         NE      thomati01  Tim Thomas     2011    BOS        G    
   BOS    Boston Bruins   49     29         NE      turcoma01  Marty Turco    2011    BOS        G    
   BUF    Buffalo Sabres  39     32         NE      enrotjh01  Jhonas Enroth  2011    BUF        G    
   BUF    Buffalo Sabres  39     32         NE      macindr01  Drew MacIntyre 2011    BUF        G    
   BUF    Buffalo Sabres  39     32         NE      millery01  Ryan Miller    2011    BUF        G

If there are no players for a team, an INNER join will not return any rows. This is because an INNER join only returns rows that exist in both tables. The "WPG" team row only exists in the teams table. Using the join predicate of TEAM_ID, there are no rows in the players table that match.

SELECT t.*,p.* FROM teams t
              INNER JOIN players p ON p.team_id = t.team_id
WHERE t.team_id = 'WPG';
<< No Rows Returned >>

Another way of writing an INNER join is to use comma separated table names in the FROM clause and to include the join-predicate on the WHERE clause, along with any additional WHERE clause statements. As an example, the above SQL statement can be written as:

SELECT t.*,p.* FROM teams t, players p
 WHERE p.team_id = t.team_id AND t.team_id = 'WPG';