SQL RIGHT JOINPalabras clave

RIGHT JOIN es una palabra clave de unión en SQL, utilizada para extraer datos de múltiples tablas.

Similar a LEFT JOIN, pero su comportamiento es opuesto: RIGHT JOIN devuelve todos los registros de la tabla derecha, incluso si no hay registros coincidentes en la tabla izquierda.

La palabra clave RIGHT JOIN devuelve todas las filas de la tabla derecha (table2), incluso si no hay coincidencia en la tabla izquierda (table1). Si no hay coincidencia en la tabla izquierda, el resultado es NULL.

Sintaxis de SQL RIGHT JOIN

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

o:

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

Nota:En algunas bases de datos, RIGHT JOIN se denomina RIGHT OUTER JOIN.

  • table1: tabla izquierda.
  • table2: tabla derecha,RIGHT JOINconservará todos los registros de esta tabla.
  • ON table1.column_name=table2.column_name: especifica la condición de unión, generalmente el campo común de las dos tablas.

SQL RIGHT JOIN

Características

  • Conserva todos los registros de la tabla derecha: incluso si no hay registros coincidentes en la tabla izquierda, se incluirán todos los registros de la tabla derecha en el resultado.
  • Relleno cuando no hay coincidencia en la tabla izquierdaNULL: si no hay un registro correspondiente en la tabla izquierda, se usaNULLpara rellenar las columnas de la tabla izquierda.

Supongamos que hay dos tablas:EmployeesyDepartments。

Tabla Employees:

EmployeeID Name DepartmentID
1 Alice 10
2 Bob 20
3 Charlie NULL

Tabla Departments:

DepartmentID DepartmentName
10 HR
20 IT
30 Finance

Consulta usando RIGHT JOIN

SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;

Resultado de la consulta:

Name DepartmentName
Alice HR
Bob IT
NULL Finance

Explicación:RIGHT JOINDevolvióDepartmentstodos los registros de la tabla. ParaDepartmentID = 30de los registros, debido a queEmployeesno hay datos coincidentes en la tabla, suNamecolumna esNULL。

yLEFT JOINDiferencias

  • LEFT JOIN: devuelve todos los registros de la tabla izquierda, incluso si la tabla derecha no tiene coincidencias.
  • RIGHT JOIN: devuelve todos los registros de la tabla derecha, incluso si la tabla izquierda no tiene coincidencias.

Base de datos de demostración

En este tutorial, usaremos la base de datos de muestra EJEMPLO.

Antes de operar, agregue un registro a la tabla access_log; este registro no tiene datos correspondientes en la tabla Websites:

INSERT INTO `access_log` (`aid`, `site_id`, `count`, `date`) VALUES ('10', '6', '111', '2016-03-09');

A continuación se muestran los datos seleccionados de la tabla "Websites":

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | Ejemplo      | http://www.example.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

A continuación se muestran los datos de la tabla de registros de acceso al sitio web "access_log":

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)


Ejemplo de SQL RIGHT JOIN

La siguiente instrucción SQL devolverá los registros de acceso al sitio web.

En el siguiente ejemplo, tomamos Websites como tabla izquierda y access_log como tabla derecha:

Ejemplo

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;

La ejecución del SQL anterior produce el siguiente resultado:

Nota:La palabra clave RIGHT JOIN devuelve todas las filas de la tabla derecha (access_log), incluso si no hay coincidencia en la tabla izquierda (Websites).


Otras extensiones