2. Elementi SQL komandi
Pravila za pisanje imena u SQL-u
Imena tabela, atributa i bilo kojih drugih objekata baze podataka moraju da budu u skladu sa sledećim pravilima:
- Maksimalna dužina imena je 30 znakova
- ime ne sme da sadrži znak pitanja (?),
- dozvoljeni znaci su A-Z, 0-9, _, $, #
- prvi znak mora biti slovo,
- kao imena se ne smeju koristiti rezervisane reči
- imena se ne smeju ponavljati
- nema razlike između velikih i malih slova (ovo poslednje važi uglavnom pod Windowsima, ali ne mora da znači da će važiti na nekim drugim sistemima , i ne uvek pod Linux serverima)
Radi lakšeg čitanja koda,
preporučuje se da ključne reči (naredbe) budu napisane velikim slovima, a
svi ostali elementi malim slovima.
U nekim bazama niz znakova (string) mora biti napisan kao što je u bazi.
Neke naredbe:
DDL ( Data Definition Language) - ovde spadaju naredbe za definisanje resursa relacione baze podataka. Pod resursima baze podataka se najčešće podrazumevaju: struktura baze podataka, tabele, atributi, tipovi podataka, ograničenja, itd.
Shvatite to u smislu da se sve što je potrebno - kreiranje baza, kreiranje tabela, izmene izgleda i pojedinih delova, brisanje nečega ... - kreira pomoću DDL naredbi.
Definicija neke baze podataka podrazumeva i mogućnost naknadne izmene ili uklanjanja te definicije.
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.