SQL - uvod i neke naredbe koje koristimo na početku
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.
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,000)
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).
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 > 000
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 + 00
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.