SQL Server Cross e Outer Applica

SQL Server Cross e Outer Applica

Le funzioni valutate della tabella sono un tipo di funzioni in SQL Server che restituisce i dati come tabelle. Quando si eseguono join in SQL Server, è possibile unire le righe da due o più tabelle di database. Tuttavia, la possibilità di unire una tabella con un'uscita di una funzione valutata da tabella non è supportata a meno che non si utilizzi gli operatori applicabili.

SQL Server supporta due operatori applicabili:

  1. Cross applicare.
  2. Applicare esterno.

Cross Applica. Ciò significa che recupera le righe di una funzione valutata da tabella e quella della tabella per unirsi solo dove ci sono corrispondenze tra le due tabelle.

Applicazione esterna, si unirà ai record di una funzione valutata della tabella e alla tabella definita, indipendentemente da eventuali righe di corrispondenza.

Per comprendere meglio come utilizzare gli operatori Croce ed Outer Applicare in SQL Server, adottiamo un approccio pratico.

Inizia creando un database di test:

Creare database Applicadb;

Passa al database Crea:

Usa Applicdb;

Quindi, creare tabelle e inserire i dati di esempio come mostrato:

createtableusers
(
id int identity primario keynot null,
Nome utente Varchar (50) non null,
)
Post creati
(
id int identity primario keynot null,
post_name Varchar (255) non null,
Categoria Varchar (50),
data pub_date,
user_id int non null
);
insertIntosers (nome utente)
valori ("Breadadoga"),
('Sputnik1'),
('Babayaga'),
('Jagten'),
("Lavalp");
INSERTINTO POST (POST_NAME, CATEGORIA, PUB_DATE, USER_ID)
valori ('title1', 'category1', '2021-12-31', 1),
('Titolo2', 'Categoria2', '2019-03-03', 1),
('Titolo3', 'Categoria3', '2021-01-01', 2),
('Titolo4', 'Categoria4', '2021-06-07', 5),
('Titolo5', 'Categoria5', '2020-04-11', 3);

Lo script di query di esempio crea due tabelle: utenti e post. La tabella POST contiene una colonna user_id che contiene i valori dalla tabella degli utenti che consentono le relazioni da uno a many nel database.

SQL Server Cross si applica

Cerchiamo di unire una tabella interiore con una tabella come:

createfunction getpostsbyid (@id int)
ReturnStable
COME
ritorno
(
Seleziona * Dai post dove user_id = 1
);
andare
Seleziona u.Nome utente, p.id, p.Post_name, p.pub_date
da user u
Innerjoin getpostsbyid (u.id) p
su u.id = p.ID utente;

SQL Server restituirà un errore come:

Per risolvere questo problema, possiamo usare Cross Applica come:

Seleziona u.Nome utente, p.id, p.Post_name, p.pub_date
dagli utenti u
Cross applicare getpostsbyid (u.id) p

La query sopra dovrebbe eseguire correttamente e restituire il risultato come:

SQL Server Outer Applica

Possiamo recuperare le righe dalla funzione fisica e valutata dalla tabella usando l'applicazione esterna come mostrato:

Seleziona u.Nome utente, p.id, p.Post_name, p.pub_date
dagli utenti u
esterno applicare getpostsbyid (u.id) p

Il set di query risultante è come mostrato:

Conclusione

Questo articolo copre come lavorare con gli operatori esterni e incrociati SQL Server per unirsi a una tabella fisica e una funzione valutata dalla tabella.