Database
 sql >> Base de Dados >  >> RDS >> Database

Tutorial de SQL JOINs com exemplos


Neste artigo, examinaremos de perto os JOINs do SQL Server. Analisaremos todos os tipos de JOIN do SQL Server suportados com sintaxe, ilustrações visuais e exemplos.

Como todos sabemos, os dados da tabela são o núcleo de qualquer banco de dados SQL. Para usá-lo com eficiência, os administradores de banco de dados precisam extrair regularmente registros de várias tabelas com base em determinadas condições. E é exatamente para isso que servem os SQL JOINs.

JOIN é uma cláusula SQL usada para recuperar o dados de duas ou mais tabelas com base em relacionamentos lógicos entre as tabelas. As junções indicam como o SQL Server deve usar os dados de uma tabela para selecionar as linhas em outra tabela.

Diferentes tipos de JOINs no SQL


O SQL Server oferece suporte a diferentes tipos de JOINs, incluindo INNER JOIN , AUTO PARTICIPAÇÃO , CROSS JOIN e OUTER JOIN . Na verdade, cada tipo de junção define a maneira como duas tabelas são relacionadas em uma consulta. OUTER JOINS, por sua vez, podem ser divididos em LEFT OUTER JOINS , JUNÇÕES EXTERNAS DIREITAS , e FULL OUTER JOINS .

Para melhor demonstrar como funcionam os JOINs, vamos criar duas tabelas.
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
);

Em seguida, precisamos inserir os dados nas tabelas criadas.
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');

SQL INNER JOIN


A instrução INNER JOIN retorna registros que possuem valores correspondentes em ambas as tabelas.

A sintaxe da cláusula SQL INNER JOIN é a seguinte:
SELECT column_name(s)
FROM table1
INNER JOIN table2
 ON table1.column_name = table2.column_name;

SQL OUTER JOINs


Ao contrário das cláusulas INNER JOIN, OUTER JOINs retornam não apenas registros correspondentes, mas também não correspondentes. Caso haja linhas não correspondentes em uma tabela unida, os valores NULL serão mostrados para elas.

Existem os dois tipos de OUTER JOIN a seguir no SQL Server:SQL LEFT JOIN e SQL RIGHT JOIN. Vejamos mais de perto cada um deles.

SQL LEFT JOIN


SQL LEFT JOIN retorna todos os registros da tabela da esquerda (tabela A) e os registros correspondentes da tabela da direita (tabela B). O resultado é 0 registros do lado direito se não houver correspondência.

A sintaxe da cláusula SQL LEFT JOIN é a seguinte:
SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
 ON tableA.column_name = tableB.column_name;

SQL RIGHT JOIN


A palavra-chave RIGHT JOIN retorna todos os registros da tabela direita (tabela2) e os registros correspondentes da tabela esquerda (tabela1). O resultado é 0 registros do lado esquerdo se não houver correspondência.

A sintaxe da cláusula SQL RIGHT JOIN é a seguinte:
SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
 ON tableA.column_name = tableB.column_name;

SQL FULL OUTER JOIN


O FULL OUTER JOIN retorna todos os registros quando há uma correspondência nos registros da tabela esquerda (tabela A) ou direita (tabela B).

A sintaxe da cláusula SQL FULL OUTER JOIN é a seguinte:
SELECT column_name(s)
 FROM tableA
 FULL OUTER JOIN tableB
 ON tableA.column_name = tableB.column_name
  WHERE condition;

SQL CROSS JOIN


SQL CROSS JOIN, também conhecido como JOIN cartesiano, recupera todas as combinações de linhas de cada tabela. Nesse tipo de JOIN, o conjunto de resultados é retornado multiplicando cada linha da tabela A por todas as linhas da tabela B se nenhuma condição adicional for introduzida.

Para entender melhor os CROSS JOINs, vamos dar uma olhada no diagrama de Venn abaixo.

A sintaxe do SQL CROSS JOIN é a seguinte:
SELECT * 
FROM tableA 
CROSS JOIN tableB;

SQL Self JOIN


Um self-join é um JOIN regular, mas a tabela é unida a si mesma. Isso implica que cada linha da tabela é combinada consigo mesma e com todas as outras linhas da tabela.

A sintaxe do SQL self JOIN é a seguinte:
SELECT column_name(s)
FROM table1 T1, table1 T2
  WHERE condition;

Conclusão


O conhecimento e a experiência no uso de cláusulas SQL JOIN são habilidades essenciais de qualquer DBA ou analista. Com sua excelente funcionalidade de conclusão de código, o dbForge Studio for SQL Server pode economizar seu tempo e esforço escrevendo até mesmo as cláusulas JOIN mais complexas. Você não precisa ter em mente centenas de nomes de colunas ou aliases, o dbForge Studio for SQL solicitará uma cláusula SQL JOIN completa. A rica funcionalidade da ferramenta torna o projeto de consultas SQL complexas e o gerenciamento de condições de JOIN rápido, fácil e conveniente.