SQL apakšvaicājums Savienojieties ar ārējo vaicājumu

Sql Apaksvaicajums Savienojieties Ar Arejo Vaicajumu



Kad runa ir par darbu ar relāciju datu bāzēm, jums ir jāapgūst, kā manipulēt ar vaicājumiem un apvienot tos, lai veiktu vēlamos uzdevumus. Tāpēc katrs relāciju datu bāzes dzinējs ievieš savu SQL valodas garšu, cenšoties saviem lietotājiem nodrošināt izcilas funkcijas, efektivitāti un ērtu lietošanu.

Viena no jaudīgākajām SQL funkcijām ir apakšvaicājumi. Apakšvaicājumi ir ligzdotu vaicājumu kopa lielākā un sarežģītākā vaicājumā. Apakšvaicājumi ļauj izgūt datus vai veikt sarežģītākas darbības kā vienu entītiju.







Mēs varam izmantot apakšvaicājumus, lai veiktu datu filtrēšanu, kārtošanu, apkopošanu vairākās tabulās un daudz ko citu.



Tomēr cita funkcija, kas ir paslēpta zem SQL apakšvaicājumiem, ir pazīstama kā apakšvaicājumu pievienošanās. Tie ir līdzīgi apakšvaicājumiem; tā vietā tie ir savienojumi, kas ļauj izmantot ārējā vaicājuma apakšvaicājumus, lai savienotu tabulas.



Ja jūsu galva griežas, neuztraucieties, jo apakšvaicājumu pievienošanās var būt sarežģīta, jo īpaši sākumā. Tomēr šajā pamācībā ir mēģināts sadalīt apakšvaicājumu savienojumus elementārās darbībās, neatstājot pārāk daudz iespēju.





Ņemiet vērā, ka mēs pieņemam, ka jūs neesat jauns SQL, SQL savienojumu, SQL apakšvaicājumu vai citu lietojumu jomā. Tomēr, ja vēlaties, skatiet mūsu apmācības par tēmām, lai uzzinātu vairāk.

Apgūstiet SQL ārējos savienojumus

Ja vēlaties saprast, kā strādāt ar apakšvaicājumu savienojumiem, galvenais faktors ir iemācīties strādāt ar ārējiem savienojumiem.



Ja neesat pazīstams, SQL ārējais savienojums ļauj iegūt visas rindas no vienas tabulas un atbilstošās rindas no otrās tabulas. Tas ir nedaudz sarežģītāks, ieskaitot kreiso ārējo savienojumu, labo ārējo savienojumu, pilnu ārējo savienojumu utt.

SQL kreisajā ārējā savienojumā vaicājums atgriež visas rindas no kreisās tabulas un atbilstošās rindas no labās tabulas. Vaicājumā ir iekļautas NULL vērtības iegūtajās kolonnās, ja labajā tabulā nav atbilstošu rindu.

Labās ārējās savienojuma gadījumā vaicājums atgriež visas rindas no labās tabulas, bet tikai atbilstošās rindas no kreisās tabulas. Tāpat vaicājumā ir iekļautas NULL vērtības, ja no kreisās tabulas nav atbilstošu rindu.

Visbeidzot, mums ir pilns ārējais savienojums. Šis savienojums atgriež visas rindas no labās un kreisās tabulas un NULL vērtības visiem neatbilstošiem ierakstiem.

SQL apakšvaicājuma pievienošanās

Tagad, kad esam sapratuši par SQL apakšvaicājumiem, parunāsim par apakšvaicājumu pievienošanos. Apakšvaicājumu savienošana ļauj mums izmantot ārējā vaicājuma apakšvaicājumus, lai savienotu tabulas.

Ja jautājat, vai tas tā ir? Jā, tas ir viss, ko dara apakšvaicājumu pievienošanās.

Lai to labāk parādītu, izmantojiet šādu sintakses piemēru, kas parādīts tālāk.

ATLASĪT *
NO tabulas1
PA kreisi ĀRĒJĀ PIEVIENOTIES (
ATLASĪT kolonnu 1, kolonnu 2
NO tabulas2
) AS apakšvaicājums
ON table1.column3 = apakšvaicājums.kolonna1;


Iepriekšējā sintaksē mēs atlasījām visas pirmās tabulas kolonnas, izmantojot kreiso ārējo savienojumu, lai savienotu to ar apakšvaicājumu. Apakšvaicājuma uzdevums ir ienest definētās kolonnas no 2. tabulas. Pēc tam mēs to savienojam ar 1. tabulu atbilstoši 1. tabulas 2. kolonnas un apakšvaicājuma 1. kolonnas nosacījumam.

Praktisks piemērs:

Teorētiski tas šķiet mazāk intuitīvs, taču pieņemsim reālu scenāriju, izmantojot Sakila datubāzi.

Pieņemsim, ka mēs vēlamies izgūt visu datubāzē esošo filmu sarakstu un to attiecīgās valodas. Filmu valodas tiek saglabātas valodu tabulā, bet filmu nosaukumi tiek saglabāti filmu tabulā.

Tomēr filmu tabulā ir sveša atslēga, ko sauc par kolonnu “language_id” no valodu tabulas. Tāpēc mēs varam izmantot apakšvaicājuma savienojumu ar kreiso ārējo savienojumu, lai savienotu divas tabulas, kā parādīts šajā vaicājumā:

SELECT f.title, l.name AS valodu
NO filmas f
PA kreisi ĀRĒJĀ PIEVIENOTIES (
SELECT language_id, name
NO valodas
) AS l
ON f.language_id = l.language_id;


Iepriekšējā piemēra vaicājumā mēs atlasām nosaukuma kolonnu no filmas tabulas un nosaukuma kolonnu no valodu tabulas.

Pēc tam mēs izmantojam apakšvaicājumu, lai valodu tabulā atlasītu valodas_id un nosaukuma kolonnu. Nākamais solis ir savienot to ar filmu tabulu ar nosacījumu, ka valodas_id no filmas tabulas ir vienāds ar valodas_id no valodu tabulas.

Lai nodrošinātu, ka visas plēves ir iekļautas rezultātā, mums ir jāizmanto kreisais ārējais savienojums, kas sastāv no visiem rezultātiem no kreisās tabulas, kas šajā gadījumā ir filmu tabula.

Izvades piemērs ir šāds:


To pašu varam izdarīt arī ar labo ārējo savienojumu. Sintakse ir šāda:

ATLASĪT *
NO tabulas1
LABĀ ĀRĒJĀ PIEVIENOTIES (
ATLASĪT kolonnu 1, kolonnu 2
NO tabulas2
) AS apakšvaicājums
ON table1.column3 = apakšvaicājums.kolonna1;


Tas darbojas līdzīgi, bet ietver visus ierakstus labajā tabulā, pat ja nav atbilstošu ierakstu.

Noderīgas lietas, kas jāzina

Ir labi saprast, ka, lai gan apakšvaicājumu pievienojumi ir neticami noderīgi un var optimizēt jūsu darbplūsmu, izmantojiet tos piesardzīgi.

Piemēram, izvairieties izmantot apakšvaicājumu savienojumus ar lielu datu kopu. Tas ir tāpēc, ka tie var atgriezt plašus ierakstus, kas var ietekmēt datu bāzes veiktspēju.

Pirms apakšvaicājumu pievienošanas apsveriet iespēju izmantot vaicājumu analīzes rīkus.

Secinājums

Šajā apmācībā tika pētīti pamati darbam ar apakšvaicājumiem un apakšvaicājumu savienojumiem SQL. Šīs apmācības beigās jūs tagad saprotat, kā strādāt ar apakšvaicājumu savienojumiem, kāpēc tie var būt jāizmanto, kā arī praktisku piemēru, kā tie var jums palīdzēt darbplūsmā.