Database
 sql >> Database >  >> RDS >> Database

Esercitazione SQL JOINs con esempi

In questo articolo, esamineremo da vicino le JOIN di SQL Server. Esamineremo tutti i tipi di join di SQL Server supportati con sintassi, illustrazioni visive ed esempi.

Come tutti sappiamo, i dati delle tabelle sono il fulcro di qualsiasi database SQL. Per utilizzarlo in modo efficace, gli amministratori di database devono estrarre regolarmente record da diverse tabelle in base a determinate condizioni. Ed è esattamente a questo che servono gli SQL JOIN.

JOIN è una clausola SQL utilizzata per recuperare il dati da due o più tabelle basati su relazioni logiche tra le tabelle. I join indicano in che modo SQL Server deve utilizzare i dati di una tabella per selezionare le righe in un'altra tabella.

Diversi tipi di JOIN in SQL

SQL Server supporta diversi tipi di JOIN, incluso INNER JOIN , UNISCI AUTOMATICAMENTE , CROSS JIN e UNIONE ESTERNA . In effetti, ogni tipo di join definisce il modo in cui due tabelle sono correlate in una query. Gli OUTER JOIN, a loro volta, possono essere suddivisi in LEFT OUTER JOIN , UNIONE ESTERNE DESTRA , e join ESTERNI COMPLETI .

Per dimostrare meglio come funzionano i JOIN, creeremo due tabelle.

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
);

Successivamente, dobbiamo inserire i dati nelle tabelle create.

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');

UNIONE INTERNA SQL

L'istruzione INNER JOIN restituisce i record che hanno valori corrispondenti in entrambe le tabelle.

La sintassi della clausola SQL INNER JOIN è la seguente:

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

join SQL OUTER

Contrariamente alle clausole INNER JOIN, le OUTER JOIN restituiscono non solo record corrispondenti ma anche record non corrispondenti. Nel caso in cui ci siano righe non corrispondenti in una tabella unita, verranno mostrati i valori NULL per loro.

Esistono i due tipi seguenti di OUTER JOIN in SQL Server:SQL LEFT JOIN e SQL RIGHT JOIN. Diamo un'occhiata più da vicino a ciascuno di essi.

ACCESSO A SINISTRA DI SQL

SQL LEFT JOIN restituisce tutti i record della tabella di sinistra (tabella A) ei record corrispondenti della tabella di destra (tabella B). Il risultato è 0 record dal lato destro se non c'è corrispondenza.

La sintassi della clausola SQL LEFT JOIN è la seguente:

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

ACCESSO DESTRO SQL

La parola chiave RIGHT JOIN restituisce tutti i record della tabella di destra (table2) ei record corrispondenti della tabella di sinistra (table1). Il risultato è 0 record dal lato sinistro se non c'è corrispondenza.

La sintassi della clausola SQL RIGHT JOIN è la seguente:

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

join SQL COMPLETO OUTER

Il FULL OUTER JOIN restituisce tutti i record quando c'è una corrispondenza nei record della tabella di sinistra (tabella A) o di destra (tabella B).

La sintassi della clausola SQL FULL OUTER JOIN è la seguente:

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, noto anche come JOIN cartesiano, recupera tutte le combinazioni di righe da ciascuna tabella. In questo tipo di JOIN, il set di risultati viene restituito moltiplicando ogni riga della tabella A con tutte le righe della tabella B se non viene introdotta alcuna condizione aggiuntiva.

Per comprendere meglio i CROSS JOIN, diamo un'occhiata al diagramma di Venn di seguito.

La sintassi di SQL CROSS JOIN è la seguente:

SELECT * 
FROM tableA 
CROSS JOIN tableB;

SQL Self JOIN

Un self-join è un JOIN regolare, ma il tavolo è unito a se stesso. Ciò implica che ogni riga della tabella è combinata con se stessa e con ogni altra riga della tabella.

La sintassi di SQL self JOIN è la seguente:

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

Conclusione

La conoscenza e l'esperienza nell'utilizzo delle clausole SQL JOIN sono competenze essenziali di qualsiasi DBA o analista. Con la sua straordinaria funzionalità di completamento del codice, dbForge Studio per SQL Server può farti risparmiare tempo e fatica nello scrivere anche le clausole JOIN più complesse. Non è necessario tenere a mente centinaia di nomi di colonne o alias, dbForge Studio per SQL richiederà una clausola SQL JOIN completa. La ricca funzionalità dello strumento rende la progettazione di query SQL complesse e la gestione delle condizioni JOIN rapida, facile e conveniente.