U dnašnjem svetu sve veće digitalizacije, velikih podataka i računarstva u oblaku, upravljanje podacima je jedno od najvažnijih veština koje softverski inženjer može da poseduje.
S tim u vezi, jedan od najmoćnijih alata za baze podataka je SQL. Ovde ćemo prikazati osnovne SQL komande za baze podataka sa objašnjenjima u primeru baze za učenike, odnosno studente.
SQL (Structured Query Language) je standardni programski jezik koji se koristi za manipulisanje objektima strukture podataka.
Oni rade nad podacima koji se nalaze u sistemu za upravljanje relacionih baza podataka (RDBMS).
Neki od dobro poznatih RDBMS su MySQL i PostgreSQL
U ovom vodiču, naučićete o podskupovima SQL jezika i kako koristiti neke osnovne SQL naredbe, poput ; SELECT
, INSERT
, UPDATE
, i DELETE
.
Podskupovi SQL
Lista ispod uključuje različite podskupove jezika za razne SQL naredbe. Svaki podskup ima svoju funkciju i svrha.
- Data Definition Language (DDL): Ovo vam omogućava da kreirate, brišete i ažurirate definicije šema baze podataka (pre svega tabele i indeksi), bez stvarne manipulacije podacima unutar tabela baze podataka.
- Data Query Language (DQL): DQL se koristi za preuzimanje podataka iz baze podataka korišćenjem
SELECT
naredbe. - Data Manipulation Language (DML): Ovaj podjezik omogućava manipulisanje podacima u bazi podataka korišćenjem naredbi
INSERT
,UPDATE
iDELETE
.
U ovom vodiču ćemo demonstrirati primer baze podataka za školu sa bismo objasnili još bliže SQL naredbe za svaki podskup prethodno navedene. Školska baza podataka ima nekoliko tabela, za SSNumber
, Firstname
, i Lastname
i tako dalje. Definicija tabele Student
sadrži kolone kao jednostavan opis SSNumber
, Firstname
i Lastname
, a definicija tabele CourseTaken
sadrži kolone za SSNumber
, CourseId
, NumericGrade
, i YearTaken
. Primer pretpostavlja da u školi postoje tri učenika, a svaki od njih je završio dva kursa. Primer podataka prikazan je u tabeli ispod:
SSNumber | LastName | FirstName | CourseId | NumericGrade | YearTaken |
---|---|---|---|---|---|
111111111 | Smith | John | CSC101 | 98 | 2021 |
111111111 | Smith | John | ENG101 | 95 | 2022 |
222222222 | Jones | Mary | CSC101 | 100 | 2022 |
222222222 | Jones | Mary | EEE101 | 75 | 2022 |
333333333 | Hansen | Robert | POL101 | 92 | 2021 |
333333333 | Hansen | Robert | SOC103 | 84 | 2022 |
Upotreba SQL naredbi Create, Alter, i Drop Tables
U komandnoj liniji kooristite naredbu CREATE TABLE
zajedno sa imenom tabele i podacima tabele. Naredba ispod pravi tabelu Student
.
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
Zagrade obuhvataju podatke tabele, počevši sa kolonom koja označava podatke svake redove. Sledeća kolona navodi tip podataka koji taj red sadrži. CHAR
označava tip podataka niza sa fiksnom dužinom, a VARCHAR
označava tip podataka niza sa promenljivom dužinom. U poslednjoj koloni, atribut NOT NULL
osigurava da se zapis ne može dodati u tabelu ako bilo koja od kolona sa NOT NULL
nema podataka povezanih sa njima.
Komanda
CREATE TABLE
delimitirana je sa kvačicom na kraju (;), iako je moguće da neki komercijalni sistemi za upravljanje relacionim bazama podataka ne zahtevaju tu delimiter. Osim ako nije navedeno drugačije, sve komande za bazu podataka prikazane u ovom vodiču funkcionišu dobro na MySQL i PostgreSQL
Da bi kreirali tabelu CourseTaken
, izvršite sledeću komandu:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
Kolona YearTaken
namerno nije uključen u tabelu CourseTaken
kako bi se demonstrirala upotreba naredbe ALTER TABLE
.
Ukoliko želite da dodate kolonu YearTaken
u tabelu CourseTaken
, ne morate da brišete celu tabelu.
Umesto toga, možete koristiti komandu ALTER TABLE
iz Data Definition Language (DDL).
Sledeća komanda menja tabelu CourseTaken
tako što dodaje nedostajuću kolonu.
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
Naredba iznad se odnosi na sličnu sintaksu kao prethodna.
Zahteva ime tabele kao i tri argumenta: ime reda, tip podatka reda i atribut NOT NULL
. Ukoliko želite da obrišete tabelu CourseTaken
, izvršite komandu DDL DROP TABLE nakon imena tabele.
DROP TABLE CourseTaken;
Važno
Komanda DROP tabele briše sve podatke u tabeli.
Kako dodati podatke u SQL tabelu
Izvršavanjem komande INSERT INTO
unosite podatke u tabelu.
A, da bi se pozvala ova komanda, potrebno je navesti ime tabele i spisak imena redova (u zagradama) u koje želite da unesete podatke.
Zatim sledi ključna reč VALUES
i stvarne vrednoste (u zagradama) koje želite da unesete.
Vrednosti se unose u redove u skladu sa redosledom pozivanja.
Napomena:
- SQL naredbe se mogu razdvojiti na više linija. Kraj SQL naredbe označen je tačkom-zarezom (;).
- Karakteristični podaci su odvojeni otvorenom i zatvorenom apostrofom (‘), dok numerički podaci nisu.
Sledeća naredba INSERT
unosi tri reda u tabelu Student
. Ove komande koriste više naredbi INSERT
.
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('111111111', 'Smith', 'John');
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('222222222', 'Jones', 'Mary');
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('333333333', 'Hansen', 'Robert');
Slično tome, takođe možete uneti više redova u tabelu u jednom SQL upitu kao što je prikazano ispod:
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
Napomena:
Slično možete koristiti komandu
INSERT INTO
u PostgreSQL-u da dodate redove u tabelu.Proverite se da vrednosti odgovaraju redosledu kolona u definiciji tabele.
INSERT INTO student VALUES ('111111111', 'Smith', 'John');
Brisanje podataka iz Tabele
Da biste izbrisali podatke iz tabele, koristite SQL naredbu DELETE FROM
.
Koristite klauzulu WHERE
da navedete uslov, a ako postoji više od jednog uslova, koristite klauzulu AND
zajedno sa WHERE
.
Na primer, sledeća komanda briše podatak iz tabele CourseTaken
sa SSNumber
-om 333333333
i CourseID
POL101
.
Važno
Ako preskočite klauzulu WHERE
, svi zapisi u tabeli će biti obrisani.
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
SQL naredba za ažuriranje podataka u tabeli – UPDATE DATA
Da bi se ažurirao postojeći zapis u tabeli, koristite SQL naredbu UPDATE
.
Klauzula SET
se koristi za postavljanje (ažuriranje) nove vrednosti za određenu kolonu, a klauzula WHERE
se koristi za ažuriranje odabranih redova.
Na primer, sledeća komanda upravlja kolonom NumericGrade
tabele CourseTaken
za zapise sa SSNumber
222222222
i CourseID
EEE101
.
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
SQL komanda za preuzimanje podataka iz tabele
Prava snaga relacionih baza podataka se ogleda u sposobnosti da se informacije iz više tabela preuzmu pomoću SQL naredbe SELECT
i sposobnosti spajanja tabela preko zajedničkih ključeva.
Iako se u ovom uvodnom vodiču ne bavimo kreiranjem ključeva i indeksa, korišćenjem tih ključeva, koristi se kolona SSNumber
svake tabele kao sredstvo (ključ) za povezivanje (ili spajanje) tabela kako bi se generisale informacije.
Na sledećem primeru možemo videti upotrebu SQL naredbe SELECT
iz komandne linije.
Primer 1: Da preuzmete listu svih učenika u školi.
SELECT * from Student;
Izlaz:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
Primer 2: Da biste preuzeli listu svih studenata i kurseva koje su pohađali.
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
Izlaz:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseID |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
U gornjem komandnom redosledu, dve tabele,
Student
i CourseTaken
, su spojene da bi se dobile potrebne informacije. Imena kolona u klauzulama SELECT
i WHERE
su prefiksirana sa njihovim imenima tabela radi jasnoće. Međutim, u slučaju kolone SSNumber
, moramo navesti odgovarajuće prefikse imena tabela, pošto obe tabele dele isto ime kolone. Klauzula FROM
označava tabele koje se koriste u ovom upitu.
Primer 3: Preuzmite spisak studenata sa CourseId
CSC101
i godinom kada su pohađali ovaj kurs.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
Izlaz:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
Primer 4: Preuzmi listu imena studenata, položenih predmeta i dobijenih ocena za one koji su imali ocene za kurs iznad 90
.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
Izlaz:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
Klauzula
AND
u gornjoj komandi vam omogućava da filtrirate rezultate testom uslovne ocene.Zaključak
Ovaj vodič o SQL komandama je uvodni uvod o tome kako kreirati šeme baze podataka i manipulisati podacima unutar tih baza podataka. Iako koncepti koji su ovde uvedeni samo zagrebu površinu u pogledu korišćenja sistema relacionih baza podataka, to je dobra polazna tačka za osnovne i suštinske komande i koncepte.
Napišite komentar