sql >> Base de Datos >  >> RDS >> Database

Tutorial de SQL JOIN con ejemplos

En este artículo, vamos a echar un vistazo de cerca a los JOIN de SQL Server. Revisaremos todos los tipos de JOIN de SQL Server admitidos con sintaxis, ilustraciones visuales y ejemplos.

Como todos sabemos, los datos de las tablas son el núcleo de cualquier base de datos SQL. Para usarlo de manera efectiva, los administradores de la base de datos necesitan extraer registros de varias tablas en función de ciertas condiciones con regularidad. Y eso es exactamente para lo que son SQL JOIN.

JOIN es una cláusula SQL utilizada para recuperar el datos de dos o más tablas según las relaciones lógicas entre las tablas. Las uniones indican cómo SQL Server debe usar los datos de una tabla para seleccionar las filas en otra tabla.

Diferentes tipos de JOIN en SQL

SQL Server admite diferentes tipos de JOIN, incluido INNER JOIN , AUTO UNIÓN , UNIÓN CRUZADA y UNIÓN EXTERNA . De hecho, cada tipo de combinación define la forma en que se relacionan dos tablas en una consulta. OUTER JOINS, a su vez, se pueden dividir en LEFT OUTER JOINS , UNIONES EXTERNAS DERECHAS y UNIONES EXTERNAS COMPLETAS .

Para demostrar mejor cómo funcionan los JOIN, crearemos dos tablas.

CREATE TABLE AdventureWorks2019.dbo.users (
auid INT IDENTITY
,username VARCHAR(50) NOT NULL
,password VARCHAR(50) NOT NULL
,createdate DATETIME NOT NULL
,isActive TINYINT NOT NULL
);

CREATE TABLE AdventureWorks2019.dbo.userprofile (
apid INT NOT NULL
,auid INT NOT NULL
,firstname VARCHAR(50) NOT NULL
,lastname VARCHAR(50) NOT NULL
,email VARCHAR(100) NOT NULL
,phone VARCHAR(45) NOT NULL
);

A continuación, debemos insertar los datos en las tablas creadas.

USE AdventureWorks2019
GO
Insert into dbo.users
(auid, username,password, createdate, isActive)
values
(1,'admin','pswrd123', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(1,1,'Jack', 'Wolf', '[email protected]','600075764216');
Insert into dbo.users
(auid,username,password, createdate, isActive)
values
(2, 'admin1','pass506', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(2, 3, 'Tom', 'Collins', '[email protected]','878511311054');
Insert into dbo.users
(auid, username,password, createdate, isActive)
values
(4,'fox12','[email protected]', GETDATE(), 1);
Insert into userprofile
(apid, auid, firstname, lastname, email, phone)
values
(4,5,'Bill', 'Fonskin', '[email protected]','450985764216');
Insert into dbo.users
(auid,username,password, createdate, isActive)
values
(6, 'lexus1267','98hnfRT6', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(7, 7, 'John', 'Hopkins', '[email protected]','878511311054');

UNIÓN INTERNA SQL

La declaración INNER JOIN devuelve registros que tienen valores coincidentes en ambas tablas.

La sintaxis de la cláusula SQL INNER JOIN es la siguiente:

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

UNIONES EXTERNAS SQL

Al contrario de las cláusulas INNER JOIN, OUTER JOIN devuelven no solo registros coincidentes sino también registros no coincidentes. En caso de que haya filas que no coincidan en una tabla unida, se mostrarán los valores NULL para ellas.

Existen los siguientes dos tipos de OUTER JOIN en SQL Server:SQL LEFT JOIN y SQL RIGHT JOIN. Echemos un vistazo más de cerca a cada uno de ellos.

UNIÓN IZQUIERDA DE SQL

SQL LEFT JOIN devuelve todos los registros de la tabla de la izquierda (tabla A) y los registros coincidentes de la tabla de la derecha (tabla B). El resultado es 0 registros del lado derecho si no hay ninguna coincidencia.

La sintaxis de la cláusula SQL LEFT JOIN es la siguiente:

SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
 ON tableA.column_name = tableB.column_name;

UNIÓN DERECHA DE SQL

La palabra clave RIGHT JOIN devuelve todos los registros de la tabla derecha (tabla2) y los registros coincidentes de la tabla izquierda (tabla1). El resultado es 0 registros del lado izquierdo si no hay ninguna coincidencia.

La sintaxis de la cláusula SQL RIGHT JOIN es la siguiente:

SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
 ON tableA.column_name = tableB.column_name;

COMBINACIÓN EXTERNA COMPLETA DE SQL

FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en los registros de la tabla izquierda (tabla A) o derecha (tabla B).

La sintaxis de la cláusula SQL FULL OUTER JOIN es la siguiente:

SELECT column_name(s)
 FROM tableA
 FULL OUTER JOIN tableB
 ON tableA.column_name = tableB.column_name
  WHERE condition;

UNIÓN CRUZADA SQL

SQL CROSS JOIN, también conocido como JOIN cartesiano, recupera todas las combinaciones de filas de cada tabla. En este tipo de JOIN, el conjunto de resultados se devuelve al multiplicar cada fila de la tabla A con todas las filas de la tabla B si no se introduce ninguna condición adicional.

Para comprender mejor las CROSS JOIN, echemos un vistazo al siguiente diagrama de Venn.

La sintaxis de SQL CROSS JOIN es la siguiente:

SELECT * 
FROM tableA 
CROSS JOIN tableB;

SQL Self JOIN

Una autocombinación es una COMBINACIÓN normal, pero la tabla se une consigo misma. Esto implica que cada fila de la tabla se combina consigo misma y con todas las demás filas de la tabla.

La sintaxis de SQL self JOIN es la siguiente:

SELECT column_name(s)
FROM table1 T1, table1 T2
  WHERE condition;

Conclusión

El conocimiento y la experiencia en el uso de cláusulas SQL JOIN son habilidades esenciales de cualquier DBA o analista. Con su función estelar de finalización de código, dbForge Studio para SQL Server puede ahorrarle tiempo y esfuerzo al escribir incluso las cláusulas JOIN más complejas. No necesita tener en cuenta cientos de nombres de columnas o alias, dbForge Studio para SQL le solicitará una cláusula SQL JOIN completa. La rica funcionalidad de la herramienta hace que el diseño de consultas SQL complejas y la gestión de las condiciones JOIN sean rápidas, sencillas y cómodas.