Programiranje

Uvod u SQL komande za baze podataka

SQL komande za baze podataka

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 ; SELECTINSERTUPDATE, 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 i DELETE.

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 SSNumberFirstname, 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 SSNumberCourseIdNumericGrade, 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:

SSNumberLastNameFirstNameCourseIdNumericGradeYearTaken
111111111SmithJohnCSC101982021
111111111SmithJohnENG101952022
222222222JonesMaryCSC1011002022
222222222JonesMaryEEE101752022
333333333HansenRobertPOL101922021
333333333HansenRobertSOC103842022

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.

[mks_pullquote align=”center” width=”630″ size=”16″ bg_color=”#D3EFD2″ txt_color=”#000000″]Napomena:
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. [/mks_pullquote]

[mks_pullquote align=”center” width=”630″ size=”16″ bg_color=”#D3EFD2″ txt_color=”#000000″]Napomena:
Osim ako nije navedeno drugačije, sve komande za bazu podataka prikazane u ovom vodiču funkcionišu dobro na MySQL i PostgreSQL[/mks_pullquote]

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.

[mks_pullquote align=”center” width=”630″ size=”16″ bg_color=”#D3EFD2″ txt_color=”#000000″]

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.

[/mks_pullquote]

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);

[mks_pullquote align=”center” width=”630″ size=”16″ bg_color=”#D3EFD2″ txt_color=”#000000″]
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');

[/mks_pullquote]

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   |
+-----------+----------+-----------+----------+

[mks_pullquote align=”center” width=”630″ size=”16″ bg_color=”#D3EFD2″ txt_color=”#000000″]Napomena:
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. [/mks_pullquote]

 

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 |
+----------+-----------+----------+--------------+

[mks_pullquote align=”center” width=”630″ size=”16″ bg_color=”#D3EFD2″ txt_color=”#000000″] Napomena:
Klauzula AND u gornjoj komandi vam omogućava da filtrirate rezultate testom uslovne ocene.[/mks_pullquote]

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