> For the complete documentation index, see [llms.txt](https://gyansetu-sql.gitbook.io/sql-programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gyansetu-sql.gitbook.io/sql-programming/sql-select/sql-joins.md).

# SQL Joins

### SQL JOIN

A SQL Join statement is used to combine data or rows from two or more tables based on a common field between them. Different types of Joins are:

* INNER JOIN
* LEFT JOIN
* RIGHT JOIN
* FULL JOIN

Consider the two tables below:

**Student**

![](/files/-LSfBITAhXi_jAK4pKxM)

**StudentCourse**

![](/files/-LSfBPMhhvEmcBkJME5N)

1. **INNER JOIN:** The INNER JOIN keyword selects all rows from both the tables as long as the condition satisfies. This keyword will create the result-set by combining all rows from both the tables where the condition satisfies i.e value of the common field will be same.\
   **Syntax**:

   ```sql
   SELECT table1.column1,table1.column2,table2.column1,....
   FROM table1 
   INNER JOIN table2
   ON table1.matching_column = table2.matching_column;


   table1: First table.
   table2: Second table
   matching_column: Column common to both the tables.
   ```

   **Note**: We can also write JOIN instead of INNER JOIN. JOIN is same as INNER JOIN.

   ![](http://www.vertabelo.com/_file/blog/sql-joins/sql-joins-venn-diagrams-inner-join.png)

   **Example Queries(INNER JOIN)**

   * This query will show the names and age of students enrolled in different courses.

     ```sql
     SELECT StudentCourse.COURSE_ID, Student.NAME, Student.AGE FROM Student
     INNER JOIN StudentCourse
     ON Student.ROLL_NO = StudentCourse.ROLL_NO;
     ```

     **Output**:\
     [![table2](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table22.png)](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table22.png)
2. **LEFT JOIN**: This join returns all the rows of the table on the left side of the join and matching rows for the table on the right side of join. The rows for which there is no matching row on right side, the result-set will contain *null*. LEFT JOIN is also known as LEFT OUTER JOIN.**Syntax:**

   ```sql
   SELECT table1.column1,table1.column2,table2.column1,....
   FROM table1 
   LEFT JOIN table2
   ON table1.matching_column = table2.matching_column;


   table1: First table.
   table2: Second table
   matching_column: Column common to both the tables.
   ```

   **Note**: We can also use LEFT OUTER JOIN instead of LEFT JOIN, both are same.\
   [![](https://i.stack.imgur.com/VkAT5.png)](https://i.stack.imgur.com/VkAT5.png)

   **Example Queries(LEFT JOIN)**:

   ```sql
   SELECT Student.NAME,StudentCourse.COURSE_ID 
   FROM Student
   LEFT JOIN StudentCourse 
   ON StudentCourse.ROLL_NO = Student.ROLL_NO;
   ```

   **Output**:\
   [![table3](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table31.png)](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table31.png)
3. **RIGHT JOIN**: RIGHT JOIN is similar to LEFT JOIN. This join returns all the rows of the table on the right side of the join and matching rows for the table on the left side of join. The rows for which there is no matching row on left side, the result-set will contain *null*. RIGHT JOIN is also known as RIGHT OUTER JOIN.**Syntax:**

   ```sql
   SELECT table1.column1,table1.column2,table2.column1,....
   FROM table1 
   RIGHT JOIN table2
   ON table1.matching_column = table2.matching_column;


   table1: First table.
   table2: Second table
   matching_column: Column common to both the tables.
   ```

   **Note**: We can also use RIGHT OUTER JOIN instead of RIGHT JOIN, both are same.\
   ![](http://www.databasejournal.com/img/jk_JustSQL4_image004.jpg)

   **Example Queries(RIGHT JOIN)**:

   ```sql
   SELECT Student.NAME,StudentCourse.COURSE_ID 
   FROM Student
   RIGHT JOIN StudentCourse 
   ON StudentCourse.ROLL_NO = Student.ROLL_NO;
   ```

   **Output:**\
   [![table6](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table6.png)](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table6.png)
4. **FULL JOIN:** FULL JOIN creates the result-set by combining result of both LEFT JOIN and RIGHT JOIN. The result-set will contain all the rows from both the tables. The rows for which there is no matching, the result-set will contain *NULL* values.**Syntax:**

   ```sql
   SELECT table1.column1,table1.column2,table2.column1,....
   FROM table1 
   FULL JOIN table2
   ON table1.matching_column = table2.matching_column;


   table1: First table.
   table2: Second table
   matching_column: Column common to both the tables.
   ```

   ![](https://i.stack.imgur.com/3Ll1h.png)

   **Example Queries(FULL JOIN)**:

   ```sql
   SELECT Student.NAME,StudentCourse.COURSE_ID 
   FROM Student
   FULL JOIN StudentCourse 
   ON StudentCourse.ROLL_NO = Student.ROLL_NO;
   ```

   **Output:**\
   [![table7](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table7.png)](http://cdncontribute.geeksforgeeks.org/wp-content/uploads/table7.png)
