YouTip LogoYouTip

Sql Join Right

RIGHT JOIN is a join keyword in SQL used to retrieve data from multiple tables. Similar to LEFT JOIN, but with opposite behavior: RIGHT JOIN returns all records from the right table, even if there are no matching records in the left table. The RIGHT JOIN keyword returns all rows from the right table (table2), even if there are no matches in the left table (table1). If there is no match in the left table, the result is NULL. ### SQL RIGHT JOIN Syntax SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name; or: SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 ON table1.column_name=table2.column_name; **Note:** In some databases, RIGHT JOIN is called RIGHT OUTER JOIN. * **table1**: the left table. * **table2**: the right table; `RIGHT JOIN` preserves all records from this table. * **ON table1.column_name=table2.column_name**: specifies the join condition, typically a common field between the two tables. ![Image 1: SQL RIGHT JOIN]( ### Characteristics * **Preserves all records from the right table**: All records from the right table appear in the result, even if there are no matching records in the left table. * **Fills unmatched left-table columns with `NULL`**: When no corresponding record exists in the left table, its columns are filled with `NULL`. Assume we have two tables: `Employees` and `Departments`. **Employees table**: | EmployeeID | Name | DepartmentID | | --- | --- | --- | | 1 | Alice | 10 | | 2 | Bob | 20 | | 3 | Charlie | NULL | **Departments table**: | DepartmentID | DepartmentName | | --- | --- | | 10 | HR | | 20 | IT | | 30 | Finance | * * * #### Query Using RIGHT JOIN SELECT Employees.Name, Departments.DepartmentName FROM Employees RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; **Query output result**: | Name | DepartmentName | | --- | --- | | Alice | HR | | Bob | IT | | NULL | Finance | **Explanation**: `RIGHT JOIN` returns all records from the `Departments` table. For the record with `DepartmentID = 30`, since there is no matching data in the `Employees` table, its `Name` column is `NULL`. ### Difference from `LEFT JOIN` * **`LEFT JOIN`**: Returns all records from the left table, even if there are no matching entries in the right table. * **`RIGHT JOIN`**: Returns all records from the right table, even if there are no matching entries in the left table. * * * ## Sample Database In this tutorial, we will use the sample database. Before proceeding, insert a record into the `access_log` table that has no corresponding data in the `Websites` table: INSERT INTO `access_log` (`aid`, `site_id`, `count`, `date`) VALUES ('10', '6', '111', '2016-03-09'); Below is data selected from the "Websites" table: +----+--------------+---------------------------+-------+---------+| id | name | url | alexa | country |+----+--------------+---------------------------+-------+---------+| 1 | Google | https://www.google.cm/ | 1 | USA || 2 | Taobao | https://www.taobao.com/ | 13 | CN || 3 | | | 4689 | CN || 4 | Weibo | http://weibo.com/ | 20 | CN || 5 | Facebook | https://www.facebook.com/ | 3 | USA || 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |+----+---------------+---------------------------+-------+---------+ Below is data from the "access_log" website access log table: mysql> SELECT * FROM access_log;+-----+---------+-------+------------+| aid | site_id | count | date |+-----+---------+-------+------------+| 1 | 1 | 45 | 2016-05-10 || 2 | 3 | 100 | 2016-05-13 || 3 | 1 | 230 | 2016-05-14 || 4 | 2 | 10 | 2016-05-14 || 5 | 5 | 205 | 2016-05-14 || 6 | 4 | 13 | 2016-05-15 || 7 | 3 | 220 | 2016-05-15 || 8 | 5 | 545 | 2016-05-16 || 9 | 3 | 201 | 2016-05-17 || 10 | 6 | 111 | 2016-03-19 |+-----+---------+-------+------------+9 rows in set (0.00 sec) * * * ## SQL RIGHT JOIN Example The following SQL statement returns website access records. In the example below, we treat Websites as the left table and access_log as the right table: ## Example SELECT websites.name, access_log.count, access_log.date FROM websites RIGHT JOIN access_log ON access_log.site_id=websites.id ORDER BY access_log.count DESC; Executing the above SQL yields the following output: !( **Note:** The RIGHT JOIN keyword returns all rows from the right table (access_log), even if there are no matches in the left table (Websites).
← Sql Join FullSql Join Left β†’