10. QUERY MBI DISA TABELA (EQUI, INNER, OUTER, CROSS JOIN)
Një nga karakteristikat e SQL-sëështë mbledhja dhe manipulimi i të dhënave nga disa tabela. Kjo krijon mundësinë e ruajtjes së të dhënave në disa tabela dhe jo në një tabelë të vetme duke lehtësuar punën e përdoruesit. Nëpërmjet deklarimeve JOIN bëhet e mundur bashkimi i të dhënave të tabelave të ndryshme në një tabelë të vetme. Mënyrat e bashkimit të tabelave të të dhënave në një tabelë të vetme rezultatesh janë si vijon.
- Bashkimi kartezian (CROSS JOIN)
Ky është bashkimi më i thjeshtë i tabelave pa specifikuar ndonjë kusht. Konkretisht, e zemë se jepen dy tabela të dhënash, Tabela_1 dhe Tabela_2 , të cilat përmbajnë përkatësisht 3 dhe 4 rekorde për atributet përkatësisht Fusha_1 dhe Fusha_2.
Për të bashkuar këta dy tabela pa kushte përdoret kodi i mëposhtëm
Në këtë rast tabela e rezultateve përmban një numër rekordesh të barabartë me prodhimin e numrit të rekordeve të dy tabelave. Tabela e rezultateve përmban të gjithë kombinimet e rekordeve të tabelës së parë me ato të tabelës së dytë, pra 12 rekordet e tabelës që vijon.
Le të japim një shembull praktik të përdorimit të këtij lloj bashkimi. E zemë se kemi dy tabela të dhënash. Një tabelë e quajtur “Studenti” që përmban atributet “ID”, “Emri”, “Viti”, dhe një tabelë e quajtur “Programi” që përmban atributet “ID” dhe “Lënda”. Nevojitet që dy tabelat të bashkohen në mënyrë që tabela e re të ketë lidhjen e nxënësve me të gjithë lëndët e programit. Kjo realizohet me një bashkim kartezian në trajtën
Këtu është e rëndësishme të vihet në dukje që emrat e atributeve të zgjedhura janë shoqëruar me një parashtesë të ndarë me pikë. Kjo është e nevojshme sepse në këtë rast ekzistojnë dy atribute me të njëjtin emër por kuptime të ndryshme. Konkretisht, kemi ID të studentit tek tabela Studenti dhe ID të lëndës tek tabela Programi. Në mënyrë që tëpërcaktohet se cilat atribute tëpërfshihen në dalje, është i nevojshëm shoqërimi i tyre me emrat e tabelave ose shkurtimeve të specifikuara në FROM për këto tabela. Tabela e rezultateve të shembullit tëmësipërm do të përmbajë të gjithë kombinimet e rekordeve të dy tabelave me të dhënat e 5 atributeve.
- Bashkimi EQUI-JOIN
Ky lloj bashkimi nevojitet kur të dhënat e tabelave duhen lidhur duke përdorur atribute të njëjta në to. Le të shqyrtojmë një databazë që përmban tre tabela. Tabela e parë e quajtur “Konsumatorët” përmban tre atribute: Emri, Adresa, Qyteti. Tabela e dytë e quajtur “Produktet” përmban tre atribute për produktet për shitje: kodi (kod produkti), përshkrimi (emri i produktit), çmimi (çmimi për njësi). Tabela e tretë e quajtur “Shitjet” përmban të dhënat e shitjeve të kryera për atributet: data (data e shitjes), kodi (kodi i produktit), sasia (sasia në njësi) dhe emri (emri i konsumatorit). Siç shihet, tabelat e të dhënave të porosive dhe të produkteve kanë njëatribut të përbashkët qëështë kodi i produktit, ndërsa tabelat e shitjeve dhe e konsumatorëve kanë të përbashkët atributin e emrit të konsumatorëve. Bashkimi i tabelave “Produktet”-“Shitjet” realizohet me anë të kodit të mëposhtëm.
Tabela e rezultateve në këtë rast do të përmbajë nënbashkësinë e rekordeve të bashkimit kartezian të dy tabelave në të cilat fushat e kodit të produktit janë të njëjta. Në këtë mënyrë janë bashkuar të dhënat e dy tabelave për ti bashkëngjitur rekordeve të produkteve të shitura përshkrimet dhe çmimet e tyre.Në rast se përcaktohet si kusht që tabela e rezultateve të nxjerrë më tutje të dhënat e dy tabelave vetëm për një produkt të caktuar, p.sh produktin televizor me kod 2357, atëherë klauzola WHERE modifikohet në trajtën
Në komandën SELECT ne e dimë tashmë që mund të specifikojmë shprehje aritmetike. Për shembull, në rast se kërkohet sa janë të ardhurat e krijuara nga shitjet e produktit televizor, atëherë zhvillojmë kodin SQL të mëposhtëm
Tabela e rezultateve do të shfaqë vetëm një të dhënë që tregon me përshkrimin TOTALI vlerën totale të parave të nxjerra nga shitja e televizorëve.
Ne mund të realizojmë gjithashtu bashkime me më shumë se dy tabela. Referuar shembullit në shqyrtim, nëse kërkohet një tabelë të dhënash që të përmbajë si rekorde emrat e blerësve, adresën e tyre dhe totalin e parave të blerjeve të tyre sipas produkteve të blera, atëherë një kod SQL i përshtatshëm është
Vëmë në dukje që klauzola ORDER BY është jo e domosdoshme, por ajo ndihmon në paraqitjen e tabelës së rezultateve duke i renditur rekordet sipas emrit të blerësve. Gjithashtu, theksojmë se tabelat e përdorura që nxjerrin numrin më të vogël të rekordeve për kushtet e vendosura në klauzolën WHERE, njihen si tabela bazë. Në rastin tonë tabela Shitjet është tabela bazë, ndërsa dy të tjerat i bashkohen kësaj tabele.
Së fundi, përveç bashkimeve EQUI-JOIN, përmendim përdorimin e bashkimeve të llojit NON-EQUI-JOIN. Kodet e tyre janë të ngjashme me të vetmin ndryshim që klauzola WHERE nuk ka kushte barazimi, por përmban kushte të cilat nuk janë barazime.
- Bashkimet OUTER dhe INNER JOIN
Bashkimi i llojit INNER JOIN jep një tabelë rezultatesh prej kombinimit të vlerave të kollonave të dy tabelave bazuar në kushtin e JOIN. Trajta e përgjithsme e një bashkimi të tillë jepet si në sintaksën
Sipas këtij kodi çdo rresht tek tabela1 krahasohet me çdo rresht tek tabela2. Nëse çifti i rreshtave të krahasuar plotëson kushtin e përputhjes së vlerës së atributit fusha në të dy tabelat, atëherë një rekord i ri përfshihet në tabelën e rezultateve i cili përmban atributet e zgjedhura në të dy tabelat. Theksojmë se tabela e rezultateveështë e njëjtë me atë të bashkimit EQUI-JOIN.
Bashkimet e llojit OUTER-JOIN janë tre llojesh, LEFT (Majtas), RIGHT (djathtas) dhe FULL (të plota).Le të japim nga një shembull për secilën prej tyre duke marrë për ilustrim databazën e përdorur në bashkimin EQUI-JOIN.
Një sintaksë që përmban një bashkim LEFT OUTER JOIN jepet në trajtën
Tabela e rezultateve përmban të gjithë rekordet e tabelës sëprodukteve me të dhënat e lidhura të dy tabelave sipas fushës Kodi, duke përfshirë dhe ato rekorde që janë në tabelën e produkteve por jo në tabelën e shitjeve fushat e të cilit janë NULL. Një pamje e rezultateve është si vijon
Një sintaksë që përmban një bashkim RIGHT OUTER JOIN jepet në trajtën
Tabela e rezultateve tashmë përmban të gjithë rekordet e tabelës së shitjeve për atributet emri dhe kodi të cilës i bashkangjiten sipas kodit të produktit atributet kodi dhe çmimi të tabelës së produkteve. Nëse një rekord me një kod të caktuar produkti nuk gjen rekord me të njëjtin kod produkti tek tabela e produkteve, atëherëfushat përkatëse të saj janë NULL në tabelën e rezultateve. Në realitet kjo mund të interpretohet si një gabim që mund të ketë ndodhur në vlerat e kodit të produktit tek tabela e shitjeve.
Një sintaksë që përmban një bashkim FULL OUTER JOIN jepet në trajtën
Ndërsa një shembull i tabelës së rezultateve jepet si më poshtë