SQL Server Cross og Ytre Apply

SQL Server Cross og Ytre Apply

Tabell verdsatte funksjoner er en type funksjoner i SQL Server som returnerer data som tabeller. Når du utfører sammenføyninger i SQL Server, kan du bli med rader fra to eller flere databasetabeller. Evnen til å bli med i en tabell med en utdata fra en tabell verdsatt funksjon støttes imidlertid ikke med mindre du bruker Apply Operators.

SQL Server støtter to Apply -operatører:

  1. Kryss Søk.
  2. Ytre påfør.

Cross Appe. Dette betyr at den henter radene i en tabell verdsatt funksjon og at tabellen bare blir med der det er kamper mellom de to tabellene.

Ytre Apply, vil bli med i postene til en tabell verdsatt funksjon, og den definerte tabellen, uavhengig av matchende rader.

For bedre å forstå hvordan du bruker kryss- og ytre anvendelsesoperatører i SQL Server, la oss ta en praktisk tilnærming.

Begynn med å opprette en testdatabase:

Opprett database ApplyDB;

Bytt til CREATE -databasen:

Bruk ApplyDB;

Deretter lager du tabeller og sett inn prøvedata som vist:

CreateTableUsers
(
id int identitet primær keynot null,
Brukernavn varchar (50) Ikke null,
)
Skaperbare innlegg
(
id int identitet primær keynot null,
post_name varchar (255) ikke null,
Kategori varchar (50),
PUB_DATE DATO,
user_id int ikke null
);
Sett inn (brukernavn)
Verdier ('Breadyoga'),
('Sputnik1'),
('Babayaga'),
('Jagten'),
('Lavalp');
Sett inn innlegg (postnavn, kategori, pub_date, user_id)
Verdier ('Title1', 'Category1', '2021-12-31', 1),
('Title2', 'Category2', '2019-03-03', 1),
('Title3', 'Category3', '2021-01-01', 2),
('Title4', 'Category4', '2021-06-07', 5),
('Title5', 'Category5', '2020-04-11', 3);

Eksemplet spørringsskript lager to tabeller: brukere og innlegg. Innleggstabellen inneholder en bruker_id-kolonne som inneholder verdiene fra brukernes tabell som tillater en-til-mange-forhold i databasen.

SQL Server Cross Søk

La oss prøve en indre sammenføyning med en tabell verdsatt tabell som:

CreateFunction getPostsbyId (@id int)
ReturnStable
som
komme tilbake
(
Velg * fra innlegg der bruker_id = 1
);

Velg u.Brukernavn, p.id, s.Post_name, p.pub_date
fra Brukere u
Innerjoin getPostsbyId (u.id) s
på u.id = s.bruker-ID;

SQL Server vil returnere en feil som:

For å løse dette kan vi bruke Cross Apply som:

Velg u.Brukernavn, p.id, s.Post_name, p.pub_date
fra brukere u
Cross Apply getPostsbyId (u.id) s

Spørringen ovenfor skal utføre vellykket og returnere resultatet som:

SQL Server Ytre Apply

Vi kan hente radene fra den fysiske og tabellen verdsatte funksjonen ved å bruke ytre Apply som vist:

Velg u.Brukernavn, p.id, s.Post_name, p.pub_date
fra brukere u
ytre påfør getpostsbyid (u.id) s

Det resulterende spørringssettet er som vist:

Konklusjon

Denne artikkelen dekker hvordan du jobber med SQL Server Ytre og Cross Apply Operators for å bli med i en fysisk tabell og en tabell verdsatt funksjon.