Duomenys duomenų bazėje yra padalintos atskirose lentelėse. Būtų gerai, jeigu būtų galima visus duomenis turėti vienoje lentelėje ir iš jos atsirinkti kas domina. Tokios galimybės reikalauja reliacinės duomenų bazės principai. SQL kalba ir reliacinė duomenų bazės, pastarąją sąlygą išpildo su apjungimu (angl. JOIN). JOIN apjungia dvi skirtingas lenteles pagal pasirinktus kriterijus.
Pats paprasčiausias automatinis apjungimas yra lentelių atskyrimas kableliais po FROM.
SELECT „stulpelių sąrašas“ FROM lentelėnr1, lentelėnr2 WHERE „sąlygos“;
Lentelės apjungiamos į vieną didelę lentelę, kur kiekvienai eilutei iš pirmos lentelės yra sudaromos naujos eilutės tiek, kiek jų yra antrojoje lentelėje. Pavyzdžiui:
Lentelė A
S1 | S2 |
1 | I |
2 | II |
Lentelė B
T1 | T2 |
1 | a |
2 | b |
Apjungtos lentelės kaip „A,B“:
S1 | S2 | T1 | T2 |
1 | I | 1 | a |
1 | I | 2 | b |
2 | II | 1 | a |
2 | II | 2 | b |
Jeigu vieno stulpelio duomenys nurodo objekto vardą pagal kurį galima atpažinti kitose lentelės, tai logiška suformuoti naująją lentelę pagal šį kriterijų.
SELECT S1, S2, T2 FROM A, B WHERE S1=T1;
S1 | S2 | T2 |
1 | I | a |
2 | II | b |
Palengvinti pastarojo tipo apjungimą galima pasinaudoti vidiniu apjungimu INNER JOIN ON. Taigi analogiškai pastaroji buvusi SQL užklausa atitiks šias:
SELECT S1, S2, T2 FROM A INNER JOIN B ON (S1 = T2);
INNER yra numatytoji reikšmė, todėl nėra būtina. Taigi SQL užklausa gali būti tokia:
SELECT S1, S2, T2 FROM A JOIN B ON (S1 = T2);
Užduotys
1. Suformuokite lentelę, kurioje būtų visi užsakymai ir klientų duomenys, o tuo tarpu klientoid nebūų rodomas.
2. Suformuokite lentelę, kurioje būtų tik prekė ir miestas iš kurio užsakė klientas.
3. Sugalvokite dar 3 SQL užklausas, kuriose būtų apjungtos abi lentelės.