YDRE JOIN-erklæring

Ledig

Årsager til YDRE JOIN

Kan du i øvrigt huske, da vi slog vores regneark sammen, og vores kontorrengøringsopgaver forsvandt, fordi der endnu ikke var renset?

Hvis du kører en forespørgsel som denne:

SELECT * FROM task

Så får vi dette resultat:

id emploee_id navn deadline
1 1 Ret en fejl på frontend 2022-06-01
2 2 Ret en fejl på backend 2022-06-15
3 5 Køb kaffe 2022-07-01
4 5 Køb kaffe 2022-08-01
5 5 Vil købe kaffe 2022-09-01
6 (NUL) Ryd op på kontoret (NUL)
7 4 Nyd livet (NUL)
8 6 Nyd livet (NUL)

"Clear Office"-opgaven forsvinder, hvis vi forsøger at forbinde opgavetabellen med medarbejdertabellen efter medarbejder_id.

For at løse dette problem er der tilføjet forskellige modifikatorer til JOIN-operatoren, som gør det muligt at lagre sådanne forældreløse rækker uden et par i en anden tabel.

Lad mig minde dig om den klassiske form for JOIN-operatøren:

table 1 JOIN table 2 ON
condition

Vi kan bede SQL Server om at sikre, at alle data fra den venstre tabel (tabel1) er til stede i den samlede tabel. Også selvom der ikke er et par til dem i den rigtige tabel. For at gøre dette skal du bare skrive:

table 1 LEFT JOIN table 2 ON condition

Hvis du ønsker, at den sammenføjede tabel skal have alle rækkerne fra den højre tabel , så skal du skrive:

table 1 RIGHT JOIN table 2 ON
 condition

Lad os skrive en forespørgsel, der vil kombinere alle opgaver og medarbejdere, så opgaver uden en udførende ikke går tabt. For at gøre dette skal du skrive en forespørgsel:

SELECT * FROM employee e RIGHT JOIN task t ON e.id = t.emploee_id

Og resultatet af denne forespørgsel:

id navn beskæftigelse løn alder join_date id emploee_id navn
1 Ivanov Ivan Programmer 100.000 25 2012-06-30 1 1 Ret en fejl på frontend
2 Petrov Petr Programmer 80.000 23 2013-08-12 2 2 Ret en fejl på backend
4 Rabinovich Moisha Direktør 200.000 35 2015-05-12 7 4 Nyd livet
5 Kirienko Anastasia Kontorchef 40.000 25 2015-10-10 3 5 Køb kaffe
5 Kirienko Anastasia Kontorchef 40.000 25 2015-10-10 4 5 Køb kaffe
5 Kirienko Anastasia Kontorchef 40.000 25 2015-10-10 5 5 Køb kaffe
6 Vaska kat 1000 3 2018-11-11 8 6 Nyd livet
(NUL) (NUL) (NUL) (NUL) (NUL) (NUL) 6 (NUL) Ryd op på kontoret

Endnu en række er blevet tilføjet til vores tabel, og interessant nok er der mange NULL-værdier i den. Alle data, der blev hentet fra medarbejdertabellen, vises som NULL, da der ikke var nogen eksekutør fra medarbejdertabellen til opgaven "Rent kontor".

JOIN typer

Der er 4 typer JOINs i alt. De er præsenteret i nedenstående tabel:

Kort indgang lang indgang Forklaring
1 TILSLUTTE INDRE JOIN Kun poster, der er i tabel A og B
2 VENSTRE JOIN VENSTRE YDRE JOIN Alle rækker uden et par fra tabel A skal være
3 HØJRE JOIN HØJRE YDRE JOIN Alle rækker uden et par fra tabel B skal være
4 YDRE SAMLING FULD YDRE TILSLUTNING Alle rækker af basepar fra tabel A og B skal være

For nemheds skyld, hvis vi repræsenterer tabeller som sæt, kan JOIN vises som et billede:

Sæt skæringspunkt betyder, at der for en tabel er en tilsvarende post fra en anden tabel, som den refererer til.

Spørgsmål fra interviewet

Nogle gange bliver nybegyndere bombarderet med et meget simpelt spørgsmål ved et interview. Med vores tabeller kan det formuleres som følger:

"Skriv en forespørgsel, der viser en liste over alle medarbejdere, for hvem der ikke er nogen opgaver ." Lad os først prøve at omformulere dette spørgsmål lidt: "Skriv en forespørgsel, der viser en liste over alle medarbejdere fra medarbejdertabellen, for hvilke der ikke er nogen opgaver i opgavetabellen ." Vi skal have dette sæt:

Der er mange måder at løse dette problem på, men jeg starter med den enkleste: Først kan du forbinde vores tabeller med en LEFT JOIN, og derefter bruge WHERE til at udelukke alle rækker, for hvilke de manglende data var polstret med NULLs.

SELECT * FROM employee e LEFT JOIN task t ON e.id = t.emploee_id  
WHERE t.id IS NULL 

Og resultatet af denne forespørgsel:

id navn beskæftigelse løn alder join_date id emploee_id navn
3 Ivanov Sergey Tester 40.000 tredive 2014-01-01 (NUL) (NUL) (NUL)

Den eneste ulempe ved denne løsning er, at her indeholder rækkerne i tabellen NULL, og vi skal efter betingelse vise en liste over medarbejdere.

For at gøre dette skal du enten angive de nødvendige kolonner i medarbejdertabellen i SELECT, eller hvis du skal vise dem alle, kan du skrive følgende konstruktion:

SELECT e.* FROM employee e, task t 

Den komplette anmodning vil se således ud:

SELECT e.*  
FROM employee e RIGHT JOIN task t ON e.id = t.emploee_id  
WHERE t.id IS NULL 

resultatet af denne forespørgsel:

id navn beskæftigelse løn alder join_date
3 Ivanov Sergey Tester 40.000 tredive 2014-01-01

Resten af ​​metoderne er overladt til dig til lektier. Jeg vil ikke fratage dig fornøjelsen af ​​at finde dem selv.

Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu