Upload
others
View
7
Download
1
Embed Size (px)
Citation preview
6/2/2014
1
http://www.empirica.ba/
eMPIRICA VISOKA ŠKOLA RAČUNARSTVA I POSLOVNIH KOMUNIKACIJA
Brčko, Brčko Distrikt BiH
Studijski program: Inţenjerska informatika/Poslovna
informatika Ak.god. 2013./2014.
OSNOVE BAZA
PODATAKA/UPRAVLJANJE BAZAMA
PODATAKA Strukturirani jezik za upite - SQL
Nastavno osoblje
• Predavač mr.sci. Asmir Butković
• Asistent Selma Krajinović, magistar
elektrotehnike
Dinko Demirović, dipl.ing.el.
Samira Mujkić, dipl.ing.el.
ECTS: 6/7
Predavanja: 45/40
Auditorne vježbe: 15
Laboratorijske vježbe: 15
Studijski program: INI/POI
6/2/2014
2
Sadržaj
Strukturirani jezik za upite - SQL
DML (Data Manipulation Language)
o SELECT naredba
o WHERE klauzula
o Klauzula DISTINCT
o Klauzula TOP
o Sortiranje zapisa
o NULL vrijednosti
o Agregatne funkcije
o Klauzule GROUP BY i HAVING
SQL (Stuctiured Query Language) je standardni relacioni upitni jezik (ANSI
- American National Standards Institute - standard).
Ovaj jezik se koristi za pristup i manipulaciju sistemima za upravljanje
bazom podataka (DBMS - DataBase Management System), što najčešće
podrazumjeva čitanje i izmjenu podataka u različitim bazama podataka.
Strukturirani jezik za upite - SQL
Komunikacija sa RDBMS
korištenjem SQL
SELECT NAZIV FROM PREDMET
SQL
Server
6/2/2014
3
Strukturirani jezik za upite - SQL
1. Jednostavnost i jednobraznost pri korišćenju
Tabela (relacija) se kreira jednom izvršnom naredbom. Odmah po
kreiranju tabela je raspoloživa za korišćenje. Svi podaci memorisani su
u tabelama i rezultat bilo koje operacije se logički prikazuje u obliku
tabele
2. Mogućnost interaktivnog i klasičnog (aplikativnog) programiranja
Koristeći SQL dobijaju se odgovori na trenutne, unaprijed nepredviđene
zahtjeve ili se SQL blokovi "ugrađuju" u klasični viši programski jezik
(Java, C#, C++, VB) omogućujući klasičnu obradu gde korisnik same
aplikacije najčešće uopšte nije ni svjestan da koristi SQL.
3. Neproceduralnost (tj. proceduralnost u minimalnom stepenu)
SQL je u velikoj meri neproceduralan jer definiše ŠTA, a ne KAKO: koji
podaci se žele, koje tabele se referenciraju i koji uslovi treba da budu
ispunjeni, bez precizne specifikacije procedure za dobijanje željenih
podataka.
Osnovne karakteristike SQL-a:
Strukturirani jezik za upite - SQL
• SQL omogućava pristup bazi podataka
• SQL je jedan od ANSI standardnih računarskih jezika
• SQL može da izvršava upite nad bazom podataka
• SQL može da prikazuje podatke iz baze podataka
• SQL može da unosi nove podatke u bazu podataka
• SQL može da obriše postojeće zapise iz baze podataka
• SQL može da izmjeni podatke u bazi podataka
Osnovne karakteristike SQL-a:
6/2/2014
4
Strukturirani jezik za upite - SQL
Interaktivni: korisnik zadaje jednu po jednu SQL naredbu, preko tastature
a rezultati se prikazuju na monitoru, pristup BP je ograničen jedino pravima
korisnika
Programski: korisnik pokreće program u kome su ugrađene SQL naredbe,
pristup BP je ograničen pored prava korisnika i sadržajem programa koji se
pokreće.
SQL podrţava dva reţima rada sa BP:
Strukturirani jezik za upite - SQL
u početku osmišljen kao upitni jezik tj., kao jezik koji omogućuje pisanje
samostalnih naredbi koje traže neki sadržaj iz baze podataka.
Kasnije je SQL postao jezik kojim je moguće ne samo pretraživati
podatke u bazi, nego i kreiratiti i mijenjati podatke i metapodatke
(strukturu i ograničenja).
nije jezik namijenjen klasičnom programiranju, iako je u proceduralnom
SQL-u moguće pisati procedure, pa i funkcije.
Piše se u obliku komandi (statement), pri čemu se svaka komanda
izvodi kao cjelina odnosno kao program.
kažemo da je deklarativan jezik – potrebno je specificirati (deklarisati)
što želimo, ali ne i detaljno navesti proceduru postizanja rezultata.
SQL je jezik:
6/2/2014
5
Strukturirani jezik za upite - SQL
o Klauzule – to su ključne riječi preuzete iz engleskog jezika koje imaju
tačno određeno značenje u komandi.
o Izrazi – su kombinacija identifikatora, operatora i konstanti koji daju
jednu vrijednost određenog tipa.
o Operatori – su oznake koje predstavljaju operaciju nad operandima u
nekom izrazu.
o Identifikatori – su oznake atributa, tabela, varijabli i ostalih objekata.
o Konstante – su konstantne vrijednosti bilo kojeg tipa (tekst, broj,...).
SQL komande se sastoje od više elemenata:
Strukturirani jezik za upite - SQL
o SELECT – prikaz podataka iz baze
o UPDATE – izmene podataka u bazi
o DELETE – brisanje podataka iz baze
o INSERT INTO – ubacivanje novih podataka u bazu
Upiti i komande za aţuriranje u okviru DML-a su:
6/2/2014
6
Strukturirani jezik za upite - SQL
o CREATE DATABASE – kreiranje nove baze
o ALTER DATABASE – izmena baze
o CREATE TABLE – kreiranje tabele
o ALTER TABLE – izmena tabele
o DROP TABLE – brisanje tabele
o CREATE INDEX – kreiranje indeksa (ključ za pretragu)
o DROP INDEX – brisanje indeksa
Najvaţniji iskazi u DDL-u su:
Strukturirani jezik za upite - SQL
1970. – teorijske osnove dao E. F. Codd u svom radu “A Relational
Model of Data for Large Shared Data Banks” : “… da koncept relacionog
modela dopušta razvoj univerzalnog jezika za manipulisanje podacima
baziranog na primjeni relacione algebre. “
1974. - tvorac Chamberlin, IBM istraživačka laboratorija. U početku se
zvao SEQUEL (Structured English QUEry Language) i predstavljao
programski interfejs (API) za RSUBP Sistem R.
1986. – kraj prve etape usavršavanja SQL-a. Usvojen prvi standard
SQL-a pod nazivom SQL-86.
1989. – revizijom prethodnog standarda, standardizacijom karakteristika
koje se odnose na integritet baze podataka i povezivanje sa klasičnim
programskim jezicima, nastao standard SQL-89.
1992. – nova revizija standarda, šest puta veća od prve verzije, poznata
pod nazivom SQL-92 ili SQL2.
1999. – standard SQL:1999 ili SQL3. Uključeni koncepti objektne
tehnologije, mehanizam trigera, rekurzija i proceduralana proširenja.
Istorijat SQL-a:
6/2/2014
7
2003. – standard SQL:2003. Uvodi neke XML osobine, window funkcije,
sandardizovane sekvence i kolone sa automatski generisanim
vrednostima.
2006. - standard SQL:2006. Nastavak povezivanja XML-a (eXtensible
Markup Language) i SQL-a: definiše se pravac importovanja, čuvanja i
manipulasanja XML podacima u SQL bazi, kao i predstavljanje
konvecionalnih SQL podataka u XML formi.
2008. - standard SQL:2008. Proširuje delovanje ORDER BY klauzule.
Uvodi naredbu TRUNCATE i INSTEAD OF trigere (okidače).
2011. – standard SQL:2011 iz decembra 2011. Novi tipovi window
argregatnih funkcija, mogućnost korišćenja izlaza INSERT, UPDATE,
DELETE ili MERGE naredbe kao izvedenih tabela u novom SQL upitu,
...
Istorijat SQL-a:
Strukturirani jezik za upite - SQL
Sintaksa je skup pravila po kojima se elementi jezika pravilno
kombinuju.
SQL je case insenstive što znači da upiti nisu osjetljivi na mALa I vELikA
sLovA i to se odnosi na kompletan SQL kod koji napišemo osim na
nizove znakova koje označavamo s jednostrukim navodnicima - 'niz
znakova'.
Nizovi znakova jesu osjetljivi na mala i velika slova i tu treba paziti.
Jednostruki navodnici se koriste za stringove.
Sintaksa SQL-a:
Strukturirani jezik za upite - SQL
6/2/2014
8
Komentari su objašnjenja čitaocu SQL upita i nemaju nikakvog uticaja na
njegovo izvršavanje. SQL Server podržava dva tipa komentara:
o -- (double hyphens) - sve što se nalazi desno od ova dva karaktera
smatra se komentarom. Ovakav komenar se može nalaziti na kraju
programskog reda ili sam činiti programski red.
o /* ... */ (forward slash-asterisk character pairs) - komentar ima lijevu i
desnu granicu, pa se može nalaziti bilo gdje u redu (na početaku, u
sredini ili na kraju). Tekst komentara ne smije sadržati parove karaktera
/* i */.
Komentari u SQL-u:
Strukturirani jezik za upite - SQL
DML
Pregled podataka se u SQL jeziku vrši pomoću naredbe SELECT.
Osnovna SELECT naredba:
SELECT identifikuje koje kolone.
FROM identifikuje iz koje tabele.
Oznaka * u kodu označava da želimo prihvatiti sve kolone iz tražene tabele.
Primjer: Da bi smo izvršili pregled svih podataka iz tabele PREDMET
iskoristićemo najosnovniji oblik naredbe SELECT:
SELECT naredba:
SELECT * FROM imetabele;
SELECT * FROM PREDMET
6/2/2014
9
Rezultat upita:
DML
DML
Identična naredba (tj. naredba sa identičnim rezultatom) u ovom slučaju bi
bila:
Ukoliko želimo da iz prikaza izbacimo kolone PRED, AV,LV, ETCS,
potrebno je samo da ih izostavimo iz liste kolona: u ovom slučaju bi bila:
SELECT naredba:
SELECT ID, NAZIV, PRED, AV,LV, ETCS, SEMESTAR, PROF_ID FROM PREDMET
SELECT ID, NAZIV, SEMESTAR, PROF_ID FROM PREDMET
6/2/2014
10
DML
Ova klauzula se koristi za zadavanje određenog uslova koji zapis mora da
ispuni da bi ušao u rezultat:
Primjer:
WHERE klauzula:
SELECT * FROM tabela WHERE neki_uslov
SELECT * FROM PREDMET WHERE PRED=50
DML
Operatori u Where klauzuli, pored standardnih operatora poređenja
(=,>,<,<>,>=,<=) mogu biti i logički:
AND, OR i NOT.
Također se primjenjuju i operatori BETWEEN (za definiranje raspona ili
intervala vrijednosti), IN (zamjenjuje višestruku primjenu operatora OR) i
LIKE (omogućava pretraživanje na osnovu uzorka).
Operatori u Where klauzuli:
SELECT * FROM PREDMET WHERE AV > 30
6/2/2014
11
DML
>,<,<>,>=,<=:
SELECT * FROM PREDMET WHERE PRED=50
SELECT * FROM PREDMET WHERE PRED>30 AND PRED<=40
DML
Operatori poređenja =,>,<,<>,>=,<=
Demo
6/2/2014
12
DML
U Transact SQL-u, BETWEEN-AND predstavlja zatvoreni interval, tj.
uključuje rubne vrijednosti.
BETWEEN:
SELECT * FROM PREDMET WHERE PRED BETWEEN 20 AND 35
DML
IN se koristi da prikaže zapise koje pripadaju skupu vrijednosti (ovo je
zamjena za više OR klauzula)
IN:
SELECT * FROM PREDMET WHERE PRED IN (20,35,45)
6/2/2014
13
DML
Klauzula LIKE omogućuje pretraživanje na osnovu "UZORKA" odnosno
dobijanje informacija i kada ne znamo potpun naziv (tj. vrijednost)
odredjenog atributa tipa character. Ona koristi dva specijalna karaktera
("%","_") sa sljedećim značenjem:
o "%" predstavlja string od 0 ili više karaktera
o "_" predstavlja poziciju jednog karaktera.
Klauzula LIKE:
SELECT * FROM STUDENT WHERE IME='ADMIr'
DML
"%":
SELECT * FROM STUDENT WHERE IME LIKE'AD%'
SELECT * FROM STUDENT WHERE IME LIKE'%A'
6/2/2014
14
DML
"_":
SELECT * FROM STUDENT WHERE PREZIME LIKE'Gr_ić'
SELECT * FROM STUDENT WHERE IME LIKE'Al__' SELECT * FROM STUDENT WHERE IME LIKE'Al___'
DML
"%„ i "_":
SELECT * FROM STUDENT WHERE IME LIKE'%R'
SELECT * FROM STUDENT WHERE PREZIME LIKE'%OVIĆ'
SELECT * FROM STUDENT WHERE IME LIKE'%R' AND PREZIME LIKE'%OVIĆ'
SELECT * FROM STUDENT WHERE PREZIME LIKE'__kić' SELECT * FROM STUDENT WHERE PREZIME LIKE'___kić'
6/2/2014
15
DML
Rezultat:
SELECT * FROM Settlement SELECT * FROM Settlement
WHERE Name LIKE 'A%'
DML
Klauzula LIKE
Demo
6/2/2014
16
DML
Ova klauzula se koristi za eliminisanje duplih zapisa iz prikaza:
Klauzula DISTINCT:
SELECT IME FROM STUDENT
SELECT DISTINCT IME FROM STUDENT
DML
Ova klauzula se koristi za ograničavanje broja zapisa koji ulaze u rezultat
bez obzira da li su ispunili eventualni uslov.
Klauzula TOP:
SELECT TOP 4 * FROM STUDENT
6/2/2014
17
DML
Jedna od osnovnih potreba prilikom prihvatanja podataka je sortiranje istih.
Na samom kraju svakog upita možemo dodati ORDER BY operator te
navesti redoslijed atributa po kojima se sortira. Postoje dvije metode
sortiranja: uzlazno - ASC (od ASCending: A-Z, 0-besk.) i silazno - DESC
(od DESCending: Z-A, besk.-0).
Sortiranje zapisa:
SELECT * FROM Municipality
SELECT * FROM Municipality ORDER BY Name
SELECT * FROM Municipality ORDER BY Name DESC
SELECT * FROM Municipality ORDER BY fk_Canton ASC, Name ASC
SELECT * FROM Municipality ORDER BY fk_Canton, Name DESC
DML
Rezultat: SELECT * FROM Municipality
SELECT * FROM Municipality ORDER BY Name
SELECT * FROM Municipality ORDER BY fk_Canton, Name DESC
6/2/2014
18
DML
NULL u bazama služi za vrijednosti u kojima nema podatka.
Operator IS NULL se koristi za ispitivanje da li je vrijednost nekog atributa
postavljena na NULL vrijednost.
NULL vrijednosti:
SELECT * FROM PREDMET WHERE AV=NULL
SELECT * FROM PREDMET WHERE AV IS NULL
DML
Operator IS NULL:
SELECT * FROM PREDMET WHERE AV IS NULL OR PRED IS NULL
6/2/2014
19
DML
DISTINCT, ORDER BY, IS NULL
Demo
DML
Agregatne funkcije preslikavaju skup vrijednosti jedne kolone (obično
izvedene tabele) u skalarnu vrijednost.
Pod izvedenom tabelom ovde se podrazumjeva rezultat primjene logičkog
izraza iz WHERE linije na tabele iz FROM linije.
Mada je SQL i bez agregatnih funkcija dovoljan za pretraživanje svakog
pojedinačnog podatka iz baze podataka (relaciono je kompletan), bez
mehanizma agregatnih funkcija on ne omogućuje izražavanje praktičnih i
često potrebnih upita tipa "Koliko ima ? "
SQL podržava agregatne funkcije COUNT, SUM, AVG, MAX i MIN, sa
sljedećim značenjem:
o COUNT – broj vrijednosti u koloni
o SUM – zbir vrijednosti u koloni
o AVG – srednja vrijednost u koloni
o MAX – najveća vrijednost u koloni
o MIN – najmanja vrijednost u koloni.
Agregatne funkcije:
6/2/2014
20
DML
Funkcija COUNT definisana je nad kolonama bilo kog tipa. Ona ima dva
oblika:
o COUNT (*) - nalazi broj n-torki u grupi
o COUNT (atribut) - nalazi NOT-NULL vrijednosti kolone
Funkcija COUNT:
SELECT Count(Name) FROM Municipality WHERE fk_Canton=1
UID Name fk_Canton
1 Banovići 3
2 Banja Luka 11
3 Bihać 1
4 Bijeljina 2
5 Bileća 16
6 Kozarska Dubica
11
... ...
Count(Name)
8
DML
Funkcija COUNT:
SELECT * FROM PREDMET
6/2/2014
21
DML
Funkcija COUNT:
SELECT Count(*) FROM PREDMET
SELECT Count(PRED) FROM PREDMET
SELECT Count(DISTINCT PRED) FROM PREDMET
Prebrojavaju vrste (a ne vrijednosti kolone)
Primjenjuju samo na ne-NULL vrijednosti
Eliminiše duplikate u koloni–argumentu
DML
SUM (atribut) - izračunava ukupnu vrijednost
Funkcija SUM:
SELECT Sum(LV) FROM PREDMET
SELECT Sum(DISTINCT LV) FROM PREDMET
SELECT Sum(LV) FROM PREDMET WHERE SEMESTAR=1
6/2/2014
22
DML
AVG (atribut) - izračunava srednju vrijednost
Funkcija AVG:
SELECT AVG(PRED),AVG(AV),AVG(LV),AVG(ETCS) FROM PREDMET
SELECT AVG(PRED),AVG(AV),AVG(LV),AVG(ETCS) FROM PREDMET WHERE SEMESTAR=2
DML
MAX (atribut) - nalazi maksimalnu vrijednost
Funkcija MAX :
SELECT MAX(PRED) FROM PREDMET WHERE SEMESTAR=1
SELECT MAX(PRED) FROM PREDMET WHERE SEMESTAR=3
6/2/2014
23
DML
MIN (atribut) - nalazi minimalnu vrijednost
Funkcija MIN:
SELECT MIN(PRED) FROM PREDMET WHERE SEMESTAR=1
SELECT MIN(PRED) FROM PREDMET WHERE SEMESTAR=3
DML
COUNT, SUM, AVG, MAX, MIN
Demo
6/2/2014
24
DML
Klauzula GROUP BY se koristi za grupisanje podataka koji se dobijaju kao
rezultat upita, a klauzula HAVING se koristi za selekciju određenih grupa
koje su već kreirane GROUP BY klauzulom.
Operator grupisanja:
SELECT * FROM Municipality
DML
Klauzula GROUP BY ima zadatak da omogući grupisanje vrsta u
rezultujućoj tabeli na osnovu zajedničkih vrijednosti. Time se povećava
vrijednost funkcija agregacije jer se u kombinaciji sa GROUP BY klauzulom
mogu primjenjivati na grupe vrsta, a ne samo na čitavu rezultujuću tabelu.
Operator grupisanja:
SELECT * FROM Municipality
6/2/2014
25
DML
Potrebno je voditi računa, da ukoliko ne postoji GROUP BY klauzula, u
SELECT klauzuli nije moguće kombinovati funkcije agregacije sa imenima
kolona. U nastavku je dat SQL upit koji NE MOŢE DA SE IZVRŠI i koji će
dovesti do POJAVE GREŠKE.
Ovaj upit je moguć samo uz upotrebu GROUP BY klauzule.
U nastavku je dat pravilan SQL upit.
SELECT Count(Name),fk_Canton FROM Municipality
DML
SELECT fk_Canton, Count(Name) FROM Municipality GROUP BY fk_Canton
6/2/2014
26
DML
Grupisanje:
Name fk_Canton
Bihać 1
Cazin 1
Velika Kladuša 1
Buţim 1
Bosanska Krupa 1
Bosanski Petrovac 1
Ključ 1
Sanski Most 1
Odţak 2
Orašje 2
Domaljevac-Šamac 2
Ţivinice 3
Čelić 3
... ...
fk_Canton Count(Name)
1 8
2 3
3 13
... ...
8
3
13
SELECT Count(Name),fk_Canton FROM Municipality GROUP BY fk_Canton
DML
Klauzulu GROUP BY je moguće primjeniti istovremeno na veći broj kolona.
Pri tome su kriterijumi za formiranje grupa zajedničke vrijednosti u
specificiranim kolonama. Prilikom formiranja grupa vodi se računa i o
redoslijedu po kome su kolone za grupisanje navedene (kao da se
formiraju grupe sa podgrupama u okviru njih).
SELECT SEMESTAR, ETCS, Count(NAZIV) FROM PREDMET GROUP BY SEMESTAR, ETCS ORDER BY 1,2
6/2/2014
27
DML
Prilikom korištenja klauzule GROUP BY, sve kolone koje su navedene u
klauzuli SELECT, a na koje nije primjenjena neka funkcija agregacije,
MORAJU BITI NAVEDENE U GROUP BY KLAUZULI. U suprotnom SQL
upit neće moći da se izvrši.
Klauzula HAVING omogućava filtriranje rezultata dobijenih korišćenjem
GROUP BY klauzule.
HAVING je sličan WHERE klauzuli!
Klauzula HAVING:
DML
Koristeći tabelu Municipality kreirati upit koji kao rezultat daje broj
opština po kantonima, ali samo za kantone od 1 do 10 i one kantone koji
imaju manje ili jednako 5 opština u svom sastavu. (ISPITNI ZADATAK)
Zadatak:
6/2/2014
28
DML
SELECT fk_Canton, Count(Name) FROM Municipality WHERE fk_Canton BETWEEN 1 AND 10 GROUP BY fk_Canton HAVING Count(Name)<=5
Rješenje:
DML
Klauzule GROUP BY i HAVING je moguće kombinovati sa WHERE
klauzulom. Pri tome treba voditi računa o redosljedu izvršavanja!
Redosljed je sljedeći:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
6/2/2014
29
Pitanja