20761 Querying Data with Transact-SQL
![](https://cet.rs/wp-content/uploads/2020/10/velike_MCSA_SQL_2016_1.png)
Još 1986. godine je usvojen standardni jezik pomoću koga “razgovaramo” sa bazama podataka. Jezik se skraćeno piše SQL – Structured Query Language i do danas je doživeo puno revizija i proširenja u skladu sa razvojem kompjutera i softvera. Svi sistemi za rad sa bazama podataka su saglasni sa ovim standardom, tako da se jednom naučen SQL može primeniti svuda.
SQL omogućava operacije dodavanja, izmene, brisanja podataka i naravno pregleda podataka po potrebi za veoma složene kriterijume. Na primer, želite podatke o prodaji u prvom kvartalu ove godine za određeni region i određenu kategoriju proizvoda/usluga i to želite da uporedite sa prvim kvartalom predhodne godine. Nikakav problem, samo odgovarajući upit pošaljete serveru i odmah dobijete rezultate. Dobijene rezultate možete potom preneti u neki dokument ili na primer u Excel gde ćete ih dodatno obraditi, napraviti grafikone i izveštaje.
Cena (€)
Akcija (€)
Trajanje č/d
Termin
Dani
Vreme
250
220
24 / 6
16/09/2024 - 24/09/2024
pon,uto,sre,cet,pet
17:30-21:00
Informacije o kursu
Kurs je namenjen svima koji u svom radu koriste velike skupine podataka koje moraju da obrađuju i prave razne vrste izveštaja.
Kurs je namenjen i profesionalcima koji rade sa bazama podataka na Microsoft SQL Serveru, programerima aplikacija koje pristupaju relacionim bazama i kreatorima BI (Business Inteligence) sistema. Predstavlja početni kurs za Microsoft SQL Server i osnovu neophodnu za sve naredne kurseve.
Pošto obrađuje standardni jezik za zadavanje upita, znanja stečena na ovom kursu su primenjiva i na ostalim relacionim bazama koje podržavaju standardni SQL programski jezik kao što su Oracle, Access, My SQL, Informix i druge.
Kurs je takođe interesantan i profesionalcima koji se bave pisanjem izveštaja, poslovnim analitičarima koji koriste Excel, SPSS i druge alate, kao i svim ostalim koji se u svom radu oslanjaju na podatke iz relacionih baza, specifično Microsoft SQL Servera. Takođe, programeri desktop, web, mobilnih i embedded aplikacija će naučiti kako da iz svog koda pristupe SQL serveru i rade sve potrebne manipulacije podacima.
Kurs u CET-u izvode sertifikovani Microsoft treneri sa višegodišnjim iskustvom u nastavi. Uz naučena poglavlja polaznicima se uvek predstavljaju konkretni primeri iz prakse.
Za praćenje ovog kursa neophodna su osnovna znanja za rad u Microsoft Windows operativnom sistemu. Nikakva druga predznanja o bazama podataka nisu potrebna – ovo je početni kurs.
Kreiranje i zadavanje SQL upita serveru nije komplikovano. Ne zahteva nikakvo poznavanje matematike, programiranja ili IT tehnologije. Uložen trud u učenje se brzo vraća, rezultati su odmah vidljivi i to je odlična motivacija za napredak.
Ekonomisti, marketing, statistika, finansije, planiranje i ostali zaposleni u strukama koje nemaju veze sa IT strukom, mogu veoma brzo naučiti kako da od podataka koje već imaju u organizaciji dobiju ono što im je potrebno. Na taj način ne zavisite od toga da li sistem ima ili nema vama važan izveštaj – napravićete ga sami.
Excel je verovatno najkorišćeniji alat za analizu i obradu podataka. Ako znate Excel, brzo ćete razumeti i SQL. I on ima redove, kolone, filtere, sortiranja,… Veoma je blizak osnovnom engleskom govornom jeziku, pa ga zbog toga negde zovu i SEQL, skraćeno od Structured English Query Language.
Izuzetno su dobra iskustva sa polaznicima SQL kursa koji imaju samo osnovna IT znanja. Oni odlično znaju šta im treba da bi kvalitetno obavljali svoj posao i SQL tretiraju kao alat koji im to omogućava. Preuzimaju podatke sa servera u svojoj organizaciji i prebacuju ih u program koji odlično znaju da koriste. Na kursu se često razmenjuju pitanja i odgovori u tom smislu i tako stiču dragocene informacije.
- Upoznavanje sa Microsoft SQL Serverom 2016, njegovom arhitekturom, osnovnim alatima i servisima
- Uvod u rad sa SQL upitima
- Pisanje SELECT upita
- Dobijanje podataka iz više tabela
- Sortiranje i filtriranje podataka
- Tipovi podataka na SQL Serveru
- Modifikovanje podataka
- Korišćenje dostupnih funkcija
- Grupisanje i agregacija podataka
- Korišćenje pod-upita
- Table Expressions
- Set operatori
- Windows rankiranje, offset i agregatne funkcije
- Pivot tabele i grupisani setovi podataka
- Pozivanje uskladištenih procedura
- Uvod u programiranje SQL servera
- Upravljanje greškama
- Implementacija transakcija
Kurs 20761 – Querying Data with Transact-SQL je zvanična priprema za polaganje ispita I sticanje međunarodno priznatih Microsoft sertifikata. Navedeni kurs je priprema za polaganje ipita 70-761 Querying Data with Transact-SQL.
Sve Microsoft ispite možete prijaviti I polagati u CET testing centru. CET je zvanični Pearson Vue test centar.
Ovo je početni Microsoft SQL server kurs. Naučićete da kreirate različite upite ka Microsoft SQL Server bazi podataka koji su potrebni u svakodnevnom radu, za kreiranje različitih izveštaja i analizu podataka. Neophodan deo u sastavu projektnog tima koji se bavi izradom bilo kakve poslovne aplikacije, web sajta ili mobline aplikacije koja pristupa bazi podataka. Svaka druga organizacija koja se na bavi direktno IT delatnošću, a za svoje potrebe ima poslovni sistem baziran na SQL Serveru, može imati potrebu za ovakvim profilom. Microsoft SQL server je dominantna baza podataka u poslovnom
mr Miloš Milosavljević
- CET predavac od 1997.
- Sertifikovani Microsoft trener od 1999 godine
- Microsoft Certified IT Professional
- Microsoft Certified Solutions Associate (Microsoft SQL Server)
- Microsoft Certified Technology Associate
- Microsoft Certified Technology Specialist
- Microsoft Certified Database Administrator
- Učešće u organizaciji i predavanja na konferenciji „SINERGIJA“ ( http://www.mssinergija.net ) od osnivanja 2001. godine na dalje.
dr Snežana Popović
- CET predavac od 1999
- Sertifikovani Microsoft trener od 2002.
- Microsoft Certified Application Developer
- MCSD Microsoft Certified Solution Developer – Microsoft .NET
- MCTS Microsoft Certified Technology Specialist
- MCPD Microsoft Certified Professional Developer
- Docent na Računarskom fakultetu
Čitalište
Osnove SQL-a
Upoznajte DDL, DML i JOINs
Struktuirani upitni jezik je jedan od osnovnih sastavnih blokova savremene arhitekture baza podataka. Definiše metode koje se koriste da bi se kreirale relacione baze podataka i da bi se sa njima radilo na svim glavnim platformama. Na prvi pogled, jezik izgleda složeno i skoro zastrašujuće, ali uopšte ga nije teško savladati.
O SQL-u
Ispravan izgovor naziva jezika je stalno sporno pitanje u zajednici stručnjaka koji se bave bazama podataka. Američki nacionalni institut za standarde je ustanovio pravilan izgovor imena kao „eskjuel“, međutim, mnogi stručnjaci koji se bave bazama podataka navikli su da izgovaraju „sikvel“, tako da vama prepuštamo izbor.
Postoji nekoliko vrsta SQL-a. Oraklova baza podataka koristi svoju verziju PL/SQL, a SQL server kompanije „Majkrosoft“ koristi Transact-SQL. Sve varijacije se zasnivaju na industrijskom standardu ANSI SQL. Ovaj uvod koristi SQL naredbe usaglašene sa ANSI standardom koji može da se koristi u bilo kom savremenom sistemu baza podataka.
DDL i DML
Naredbe u SQL-u mogu da se podele na dva glavna podjezika. Jezik za definisanje podataka (DDL) sadrži naredbe koje se koriste da bi se kreirale i uništile baze podataka i njihovi objekti. Pošto se uz pomoć tog jezika definiše struktura baze podataka, njeni administratori i korisnici mogu da koriste jezik za manipulisanje podacima (DML) da bi umetali, pronalazili i menjali podatke koji se u njoj nalaze.
Naredbe u jeziku za definisanje podataka
Jezik za definisanje podataka se koristi da bi se kreirale i uništile baze podataka i njihovi objekti. Te naredbe prvenstveno koriste administratori baza podataka tokom faza uspostavljanja ili uklanjanja baza podataka. Predstavićemo vam strukturu i upotrebu četiri osnovne naredbe u jeziku za definisanje podataka.
CREATE. Instaliranje sistema za upravljanje bazama podataka u računar omogućava vam da kreirate i upravljate mnogim nezavisnim bazama podataka. Na primer, želite da kreirate bazu podataka kontakata klijenata za odeljenje prodaje i bazu podataka zaposlenih za kadrovsku službu. Naredba CREATE se koristi da bi se uspostavila bilo koja od navedenih baza podataka na vašoj platformi. Na primer, naredba:
CREATE DATABASE employees
kreira praznu bazu podataka koja se zove „employees“ (zaposleni) na vašem sistemu za upravljanje bazama podataka. Pošto ste kreirali bazu podataka, sledeći korak bi bio kreiranje tabela koje će sadržati podatke. Varijanta naredbe CREATE može se koristi u tom postupku. Naredba:
CREATE TABLE personal_info (first_name char(20) not null, last_name char(20) not null, employee_id int not null)
kreira tabelu pod nazivom „personal_info“ (lični_podaci) u postojećoj bazi podataka. U ovom primeru, tabela sadrži tri atributa: ime, prezime i lični broj zaposlenog (first_name, last_name, and employee_id) zajedno sa još nekim detaljima.
USE. Naredba USE vam omogućava da odredite bazu podataka u kojoj želite da radite u okviru vašeg sistema za upravljanje bazama podataka. Na primer, ako trenutno radite u bazi podataka prodaje i želite da izdate neke naredbe koje će uticati na bazu podataka zaposlenih, pre njih morate iskoristiti sledeću naredbu u SQL-u:
USE employees
Izuzetno je važno da uvek budete svesni u kojoj bazi podataka radite pre nego što izdate naredbe u SQL-u kojima manipulišete podacima.
ALTER. Kad ste kreirali tabelu u okviru baze podataka, desiće se da ćete želeti da izmenite njenu definiciju. Naredba ALTER vam omogućava da izvršite promene u strukturi tabele, a da pri tom ne morate da je obrišete ili ponovo kreirate. Pogledajte sledeću naredbu:
ALTER TABLE personal_info ADD salary money null
U ovom primeru dodali smo novi atribut tabeli personal_info, a to je zarada zaposlenog (employee’s salary). Argument „money“ (novac) određuje da je zarada zaposlenog izražena u formatu dolara i centi. Konačno, ključna reč „null“ (nula) govori bazi podataka da je sasvim u redu ako to polje ne sadrži nikakvu vrednost za bilo kog zaposlenog.
DROP. Poslednja naredba u jeziku za definisanje podataka, DROP, omogućava vam da uklonite celokupne objekte baze podataka iz sistema za upravljanje bazama podataka. Na primer, ako želite da trajno uklonite tabelu personal_info koju ste kreirali, koristite sledeću naredbu:
DROP TABLE personal_info
Slično tome, naredbu koju ćemo navesti koristili bi da uklonite celokupnu bazu podataka zaposlenih (employee):
DROP DATABASE employees
Ovu naredbu bi valjalo pažljivo koristiti jer DROP uklanja celu strukturu podataka iz vaše baze podataka. Ako želite da uklonite pojedinačne zapise, koristite naredbu DELETE u jeziku za manipulisanje podacima.
Naredbe u jeziku za manipulisanje podacima
Jezik za manipulisanje podacima (DML) koristi se da bi se pronalazile, umetale i menjale informacije u bazi podataka. Te naredbe koriste svi korisnici baza podataka tokom rutinskih postupaka u bazi podataka.
INSERT. Naredba INSERT u SQL-u se koristi da bi se dodali zapisi već postojećoj tabeli. Vratimo se primeru personal_info iz prethodnog odeljka i zamislite da naša kadrovska služba treba da doda novog zaposlenog bazi podataka. Za taj postupak možete koristi naredbu sličnu ovoj:
INSERT INTO personal_info values(‘bart’,’simpson’,12345,$45000)
Obratite pažnju na to da su određene četiri vrednosti za ovaj unos. One odgovaraju atributima tabele redosledom kojim su definisani: ime, prezime, lični broj zaposlenog i plata (first_name, last_name, employee_id and salary).
SELECT. Naredba SELECT je najčešće korišćena naredba u SQL-u. Ona omogućava korisnicima baze podataka da pronađu određenu informaciju koju žele iz operativne baze podataka. Pogledajte nekoliko primera u kojima ćemo ponovo koristiti tabelu personal_info iz baze podataka zaposlenih.
Naredba koja je dole prikazana pronalazi sve informacije koje su sadržane u tabeli personal_info. Obratite pažnju na to da se zvezdica u SQL-u koristi kao džoker karta. Naredba doslovno znači „Odaberi sve iz tabele personal_info.“
SELECT *
FROM personal_info
S druge strane, korisnici bi možda želeli da ograniče atribute koji se pretražuju iz baze podataka. Na primer, kadrovska služba traži popis prezimena svih zaposlenih u kompaniji. Sledeća naredna u SQL-u prikazaće samo tu informaciju:
SELECT last_name
FROM personal_info
Klauzula WHERE može se koristiti da bi se ograničili zapisi koji se traže samo na one koji zadovoljavaju određene uslove. Direktor bi možda želeo da pregleda dosijee svih zaposlenih koji imaju visoke plate. Sledeća naredba prikazuje sve podatke koji se nalaze u tabeli personal_info za zapise koji imaju platu veću od 50.000 dolara:
SELECT *
FROM personal_info
WHERE salary > $50000
UPDATE. Naredba UPDATE može se koristiti da bi se izmenile informacije koje se nalaze u tabeli, kako pojedinačno, tako i grupno. Pretpostavimo da je kompanija svim zaposlenima povećala godišnju platu za 3 procenta zbog povećanja troškova života. Sledeća naredba u SQL-u se može koristiti da bi se to brzo primenilo na sve zaposlene koji se nalaze u bazi podataka:
UPDATE personal_info
SET salary = salary * 1.03
Kad novi zaposleni Bart Simpson pokaže da je izuzetno vredan i uzoran radnik, uprava želi da ga nagradi za sva njegova dostignuća tako što mu daje povišicu od 5.000 dolara. Klauzula WHERE bi mogla da se koristi da bi izdvojila Barta koji treba da dobije povišicu:
UPDATE personal_info
SET salary = salary + $5000
WHERE employee_id = 12345
DELETE. Hajde konačno da objasnimo i naredbu DELETE. Videćete da je sintaksa ove naredbe slična sintaksama ostalih naredbi u jeziku za manipulisanje podacima (DML). Nažalost, najnoviji korporativni izveštaj o ostvarenoj zaradi nije ispunio očekivanja i naš siroti Bart je dobio otkaz. Naredba DELETE zajedno sa klauzulom WHERE može se koristiti da se njegov zapis izbriše iz tabele personal_info:
DELETE FROM personal_info
WHERE employee_id = 12345
JOINs
Kad smo savladali osnove SQL-a, vreme je da se upoznamo sa najmoćnijim konceptima koje taj jezik može da ponudi – sa naredbom JOIN. Ona vam omogućava da kombinujete podatke iz većeg broja tabela da biste efikasno obradili velike količine podataka. U tim naredbama leži prava moć baza podataka.
Da bismo istražili upotrebu osnovne operacije JOIN u kombinovanju podataka iz dve tabele, nastavićemo sa primerom koristeći tabelu PERSONAL_INFO i dodaćemo još jednu tabelu u celom tom procesu. Pretpostavimo da imamo tabelu koja se zove DISCIPLINARY_ACTION koja je kreirana pomoću sledeće naredbe:
CREATE TABLE disciplinary_action (action_id int not null, employee_id int not null, comments char(500))
Ta tabela sadrži rezultate disciplinskih mera (disciplinary actions) koje su sprovedene nad zaposlenima u kompaniji. Primetićete da ne sadrži nikakve druge podatke o zaposlenima osim njihovog ličnog broja. Lako je zamisliti mnogobrojne situacije u kojima biste mogli da kombinujete informacije iz tabela DISCIPLINARY_ACTION i PERSONAL_INFO.
Pretpostavimo da ste dobili zadatak da napravite izveštaj u kome ćete popisati sve disciplinske mere sprovedene nad svim zaposlenima koji imaju platu veću od 40.000 dolara. Upotreba operacije JOIN, u tom slučaju, je jasna. Možemo prikazati te informacije pomoću sledeće naredbe:
SELECT personal_info.first_name, personal_info.last_name, disciplinary_action.comments
FROM personal_info, disciplinary_action
WHERE personal_info.employee_id = disciplinary_action.employee_id
AND personal_info.salary > 40000
Napisani kod određuje dve tabele koje želimo da spojimo u klauzuli FROM i zatim uključuje naredbu u klauzuli WHERE da bi ograničio rezultate samo na zapise koji imaju odgovarajuće lične brojeve zaposlenih i odgovaraju našem kriterijumu koji kaže da plata mora biti veća od 40.000 dolara.
Prikazivanje podataka iz više tabela pomoću izraza INNER JOIN u SQL-u
Izraz INNER JOIN prikuplja informacije koje se pojavljuju u dve ili više baza podataka
Izrazi INNER JOIN su daleko najčešće korišćena vrsta izraza JOIN u SQL-u. Oni prikupljaju informacije koje se nalaze u dve ili više tabela baza podataka. Uslov spajanja (engl. join) određuje koji će se zapisi sparivati i određen je u naredbi WHERE. Na primer, ako vam je potreban spisak vozača uparenih sa vozilima kojima upravljaju, a da se, pri tom, vozači i vozila nalaze u istom gradu, sledeći upit u SQL-u će vam obaviti taj zadatak:
SELECT lastname, firstname, tag
FROM drivers, vehicles
WHERE drivers.location = vehicles.location
Rezultati koje ćete dobiti izgledaju ovako:
lastname firstname tag
———– ———— —-
Baker Roland H122JM
Smythe Michael D824HA
Smythe Michael P091YF
Jacobs Abraham J291QR
Jacobs Abraham L990MT
Primetićete da smo dobili baš onakav rezultat kakav smo tražili. Moguće je stvoriti još precizniji upit određujući dodatne kriterijume u naredbi WHERE. Pretpostavimo da je prvobitni upit spojio vozače sa vozilima koja ne smeju da voze (vozače kamiona sa automobilima i obrnuto). Možete koristiti sledeći upit da biste rešili taj problem:
SELECT lastname, firstname, tag, vehicles.class
FROM drivers, vehicles
WHERE drivers.location = vehicles.location
AND drivers.class = vehicles.class
Ovaj primer precizno određuje izvornu tabelu za atribut klase u naredbi SELECT jer je klasa dvoznačna – pojavljuje se u obema tabelama. Kod obično određuje koju kolonu tabele treba obuhvatiti rezultatom upita. U ovom slučaju, ne pravi se razlika jer su kolone identične i povezane su korišćenjem spajanja po jednakosti (EQUIJOIN). Međutim, ako kolone sadrže različite podatke, ova razlika će biti od presudnog značaja. Prikazaćemo vam rezultate ovog upita:
lastname firstname tag class
———- ———— —- ——
Baker Roland H122JM Car
Smythe Michael D824HA Truck
Jacobs Abraham J291QR Car
U redovima koji nedostaju spojen je Michael Smythe sa automobilom i Abraham Jacobs sa kamionom, vozilima kojima ne smeju da upravljaju.
Izraze INNER JOIN možete koristiti da bi kombinovali podatke iz tri ili više tabela.
Prikupljanje podataka pomoću upita u SQL-u: Upoznavanje sa naredbom SELECT
Struktuirani upitni jezik nudi korisnicima baza podataka moćan i prilagodljiv mehanizam prikupljanja podataka – naredbu SELECT. U ovom odeljku, upoznaćemo se sa opštom formom naredbe SELECT i zajedno ćemo napraviti nekoliko oglednih upita u bazi podataka. Ako je ovo prvi vaš pohod u svet struktuiranog upitnog jezika, možda bi bilo dobro da obnovite osnove SQL-a pre nego što nastavimo. Ako želite da kreirate bazu podataka od samog početka, najbolje bi bilo da naučite kako da kreirate baze podataka i tabele u SQL-u.
Pošto ste utvrdili osnove, hajde da počnemo sa istraživanjem naredbe SELECT. Kao i u prethodnim lekcijama o SQL-u, i ovde ćemo koristiti naredbe koje su u skladu standardom ANSI SQL. Možda biste mogli ponovo da pregledate dokumentaciju vašeg sistema za upravljanje bazama podataka da biste utvrdili da li podržava napredne opcije koje mogu da povećaju efikasnost i delotvornost vašeg koda u SQL-u.
Opšta forma naredbe SELECT
Opšta forma naredbe SELECT izgleda ovako:
SELECT select_list
FROM source
WHERE condition(s)
GROUP BY expression
HAVING condition
ORDER BY expression
Prvi red naredbe upućuje SQL procesor da je ta naredba SELECT i da želimo da prikažemo informacije iz baze podataka. Deo select_list omogućava nam da odredimo vrstu informacije koju želimo da prikažemo. Naredba FROM u drugom redu određuje specifičnu tabelu ili tabele u bazi podataka, a naredba WHERE pruža nam mogućnost da ograničimo rezultate na one zapise koji zadovoljavaju utvrđeni uslov ili uslove – condition(s).
Poslednje tri naredbe predstavljaju napredne odlike koje se nalaze van domena ovog odeljka – istražićemo ih u sledećim člancima o SQL-u.
Najlakše je savladati SQL proučavajući primere. U tom smislu, trebalo bi da počnemo sa pregledanjem nekih upita u bazama podataka. U ovom odeljku ćemo koristiti tabelu zaposlenih koja se nalazi u kadrovskoj službi zamišljene XZY komapanije da bismo ilustrovali sve naše upite.
Prikazaćemo celu tabelu:
EmployeeID | LastName | FirstName | Salary | ReportsTo |
1 | Smith | John | 32000 | 2 |
2 | Scampi | Sue | 45000 | NULL |
3 | Kendall | Tom | 29500 | 2 |
4 | Jones | Abraham | 35000 | 2 |
5 | Allen | Bill | 17250 | 4 |
6 | Reynolds | Allison | 19500 | 4 |
7 | Johnson | Katie | 21000 | 3 |
Prikazivanje podataka iz cele tabele
Direktor kadrovske službe u XYZ kompaniji prima mesečni izveštaj o platama zaposlenih i sve potrebne informacije za svakog zaposlenog u kompaniji. Generisanje takvog izveštaja je primer najjednostavnije forme naredbe SELECT. Ona jednostavno prikazuje sve informacije koje su sadržane u tabeli u bazi podataka – u svakom redu i svakoj koloni. Napisaćemo upit koji dovodi do tog rezultata:
SELECT *
FROM employees
Prilično jednostavno, zar ne? Zvezdica (*) koja se pojavljuje u select_list je džoker koji se koristi da obavesti bazu podataka da želimo da prikažemo podatke iz svih kolona u tabeli zaposlenih identifikovanih u naredbi FROM. Pošto smo želeli da prikažemo sve podatke iz baze informacija, nije bilo potrebno da koristimo naredbu WHERE da bismo ograničili redove izabrane iz tabele. Ovako izgledaju rezultati našeg upita:
EmployeeID | LastName | FirstName | Salary | ReportsTo |
———- | ——– | ——— | —— | ——— |
1 | Smith | John | 32000 | 2 |
2 | Scampi | Sue | 45000 | NULL |
3 | Kendall | Tom | 29500 | 2 |
4 | Jones | Abraham | 35000 | 2 |
5 | Allen | Bill | 17250 | 4 |
6 | Reynolds | Allison | 19500 | 4 |
7 | Johnson | Katie | 21000 | 3 |
Uvod u relacije u bazama podataka
Oni koji tek počnu da se bave bazama podataka veoma često ne mogu odmah da uoče razliku između baza podataka i tabelarnih proračuna. Uspevaju da vide tabele ispunjene podacima i shvataju da im baze podataka omogućavaju da organizuju i izvlače podatke na drugačije načine, ali ne uspevaju da prepoznaju značaj relacije između podataka zbog čega se tehnologija relacionih baza podataka tako zove.
Relacija vam omogućavaju da opišete veze između različitih tabela baza podataka na izuzetno moćan način. Te relacije mogu da se iskoriste za obavljanje naprednih međutabelarnih upita, koji su poznati kao JOINS, odnosno skup rezultata koji je dobijen povezivanjem informacija iz dve tabela.
Tipovi relacija u okviru baze podataka
Postoje tri različita tipa relacija u okviru baze podataka. Svaka relacija je dobila naziv prema broju redova u tabeli koji bi mogli da uđu u relaciju i svaki od ova tri tipa relacija pojavljuje se između dve tabele.
Relacije „jedan prema jedan“ se javljaju kad se svaki unos u prvoj tabeli uklapa sa jednim i samo jednim zapisom u drugoj tabeli. Relacije „jedan prema jedan“ se retko kad koriste jer je često mnogo jednostavnije staviti sve informacije u jednu tabelu. Neki kreatori baza podataka koriste prednosti ove relacije pri stvaranju tabela koje sadrže podskup podataka iz druge tabele.
Relacije „jedan prema više“ su najčešći tip relacija koji se koristi u bazama podataka. Javlja se onda kad se jedan zapis iz Tabele A uklapa sa jednim ili više zapisa iz Tabele B, ali se, pri tom, svaki zapis iz Tabele B uklapa samo sa jednim zapisom iz Tabele A. Na primer, relacija između tabele Teachers (Nastavnici) i tabele Students (Učenici) u bazi podataka osnovne škole predstavljao bi tip „jedan prema više“ jer svaki učenik ima samo jednog nastavnika, ali svaki nastavnik ima veliki broj učenika. Takav tip relacije „jedan prema više“ onemogućava pojavu dupliranja podataka.
Relacije „više prema više“ javljaju se kad se svaki zapis u Tabeli A poklapa sa jednim ili više zapisa u Tabeli B, a svaki zapis u Tabeli B poklapa se sa jednim ili više zapisa u Tabeli A. Na primer, relacije između tabele Teachers (Nastavnici) i tabele Courses (Predmeti) u osnovnoj školi verovatno će biti tipa „više prema više“ jer svaki nastavnik može da podučava više od jednog predmeta, a više od jednog nastavnika može da podučava jedan predmet.
Rekurzivne relacije: Poseban slučaj
Rekurzivne relacije se pojavljuju kad imamo samo jednu tabelu. Da bi se objasnio taj tip relacije obično se koristi primer tabele Employees (Zaposleni) koja sadrži informacije o šefu svakog radnika. Svaki šef je takođe radnik i ima svog šefa. U tom slučaju govorimo o rekurzivnoj relaciji „jedan prema više“ jer svaki radnik ima jednog šefa, a svaki šef može da ima više od jednog radnika.
Uspostavljanje relacija pomoću stranog ključa
Relacije između tabela uspostavljate pomoću definisanja stranog ključa. Taj ključ pokazuje relacionoj bazi podataka kakav odnos treba uspostaviti između tabela. U mnogim slučajevima, Tabela A sadrži primarne ključeve koji se referenciraju na Tabelu B.
Hajde ponovo da razmotrimo primer tabela Teachers (Nastavnici) i Students (Učenici). Tabela Teachers sadrži samo identifikacioni broj, ime i kolonu u kojoj se nalazi naziv predmeta (Course):
Tabela Students obuhvata identifikacioni broj, ime i kolonu u kojoj se nalazi strani ključ (Teacher_FK).
Kolona Teacher_FK u tabeli Students referencira vrednost primarnog ključa nastavnika u tabeli Teachers.
Veoma često kreatori baza podataka koriste “PK“ (primary key – primarni ključ) ili “FK” (foreign key – strani ključ) u nazivu tabele da bi lako prepoznali kolonu primarnog ili stranog ključa.
Obratite pažnju da ove dve tabele ilustruju relaciju „jedan prema više“ između nastavnika i učenika.
Relacije i referencijalni integritet
Kad ste tabeli dodali strani ključ, možete da kreirate ograničenje baze podataka koje uspostavlja referencijalni integritet između dve tabele, a to, s druge strane, održava relaciju između d