SQL
SQL
W3schools
1. select
2. notepad
3. excel
4. ručno dodati zaglavlje
5. format cells
6. bold zaglavlja tabele
7. save as CSV
8. Dbbrowser – New Database – import table from csv file ...
SQL
SQL je skraćenica od Structured Query Language
SQL je postao standard Američkog nacionalnog instituta za standarde (ANSI) 1986. godine, a
Međunarodne organizacije za standardizaciju (ISO) 1987. godine
Međutim, da bi bile u skladu sa ANSI standardom, sve one podržavaju barem glavne komande (poput
SELECT, UPDATE, DELETE, INSERT, WHERE) na sličan način.
Napomena: Većina SQL baza podataka takođe ima svoje vlastite dodatke pored SQL standarda!
Da biste napravili web sajt koji prikazuje podatke iz baze podataka, trebaće Vam:
RDBMS
Podaci u RDBMS-u se čuvaju u objektima baze podataka nazvanim tabele. Tabela je kolekcija povezanih
unosa podataka i sastoji se od kolona i redova.
primer
Svaka tabela je podeljena na manje entitete nazvane polja. Polja u tabeli "Customers" uključuju
CustomerID, CustomerName, ContactName, Address, City, PostalCode i Country. Polje je kolona u tabeli
koja je dizajnirana da održava određene informacije o svakom zapisu u tabeli.
Zapis, takođe nazvan red, je svaki pojedinačni unos koji postoji u tabeli. Na primer, u tabeli "Customers"
iznad postoje 91 zapis. Zapis je horizontalni entitet u tabeli.
Kolona je vertikalni entitet u tabeli koji sadrži sve informacije povezane sa određenim poljem u tabeli.
SQL SINTAKSA
SQL naredbe
Većina akcija koje treba izvršiti nad bazom podataka obavljaju se SQL naredbama.
Sledeća SQL naredba vraća sve zapise iz tabele pod nazivom "Customers":
U ovom tutorijalu koristićemo dobro poznatu Northwind uzorak bazu podataka (uključenu u MS Access i
MS SQL Server).
Gornja tabela sadrži pet zapisa (po jedan za svakog kupca) i sedam kolona (CustomerID, CustomerName,
ContactName, Address, City, PostalCode i Country).
SQL ključne reči NISU osetljive na velika i mala slova: select je isto što i SELECT.
U ovom tutorijalu ćemo pisati sve SQL ključne reči velikim slovima.
Neki sistemi baza podataka zahtevaju tačku-zarez na kraju svake SQL naredbe.
Tačka-zarez je standardni način za razdvajanje svake SQL naredbe u sistemima baza podataka koji
omogućavaju izvršavanje više od jedne SQL naredbe u istom pozivu serveru.
Primer:
Sintaksa:
FROM table_name;
Ovde, column1, column2, ... su imena polja tabele iz koje želite da selektujete podatke.
Ako želite da vratite sve kolone, a da ne navodite svako ime kolone, možete koristiti sintaksu SELECT *:
Primer
Korišćenjem ključne reči DISTINCT u funkciji COUNT, možemo vratiti broj različitih zemalja.
Primer:
FROM Customers;
21
Primer:
Country
Germany
Mexico
UK
Sweden
France
Spain
Canada
Argentina
Switzerland
Brazil
Austria
Italy
Portugal
USA
Venezuela
Ireland
Belgium
Norway
Denmark
Finland
Poland
Country
Germany
Mexico
Mexico
UK
Sweden
Germany
France
Spain
France
Canada
UK
Argentina
Mexico
Switzerland
Brazil
UK
Germany
France
UK
Austria
Brazil
Spain
France
Sweden
Germany
France
Italy
Portugal
Spain
Spain
Brazil
USA
Venezuela
Brazil
Venezuela
USA
Ireland
UK
Germany
France
France
Canada
USA
Germany
USA
Venezuela
Venezuela
USA
Italy
Belgium
Canada
Germany
UK
Argentina
USA
Germany
France
Mexico
Austria
Portugal
Brazil
Brazil
Germany
Argentina
USA
Italy
Brazil
Switzerland
Spain
Norway
USA
UK
Denmark
France
USA
Belgium
USA
USA
Germany
Mexico
Brazil
USA
Denmark
France
France
Germany
Finland
Brazil
USA
Finland
Poland
1. Ubacite nedostajuću naredbu kako biste dobili sve kolone iz tabele Customers.
______ * FROM Customers;
2. Napišite naredbu koja će izabrati kolonu City iz tabele Customers:
3. Izaberite sve različite vrednosti iz kolone Country u tabeli Customers:
Rešenja
1.
SELECT * FROM Customers;
2.
SELECT City FROM Customers;
3.
SELECT DISTINCT Country FROM Customers;
Primer:
WHERE Country='Mexico';
Sintaksa:
WHERE condition;
Rešenja
1.
SELECT * FROM Customers
WHERE City = 'Berlin';
2.
SELECT * FROM Customers
WHERE CustomerID = 32;
OPERATORI U WHERE KLAUZULI
Možete koristiti druge operatore osim = operatora da biste filtrirali pretragu.
Primer
Izaberite sve kupce čiji je CustomerID veći od 80:
SELECT * FROM Customers
WHERE CustomerID > 80;
Dobija se sledeći rezultat: (copy with headers)
U SQL-u možete koristiti funkciju CAST ili CONVERT za konverziju teksta u datum. Evo kako to možete uraditi
koristeći funkciju CAST za vaš primer:
Ova SQL upitaće bazu podataka da konvertuje tekst '2/9/1952' u datum, a rezultat će biti prikazan u formatu
datuma.
Ukoliko imate specifične zahteve za format datuma, možete koristiti funkciju CONVERT, koja pruža više opcija za
formatiranje datuma:
Ovde, 101 je kod za američki MM/DD/YYYY format. Možete koristiti odgovarajući kod formata u zavisnosti od
formata vašeg teksta.
možete konvertovati celu kolonu odjednom koristeći funkciju CAST ili CONVERT.
FROM tvoja_tabela;
Zamijeni "tvoja_kolona" sa imenom kolone koju želiš da konvertuješ, a "tvoja_tabela" sa imenom tabele u kojoj se
nalazi ta kolona.
FROM tvoja_tabela;
Ponovo, zamijeni "tvoja_kolona" sa imenom kolone koju želiš da konvertuješ, a "tvoja_tabela" sa imenom tabele u
kojoj se nalazi ta kolona.
SQL ORDER BY
Ključna reč ORDER BY koristi se za sortiranje rezultata u rastućem ili opadajućem redosledu.
ORDER BY Price;
Ovaj upit vrši selekciju svih kolona iz tabele "Proizvodi" i sortira rezultate po koloni "Cena".
Sintaksa:
FROM ime_tabele
DESC
Ključna reč ORDER BY podrazumevano sortira zapise u rastućem redosledu. Da biste sortirali zapise u
opadajućem redosledu, koristite ključnu reč DESC.
Primer
RASPORED ABECEDNO
Za string vrednosti, ključna reč ORDER BY će ih sortirati abecedno:
Primer
ORDER BY ProductName;
Alphabetically DESC
Primer
Sledeći SQL upit selektuje sve kupce iz tabele "Customers", sortirane po koloni "Country" i koloni
"CustomerName". Ovo znači da se sortira po zemlji, ali ako neki redovi imaju istu zemlju, sortira ih po
imenu kupca:
Primer
Sledeći SQL upit selektuje sve kupce iz tabele "Customers", sortirane rastuće po koloni "Country" i
opadajuće po koloni "CustomerName":
Primer
SELECT * FROM Customers
2. Izaberite sve zapise iz tabele Customers i sortirajte rezultat obrnuto abecedno po koloni City
3. Izaberite sve zapise iz tabele Customers i sortirajte rezultat abecedno, prvo po koloni Country, a zatim
po koloni City
Rešenja
1.
ORDER BY City;
2.
3.
Sintaksa
SELECT kolona1, kolona2, ...
FROM ime_tabele
WHERE uslov1 AND uslov2 AND uslov3 ...;
AND vs OR
Operator AND prikazuje zapis ako su sve uslove tačne.
Operator OR prikazuje zapis ako je bilo koji od uslova tačan.
SVI USLOVI MORAJU BITI TAČNI
Sledeći SQL upit bira sva polja iz tabele Customers gde je Country "Germany" AND City "Berlin" AND
PostalCode veći od 12000:
WHERE Country = 'Germany' AND City = 'Berlin' AND PostalCode > 12000;
KOMBINOVANJE AND I OR
Možete kombinovati AND i OR operatore.
Sledeći SQL upit bira sve kupce iz Španije čije ime počinje sa "G" ili "R".
Primer
Izaberite sve španske kupce čije ime počinje sa "G" ili "R":
WHERE Country = 'Spain' AND (CustomerName LIKE 'G%' OR CustomerName LIKE 'R%');
Bez zagrada, SELECT naredba će vratiti sve kupce iz Španije čije ime počinje sa "G", plus sve kupce čije
ime počinje sa "R", bez obzira na vrednost države:
Primer
iz Španije i čije ime počinje sa "G", ili čije ime počinje slovom "R":
Vežba:
Izaberite sve zapise gde kolona City ima vrednost 'Berlin' i kolona PostalCode ima vrednost 12209:
Rešenje
COUNT()
COUNT() je SQL funkcija koja se koristi za brojanje redova u rezultatu upita. Ova funkcija se često koristi
za dobijanje ukupnog broja redova koji ispunjavaju određene uslove u tabeli.
COUNT(column_name): Ova funkcija broji broj redova u koloni koja je navedena unutar zagrade. Možete
koristiti * umesto imena kolone da biste brojali sve redove u tabeli.
WHERE condition: Opcioni deo koji definiše uslove koje redovi moraju da ispunjavaju da bi bili brojani.
Ako ga izostavite, COUNT() će brojati sve redove u tabeli.
Takođe, možete koristiti COUNT() funkciju sa uslovom da biste brojali samo određene redove. Na
primer, ako želite da brojite samo studente koji pohađaju predmet Matematika:
Ova naredba će vratiti broj studenata koji pohađaju predmet Matematika iz tabele POHAĐA.
Vežba
Odgovor: 6
Kod:
Sledeći SQL upit bira sve kolone iz tabele Customers gde je ili grad "Berlin", ime kupca počinje slovom
"G", ili je država "Norway":
Sledeći SQL upit bira sve kupce iz Španije čije ime počinje slovom "G" ili "R".
30 Godos Cocina Típica José Pedro Freyre C/ Romero, 33 Sevilla 41101 Spain
Kako da izbrojimo?
WHERE Country = 'Spain' AND (CustomerName LIKE 'G%' OR CustomerName LIKE 'R%')
count(*)
Ovaj SQL upit će izabrati sve kupce koji su ili iz Španije i čije ime počinje sa "G", ili čije ime počinje slovom
"R", bez obzira na vrednost države:
30 Godos Cocina Típica José Pedro Freyre C/ Romero, 33 Sevilla 41101 Spain
64 Rancho grande Sergio Gutiérrez Av. del Libertador 900 Buenos Aires 1010
Argentina
65 Rattlesnake Canyon Grocery Paula Wilson 2817 Milton Dr. Albuquerque 87110 USA
66 Reggiani Caseifici Maurizio Moroni Strada Provinciale 124 Reggio Emilia 42100
Italy
67 Ricardo Adocicados Janete Limeira Av. Copacabana, 267 Rio de Janeiro 02389-890
Brazil
Međutim, ovaj upit može dati neočekivane rezultate jer ne koristi zagrade za jasno definisanje prioriteta
izvršavanja uslova. U ovom slučaju, moguće je da će biti izabrani i kupci čije ime počinje slovom "R" iz
drugih zemalja, a ne samo iz Španije. To može dovesti do netačnih rezultata. Stoga je preporučljivo
koristiti zagrade da biste jasno definisali uslove izvršavanja.
FROM Customers
WHERE Country = 'Spain' AND CustomerName LIKE 'G%' OR CustomerName LIKE 'R%'
count(*)
Vežbe
Izaberite sve zapise gde kolona City ima vrednost 'Berlin' ili 'London':
SELECT *
FROM Customers
NOT operator
SQL NOT operator se koristi u kombinaciji sa drugim operatorima kako bi dao suprotan rezultat,
odnosno negativan rezultat.
U sledećem select upitu želimo da vratimo sve kupce koji NISU iz Španije:
Ovaj SQL upit će izabrati sve zapise iz tabele Customers gde vrednost u koloni Country NIJE 'Spain',
odnosno, vraća sve kupce koji su iz bilo koje države osim Španije.
Kontrola 86 zapisa
U primeru iznad, NOT operator je korišćen u kombinaciji sa = operatorom, ali može se koristiti u
kombinaciji sa drugim uporednim i/ili logičkim operatorima. Pogledajte primere ispod:
WHERE NOT Age = 30; -- Vraća sve zapise gde Age nije jednak 30
WHERE NOT (Quantity > 10 AND Price < 100); -- Vraća sve zapise gde količina nije veća od 10 i cena nije
manja od 100
WHERE NOT (Category = 'Electronics' OR Price > 500); -- Vraća sve proizvode gde kategorija nije
'Electronics' ili cena nije veća od 500
U ovim primerima, NOT operator se koristi u kombinaciji sa = operatorom, kao i sa logičkim operatorima
AND i OR, kako bi dobio suprotne rezultate u skladu sa zadatim uslovima.
Ovaj SQL upit će izabrati sve zapise iz tabele Customers čije ime kupca NE počinje slovom 'A'.
Korišćenjem NOT LIKE operatora sa šablonom 'A%', dobijamo sve zapise čije ime kupca ne počinje
slovom 'A'.
Kontrola 40 zapisa
KOntrola 83 zapisa
Ovaj SQL upit će izabrati sve zapise iz tabele Customers čiji City nije ni 'Paris' ni 'London'. Korišćenjem
NOT IN operatora sa listom vrednosti ('Paris', 'London'), dobijamo sve zapise čiji City nije uključen u tu
listu.
Ovaj SQL upit će izabrati sve zapise iz tabele Customers čiji CustomerID nije veći od 50. Korišćenjem NOT
operatora sa > operatorom, dobijamo sve zapise čiji CustomerID nije uključujući i 50.
da ih prebrojimo:
Ovaj SQL upit će izabrati sve zapise iz tabele Customers čiji CustomerID nije manji od 50. Korišćenjem
NOT operatora sa < operatorom, dobijamo sve zapise čiji CustomerID nije uključujući i 50.
Vežba
Odgovor 12
U ovoj sintaksi, navodite imena kolona u zagradama nakon imena tabele, a zatim pružate odgovarajuće
vrednosti u zagradama nakon VALUES ključne reči. Ovaj metod je koristan kada želite da unesete
vrednosti u određene kolone, a ne u sve kolone u tabeli.
Ako dodajete vrednosti za sve kolone tabele i to u istom redosledu kao što su kolone navedene u tabeli,
nije potrebno navoditi imena kolona:
U ovoj sintaksi direktno pružate vrednosti u istom redosledu kao što su kolone navedene u tabeli, bez
navođenja imena kolona. Ovaj metod je pogodan kada želite da unesete vrednosti u sve kolone tabele u
istom redosledu kao što su one definisane. Međutim, budite pažljivi da se uverite da redosled vrednosti
odgovara redosledu kolona u tabeli.
Primer SQL upita koji unosi novi zapis u tabelu "Customers" glasi:
SQL upit za dodavanje novog zapisa u tabelu "Customers" sa određenim vrednostima za kolone
CustomerName, ContactName, Address, City, PostalCode i Country je:
Ovaj SQL upit dodaje novog kupca "Cardinal" sa kontakt osobom "Tom B. Erichsen", adresom "Skagen
21", gradom "Stavanger", poštanskim brojem "4006" i državom "Norway" u tabelu "Customers".
Polje CustomerID je polje sa automatskim uvećanjem i biće generisano automatski kada se unese novi
zapis u tabelu.
Primer
Da biste uneli više redova podataka, koristimo isti INSERT INTO statement, ali sa više vrednosti:
Primer
VALUES
('Tasty Tee', 'Finn Egan', 'Streetroad 19B', 'Liverpool', 'L1 0AA', 'UK');
Ovaj SQL upit će uneti tri nova zapisa u tabelu "Customers" sa određenim vrednostima za svaku kolonu.
Svaki set vrednosti u VALUES delu predstavlja jedan zapis koji se dodaje u tabelu.
Vežba
Ovaj SQL upit će dodati novi zapis u tabelu "Customers" sa informacijama o kupcu "Hekkan Burger" koji
se nalazi na adresi "Gateveien 15" u gradu "Sandnes", sa poštanskim brojem "4306" u državi "Norway".
Ako je polje u tabeli opciono, moguće je uneti novi zapis ili ažurirati zapis bez dodavanja vrednosti u to
polje. Tada će polje biti sačuvano sa NULL vrednošću.
Napomena: NULL vrednost je drugačija od nule ili polja koje sadrži praznine. Polje sa NULL vrednošću je
ono koje je ostavljeno prazno prilikom kreiranja zapisa!
Nije moguće testirati NULL vrednosti sa uporednim operatorima, poput =, < ili <>.
Sintaksa za IS NULL
SELECT imena_kolona
FROM ime_tabele
SELECT imena_kolona
FROM ime_tabele
Sledeći SQL upit izlistava sve kupce sa NULL vrednošću u polju "Address":
SELECT *
FROM Customers
Ovaj SQL upit će izlistati sve zapise iz tabele "Customers" gde je polje "Address" prazno (NULL
vrednost).
Operator IS NOT NULL se koristi za testiranje vrednosti koje nisu prazne (NOT NULL vrednosti).
FROM Customers
Ovaj SQL upit će izlistati sve zapise iz tabele "Customers" gde polje "Address" nije prazno (NOT NULL
vrednost).
Da bismo izabrali sve zapise iz tabele Customers gde je kolona PostalCode prazna (NULL vrednost),
koristimo IS NULL operator. Evo kako bi izgledao SQL upit:
Ovaj SQL upit će izabrati sve zapise iz tabele Customers gde je kolona PostalCode prazna (NULL
vrednost).
Sintaksa UPDATE
UPDATE ime_tabele
WHERE uslov;
Napomena: Budite oprezni prilikom ažuriranja zapisa u tabeli! Primetite WHERE klauzulu u UPDATE
izjavi. WHERE klauzula određuje koje zapise treba ažurirati. Ako izostavite WHERE klauzulu, svi zapisi u
tabeli će biti ažurirani!
Sledeći SQL upit ažurira prvog kupca (CustomerID = 1) sa novom kontakt osobom i novim gradom:
UPDATE Customers
WHERE CustomerID = 1;
posle
Ovaj SQL upit će ažurirati prvi zapis u tabeli "Customers" tako što će postaviti novu kontakt osobu na
'John Smith' i novi grad na 'New York', samo ako je CustomerID jednak 1.
Sledeća SQL izjava će ažurirati ContactName u "Juan" za sve zapise gde je zemlja "Mexico":
Primer
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
Ovaj SQL upit će ažurirati ContactName u "Juan" za sve zapise gde je zemlja "Mexico" u tabeli
"Customers".
Budite oprezni prilikom ažuriranja zapisa. Ako izostavite WHERE klauzulu, SVE zapise će biti ažurirane!
Primer
UPDATE Customers
SET ContactName='Juan';
Ovaj SQL upit će ažurirati ContactName u "Juan" za SVE zapise u tabeli "Customers". Pre nego što izvršite
ažuriranje bez WHERE klauzule, uverite se da želite da ažurirate sve zapise u tabeli.
Vežba
___________ Customers
Rešenje
UPDATE Customers
Ovaj SQL upit će ažurirati kolonu City za sve zapise u tabeli Customers na vrednost 'Oslo'. Budite sigurni
da želite da ažurirate sve zapise pre nego što izvršite ovaj upit, jer će promeniti grad za sve kupce u
tabeli na 'Oslo'.
2. Postavite vrednost kolone City na 'Oslo', ali samo za one zapise gde kolona Country ima vrednost
"Norway":
_________ Customers
Rešenje
UPDATE Customers
Ovaj SQL upit će ažurirati vrednost kolone City na 'Oslo' samo za one zapise u tabeli
Customers gde je kolona Country jednaka "Norway".
3. Ažurirajte vrednosti kolone City i Country:
_________ Customers
_________ = 'Norway'
Rešenje
UPDATE Customers
Ovaj SQL upit će ažurirati vrednost kolone City na 'Oslo' i vrednost kolone Country na 'Norway' samo za
one zapise u tabeli Customers gde je kolona Country jednaka "Norway".
Sintaksa DELETE
Napomena: Budite oprezni prilikom brisanja zapisa iz tabele! Primetite WHERE klauzulu u DELETE izjavi.
WHERE klauzula određuje koje zapise treba obrisati. Ako izostavite WHERE klauzulu, svi zapisi u tabeli će
biti obrisani!
Primer
Ovaj SQL upit će obrisati kupca "Alfreds Futterkiste" iz tabele "Customers" na osnovu uslova da je
CustomerName jednak 'Alfreds Futterkiste'. Budite oprezni prilikom korišćenja DELETE izjave, jer će
izbrisati zapise koji odgovaraju datom uslovu.
Sledeći SQL upit će obrisati sve redove iz tabele "Customers", ali će struktura tabele ostati netaknuta:
Primer
Brisanje tabele
Primer
Ova izjava će ukloniti tabelu "Customers" zajedno sa svim njenim sadržajem i strukturom. Budite oprezni
prilikom korišćenja DROP TABLE izjave, jer će trajno obrisati celu tabelu.
Vežba
__________ Customers
Rešenje
Ovaj SQL upit će obrisati sve zapise iz tabele Customers gde je vrednost kolone Country jednaka
'Norway'. Nakon izvršenja ovog upita, svi zapisi koji ispunjavaju taj uslov će biti trajno obrisani iz tabele.
Budite sigurni da želite da obrišete ove zapise pre nego što izvršite ovaj upit, jer će brisanje biti trajno i
neopozivo.
Rešenje
Ovaj SQL upit će obrisati sve zapise iz tabele Customers. Budite pažljivi prilikom korišćenja DELETE izjave
bez WHERE klauzule, jer će obrisati sve zapise iz tabele bez mogućnosti povratka. Pre nego što izvršite
ovaj upit, uverite se da želite da obrišete sve zapise iz tabele.
SELECT TOP klauzula je korisna na velikim tabelama sa hiljadama zapisa. Vraćanje velikog broja zapisa
može uticati na performanse.
Primer
Ovaj SQL upit će izabrati samo prva 3 zapisa iz tabele Customers. Dakle, rezultat će sadržati samo prva 3
reda tabele Customers.
Različiti sistem baza podataka koriste različite sintakse za ograničavanje broja vraćenih zapisa.
FROM table_name
WHERE condition;
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
SELECT column_name(s)
FROM table_name
SELECT *
Kada radite sa različitim sistemima baza podataka, važno je koristiti odgovarajuću sintaksu koja
odgovara konkretnom sistemu koji koristite!
SQL LIMIT klauzula se koristi u MySQL-u da bi se ograničio broj vraćenih zapisa. Evo primera
ekvivalentnog primera za MySQL:
LIMIT 3;
Ovaj SQL upit će izabrati samo prva 3 zapisa iz tabele Customers u MySQL bazi podataka.
SQL FETCH FIRST n ROWS ONLY klauzula se koristi u Oracle bazi podataka da bi se ograničio broj
vraćenih zapisa. Evo ekvivalentnog primera za Oracle:
Ovaj SQL upit će izabrati samo prva 3 zapisa iz tabele Customers u Oracle bazi podataka.
Što se tiče SQL TOP PERCENT primera za SQL Server / MS Access, evo kako bi to izgledalo:
Ovaj SQL upit će izabrati prvih 50% zapisa iz tabele Customers u SQL Server ili MS Access bazi podataka.
SQL FETCH FIRST n ROWS ONLY klauzula se koristi u Oracle bazi podataka za ograničavanje broja
vraćenih zapisa, dok se SQL TOP PERCENT klauzula koristi u SQL Serveru ili MS Accessu za izbor
određenog procenta zapisa. Evo tih primera:
Ovaj SQL upit će izabrati samo prva 3 zapisa iz tabele Customers u Oracle bazi podataka.
Ovaj SQL upit će izabrati prvih 50% zapisa iz tabele Customers u SQL Server ili MS Access bazi podataka.
Agregatna funkcija je funkcija koja vrši računanje nad skupom vrednosti i vraća jednu vrednost.
Agregatne funkcije se često koriste sa GROUP BY klauzulom SELECT izjave. GROUP BY klauzula deli
rezultat u grupe vrednosti i agregatna funkcija se može koristiti da vrati jednu vrednost za svaku grupu.
Primer sa MIN()
SELECT MIN(Price)
FROM Products;
Primer sa MAX()
FROM Products;
Sintaksa
SELECT MIN(column_name)
FROM table_name
WHERE condition;
SELECT MAX(column_name)
FROM table_name
WHERE condition;
Ove funkcije se koriste za pronalaženje najmanje ili najveće vrednosti u određenoj koloni u tabeli, uz
mogućnost dodavanja dodatnog uslova sa WHERE klauzulom ako je potrebno.
Kada koristite MIN() ili MAX(), vraćena kolona neće imati deskriptivno ime. Da biste dali koloni
deskriptivno ime, koristite ključnu reč AS:
Primer
FROM Products;
Ovde koristimo MIN() funkciju i GROUP BY klauzulu da bismo dobili najmanju cenu za svaku kategoriju u
tabeli Products:
Primer
FROM Products
GROUP BY CategoryID;
Vežbe
1. Da izaberemo zapis sa najmanjom vrednošću u koloni Price, možemo koristiti MIN funkciju na sledeći
način:
SELECT MIN(Price)
FROM Products;
MIN(Price)
2.5
Ovaj upit će jednostavno vratiti najmanju vrednost u koloni Price, ali neće vratiti ceo red koji sadrži tu
vrednost. Ako želite ceo red sa najmanjom vrednošću, možete koristiti
SELECT *
FROM Products
Da biste izabrali zapis sa najvećom vrednošću u koloni Price, možete koristiti MAX funkciju na sledeći
način:
SELECT *
FROM Products
ili
SELECT MAX(Price)
FROM Products;
Koja je razlika?
Prvi SQL upit će izabrati red koji ima najveću vrednost u koloni Price iz tabele Products.
Da bismo dobili broj zapisa koji imaju vrednost Price postavljenu na 18, možemo koristiti COUNT
funkciju zajedno sa WHERE klauzulom. Evo kako to možete uraditi:
SELECT COUNT(*)
FROM Products
Da biste izračunali prosečnu vrednost cene svih proizvoda, možete koristiti AVG funkciju na sledeći
način:
SELECT AVG(Price)
FROM Products;
Ovaj SQL upit će izračunati prosečnu vrednost cene u koloni Price iz tabele Products.
AVG(Price)
28.86636363636364
Da biste izračunali zbir svih vrednosti u koloni Price tabele Products, možete koristiti SUM funkciju na
sledeći način:
SELECT SUM(Price)
FROM Products;
Ovaj SQL upit će izračunati ukupnu sumu svih vrednosti u koloni Price.
SUM(Price)
2222.71
Primer
SELECT SUM(Quantity)
FROM OrderDetails;
Ovaj SQL upit će vratiti zbir svih vrednosti u koloni Quantity iz tabele OrderDetails.
SUM(Quantity)
12743
Sintaksa
SELECT SUM(naziv_kolone)
FROM ime_tabele
WHERE uslov;
Ova sintaksa se koristi za izračunavanje sume vrednosti u određenoj koloni tabele, uz mogućnost
dodavanja uslova sa WHERE klauzulom ako je potrebno.
Primer
SELECT SUM(Quantity)
FROM OrderDetails
WHERE ProductId = 11;
Ovaj SQL upit će vratiti zbir polja Quantity za proizvod sa ProductID-om 11 iz tabele OrderDetails.
SUM(Quantity)
182
Primer
FROM OrderDetails;
Ovaj SQL upit će vratiti sumu kolone Quantity iz tabele OrderDetails i nazvati je "total".
Ovde koristimo SUM() funkciju i GROUP BY klauzulu da bismo vratili zbir Quantity za svaki OrderID u
tabeli OrderDetails:
Primer
FROM OrderDetails
GROUP BY OrderID;
Ovaj SQL upit će vratiti zbir količine za svaki OrderID u tabeli OrderDetails i nazvati tu kolonu "Ukupna
Količina".
SUM() sa izrazom
Primer
FROM OrderDetails;
Takođe možemo spojiti tabelu OrderDetails sa tabelom Products kako bismo pronašli stvaran iznos,
umesto što pretpostavljamo da je 10 dolara:
SUM(Quantity * 10)
127430
Primer
FROM OrderDetails
Ovaj SQL upit će spojiti tabelu OrderDetails sa tabelom Products koristeći LEFT JOIN na osnovu
ProductID-ja i izračunati ukupan iznos množenjem cene proizvoda sa količinom.
Vežba
Da bismo izračunali zbir svih vrednosti kolone Price u tabeli Products, koristimo SQL funkciju SUM().
SELECT SUM(Price)
FROM Products;
Ovaj SQL upit će izračunati zbir svih vrednosti u koloni Price u tabeli Products.
Primer
SELECT AVG(Price)
FROM Products;
Napomena: NULL vrednosti se ignorišu.
Sintaksa
SELECT AVG(column_name)
FROM table_name
WHERE condition;
Primer:
SELECT AVG(Price)
FROM Products
WHERE CategoryID = 1;
Ovaj SQL upit će izračunati prosečnu cenu proizvoda koji pripadaju kategoriji 1 u tabeli Products.
AVG(Price)
37.97916666666666
Primer:
FROM Products;
average price
28.86636363636364
Za prikaz svih zapisa sa cenom većom od prosečne cene, možemo koristiti AVG() funkciju u podupitu.
Primer:
Primer:
FROM Products
GROUP BY CategoryID;
AveragePrice CategoryID
37.97916666666666 1
23.0625 2
25.16 3
28.73 4
20.25 5
54.00666666666667 6
32.37 7
20.6825 8
Vežba
Da bismo izračunali prosečnu cenu svih proizvoda, koristimo SQL AVG() funkciju zajedno sa SELECT
izjavom. Evo kako to izgleda:
SELECT AVG(Price)
FROM Products;
Ovaj SQL upit će izračunati prosečnu cenu svih proizvoda u tabeli Products.
Vežba
Da bismo izabrali sve zapise gde vrednost kolone City sadrži slovo "a", koristimo SQL LIKE operator
zajedno sa SELECT izjavom. Evo kako to može izgledati:
SELECT *
FROM Customers
Ovaj SQL upit će izabrati sve zapise gde se u vrednosti kolone City nalazi slovo "a". % simbol označava da
može biti bilo koji broj karaktera pre ili posle slova "a".
Da bismo izabrali sve zapise gde vrednost kolone City završava slovom "a", koristimo SQL LIKE operator
zajedno sa SELECT izjavom. Evo kako to može izgledati:
SELECT *
FROM Customers
Ovaj SQL upit će izabrati sve zapise gde se vrednost kolone City završava slovom "a". % simbol označava
da može biti bilo koji broj karaktera pre slova "a".
Operator LIKE se koristi u WHERE klauzuli kako bi se pretražio određeni obrazac u koloni.
Primer
sintaksni oblik za korišćenje LIKE operatora u SQL-u. Evo primer kako se to koristi:
FROM table_name
U ovom primeru, tražimo sve kupce iz grada koji počinje sa 'L', zatim ima jedan wildcard karakter, nakon
toga 'nd', i na kraju još dva wildcard karaktera. Ovo će pronaći sve gradove koji odgovaraju ovom
obrascu, kao što su "London", "Lindon", "Lxndkf", i slično.
SQL upit koji će vratiti sve kupce čiji grad sadrži slovo 'L'.
Sledeći SQL upit trebalo bi da vrati sve kupce čije ime počinje sa 'La'.
Možete takođe kombinovati bilo koji broj uslova koristeći AND ili OR operatore.
Primer
Vrati sve kupce čije ime počinje sa 'a' ili počinje sa 'b':
Završava se sa
Da biste vratili zapise koji se završavaju sa određenim slovom ili frazom, dodajte % na početak slova ili
fraze.
Primer
Da biste vratili zapise koji sadrže određeno slovo ili frazu, dodajte % i pre i posle slova ili fraze.
Primer
Svaki zamenski znak, poput % i _ , može se koristiti u kombinaciji s drugim zamenskim znakovima.
Primer
Primer
Primer
Vežbe
izaberete sve zapise gde vrednost kolone "City" počinje slovom "a":
izaberete sve zapise gde vrednost kolone "City" završava slovom "a":
izaberete sve zapise gde vrednost kolone "City" sadrži slovo "a":
SQL upit da biste izabrali sve zapise gde vrednost kolone "City" počinje slovom "a" i završava se slovom
"b":
Da biste izabrali sve zapise gde vrednost kolone "City" ne počinje slovom "a", možete koristiti sledeći
SQL upit:
WILDCARD KARAKTERI
wildcard karakteri se koriste u SQL-u sa LIKE operatorom kako bi zamenili jedan ili više karaktera u nizu.
Evo nekih osnovnih wildcard karaktera:
^: Predstavlja bilo koji karakter koji nije naveden unutar uglatih zagrada.
Na primer, ako želite da vratite sve kupce čije ime počinje slovom 'a', možete koristiti % kao wildcard:
Ovo će vratiti sve zapise iz tabele "Customers" čije ime kupca počinje slovom 'a'.
DŽOKER KARAKTERI
Džoker karakteri se koriste da zamene jedan ili više karaktera u nizu. Džoker karakteri se koriste uz LIKE
operator. LIKE operator se koristi u WHERE klauzuli da bi se tražio određeni obrazac u koloni.
Evo SQL upita koji vraća sve kupce čije ime počinje slovom 'a':
[]: Predstavlja bilo koji jedan karakter koji se nalazi unutar uglatih zagrada.
-: Predstavlja bilo koji jedan karakter koji se nalazi unutar određenog opsega.
{}: Predstavlja bilo koji "escape" karakter. Ovo je podržano samo u Oracle bazama podataka.
Napomena: Karakter * nije podržan u PostgreSQL i MySQL bazama podataka. Karakter ** je podržan
samo u Oracle bazama podataka.
Ovaj upit će vratiti sve korisnike čija se imena završavaju na uzorak 'es'.
Ovaj upit će vratiti sve korisnike čija imena sadrže uzorak 'mer' bilo gde u imenu.
Ovaj upit će vratiti sve korisnike čiji grad počinje bilo kojim karakterom, a zatim sledi "ondon".
Ovaj upit će vratiti sve korisnike čiji grad počinje sa "L", a zatim sledi bilo koja tri karaktera, i na kraju se
završava sa "on".
Ovaj upit će vratiti sve korisnike čije ime počinje sa slovima "b", "s" ili "p".
Ovaj upit će vratiti sve korisnike čije ime počinje sa slovima od "a" do "f".
Ovaj upit će vratiti sve korisnike čije ime počinje slovom "a" i ima barem tri karaktera u dužini.
Ovaj upit će vratiti sve korisnike iz Španije jer se traži tačno podudaranje sa navedenim izrazom "Spain".
1. Da bismo izabrali sve zapise gde je drugo slovo u nazivu grada "a", možemo koristiti karakter džokera
_ zajedno s karakternim džokerom %:
Ovaj upit će izabrati sve zapise gde drugo slovo u nazivu grada počinje slovom "a".
2. Da bismo izabrali sve zapise gde je prvo slovo u nazivu grada "a", "c" ili "s", možemo koristiti
karakterni džoker [] zajedno s karakternim džokerom %:
Ovaj upit će izabrati sve zapise gde prvo slovo u nazivu grada može biti "a", "c" ili "s".
3.
Da bismo izabrali sve zapise gde prvo slovo u nazivu grada može biti bilo koje od slova od "a" do "f",
možemo koristiti karakterni džoker [] zajedno s karakternim džokerom %:
Ovaj upit će izabrati sve zapise gde prvo slovo u nazivu grada može biti bilo koje od slova od "a" do "f".
4. Da bismo izabrali sve zapise gde prvo slovo u nazivu grada nije "a", "c" ili "f", možemo koristiti
karakterni džoker [] zajedno s karakternim džokerom % i karakternim džokerom ^ za negaciju:
Ovaj upit će izabrati sve zapise gde prvo slovo u nazivu grada nije "a", "c" ili "f".
5. Da biste koristili operator IN i izabrali sve zapise gde je Country ili "Norway" ili "France", upit bi trebao
izgledati ovako:
Ovaj upit će vratiti sve zapise iz tabele Customers gde je Country "Norway" ili "France".
6. Da biste koristili operator IN i izabrali sve zapise gde Country nije ni "Norway" ni "France", upit bi
trebao izgledati ovako:
SQL IN Operator
Primer
Sintaksa
SELECT naziv_kolone(kolona_ime)
FROM ime_tabele
NOT IN
Korišćenjem reči NOT ispred IN operatora, dobijate sve zapise koji NISU ni jedna od vrednosti navedenih
u listi.
Primer
Vratite sve kupce koji NISU iz 'Nemačke', 'Francuske' ili 'Velike Britanije':
IN (SELECT)
Pomoću podupita možete vratiti sve zapise iz glavnog upita koji su prisutni u rezultatu podupita.
Primer
Rezultat u primeru iznad vratio je 74 zapisa, što znači da postoji 17 kupaca koji nisu postavili nijednu
porudžbinu.
Proverimo da li je to tačno, koristeći NOT IN operator.
Primer
Vratite sve kupce koji NISU postavili nijednu porudžbinu u tabeli Porudžbine.
Operator BETWEEN bira vrednosti unutar datog opsega. Vrednosti mogu biti brojevi, tekst ili datumi.
Primer
Sintaksa
SELECT ime_kolone(ime_kolona)
FROM ime_tabele
NOT BETWEEN
Primer
Sledeći SQL statement bira sve proizvode sa cenom između 10 i 20. Pored toga, CategoryID mora biti ili
1, 2 ili 3:
Primer
Sledeći SQL statement bira sve proizvode sa ProductName koji su abecedno između Carnarvon Tigers i
Mozzarella di Giovanni:
Primer
ORDER BY ProductName;
Sledeći SQL statement bira sve proizvode sa ProductName koji su između Carnarvon Tigers i Chef
Anton's Cajun Seasoning:
Primer
WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning"
ORDER BY ProductName;
Sledeći SQL statement bira sve proizvode sa ProductName koji nisu između Carnarvon Tigers i
Mozzarella di Giovanni:
Primer
Između datuma
Sledeći SQL statement bira sve porudžbine sa OrderDate između '01-July-1996' i '31-July-1996':
Primer
ILI:
Primer
Vežbe
1. Koristite operator BETVEEN da biste izabrali sve zapise u kojima je vrednost kolone Cena između 10 i
20.
Rešenje
2. Koristite operator BETVEEN da biste izabrali sve zapise u kojima vrednost kolone Cena NIJE između 10
i 20.
Rešenje
Rešenje