0% found this document useful (0 votes)
7 views

SQL

Uploaded by

culfis
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

SQL

Uploaded by

culfis
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 61

Uvodna vežba

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 omogućava pristupanje i manipulaciju bazama podataka

SQL je postao standard Američkog nacionalnog instituta za standarde (ANSI) 1986. godine, a
Međunarodne organizacije za standardizaciju (ISO) 1987. godine

Šta sve SQL može?

SQL može izvršavati upite nad bazom podataka

SQL može dohvatati podatke iz baze podataka

SQL može unositi zapise u bazu podataka

SQL može ažurirati zapise u bazi podataka

SQL može brisati zapise iz baze podataka

SQL može kreirati nove baze podataka

SQL može kreirati nove tabele u bazi podataka

SQL može kreirati uskladištene procedure u bazi podataka

SQL može kreirati poglede (views) u bazi podataka

SQL može postavljati dozvole na tabelama, procedurama i pogledima

SQL je standard - ALI...

Iako je SQL ANSI/ISO standard, postoje različite verzije SQL jezika.

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!

Korišćenje SQL-a na Vašem Web sajtu

Da biste napravili web sajt koji prikazuje podatke iz baze podataka, trebaće Vam:

 Program za relaciono-bazirane sisteme (RDBMS) (npr. MS Access, SQL Server, MySQL)


 Korišćenje serverskog skriptni jezika, poput PHP-a ili ASP-a
 Korišćenje SQL-a za dobijanje željenih podataka
 Korišćenje HTML-a / CSS-a za stilizovanje stranice

RDBMS

RDBMS je skraćenica od Relational Database Management System (Sistem za upravljanje relacionim


bazama podataka).
RDBMS je osnova za SQL, kao i za sve moderne baze podataka kao što su MS SQL Server, IBM DB2,
Oracle, MySQL i Microsoft Access.

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

Pogledajte tabelu "Customers":

SELECT * FROM Customers;


CustomerI CustomerNa ContactNam Address City PostalCo Country
D me e de
1 Alfreds Maria Anders Obere Str. 57 Berlin 12209 Germany
Futterkiste
2 Ana Trujillo Ana Trujillo Avda. de la México 05021 Mexico
Emparedados Constitución D.F.
y helados 2222
3 Antonio Antonio Mataderos México 05023 Mexico
Moreno Moreno 2312 D.F.
Taquería
4 Around the Thomas 120 Hanover London WA1 1DP UK
Horn Hardy Sq.
5 Berglunds Christina Berguvsväge Luleå S-958 22 Sweden
snabbköp Berglund n8
6 Blauer See Hanna Moos Forsterstr. 57 Mannheim 68306 Germany
Delikatessen
7 Blondel père Frédérique 24, place Strasbourg 67000 France
et fils Citeaux Kléber
8 Bólido Martín C/ Araquil, Madrid 28023 Spain
Comidas Sommer 67
preparadas
9 Bon app' Laurence 12, rue des Marseille 13008 France
Lebihans Bouchers
10 Bottom-Dollar Elizabeth 23 Tsawassen T2F 8M4 Canada
Marketse Lincoln Tsawassen
Blvd.
11 B's Beverages Victoria Fauntleroy London EC2 5NT UK
Ashworth Circus
12 Cactus Patricio Cerrito 333 Buenos 1010 Argentina
Comidas para Simpson Aires
llevar
13 Centro Francisco Sierras de México 05022 Mexico
comercial Chang Granada D.F.
Moctezuma 9993
14 Chop-suey Yang Wang Hauptstr. 29 Bern 3012 Switzerla
Chinese nd
15 Comércio Pedro Afonso Av. dos São Paulo 05432-043 Brazil
Mineiro Lusíadas, 23
16 Consolidated Elizabeth Berkeley London WX1 6LT UK
Holdings Brown Gardens 12
Brewery
17 Drachenblut Sven Ottlieb Walserweg Aachen 52066 Germany
Delikatessend 21
18 Du monde Janine 67, rue des Nantes 44000 France
entier Labrune Cinquante
Otages
19 Eastern Ann Devon 35 King London WX3 6FW UK
Connection George
20 Ernst Handel Roland Kirchgasse 6 Graz 8010 Austria
Mendel
21 Familia Aria Cruz Rua Orós, 92 São Paulo 05442-030 Brazil
Arquibaldo
22 FISSA Fabrica Diego Roel C/ Madrid 28034 Spain
Inter. Moralzarzal,
Salchichas 86
S.A.
23 Folies Martine 184, Lille 59000 France
gourmandes Rancé chaussée de
Tournai
24 Folk och fä HB Maria Larsson Åkergatan 24 Bräcke S-844 67 Sweden
25 Frankenversan Peter Berliner Platz München 80805 Germany
d Franken 43
26 France Carine 54, rue Nantes 44000 France
restauration Schmitt Royale
27 Franchi S.p.A. Paolo Accorti Via Monte Torino 10100 Italy
Bianco 34
28 Furia Bacalhau Lino Jardim das Lisboa 1675 Portugal
e Frutos do Rodriguez rosas n. 32
Mar
29 Galería del Eduardo Rambla de Barcelona 08022 Spain
gastrónomo Saavedra Cataluña, 23
30 Godos Cocina José Pedro C/ Romero, Sevilla 41101 Spain
Típica Freyre 33
31 Gourmet André Av. Brasil, Campinas 04876-786 Brazil
Lanchonetes Fonseca 442
32 Great Lakes Howard 2732 Baker Eugene 97403 USA
Food Market Snyder Blvd.
33 GROSELLA- Manuel 5ª Ave. Los Caracas 1081 Venezuel
Restaurante Pereira Palos a
Grandes
34 Hanari Carnes Mario Pontes Rua do Paço, Rio de 05454-876 Brazil
67 Janeiro
35 HILARIÓN- Carlos Carrera 22 San 5022 Venezuel
Abastos Hernández con Ave. Cristóbal a
Carlos
Soublette
#8-35
36 Hungry Coyote Yoshi Latimer City Center Elgin 97827 USA
Import Store Plaza 516
Main St.
37 Hungry Owl Patricia 8 Johnstown Cork Ireland
All-Night McKenna Road
Grocers
38 Island Trading Helen Garden Cowes PO31 7PJ UK
Bennett House
Crowther
Way
39 Königlich Philip Cramer Maubelstr. Brandenbu 14776 Germany
Essen 90 rg
40 La corne Daniel Tonini 67, avenue Versailles 78000 France
d'abondance de l'Europe
41 La maison Annette 1 rue Alsace- Toulouse 31000 France
d'Asie Roulet Lorraine
42 Laughing Yoshi 1900 Oak St. Vancouver V3F 2K1 Canada
Bacchus Wine Tannamuri
Cellars
43 Lazy K Kountry John Steel 12 Orchestra Walla 99362 USA
Store Terrace Walla
44 Lehmanns Renate Magazinweg Frankfurt 60528 Germany
Marktstand Messner 7 a.M.
45 Let's Stop N Jaime Yorres 87 Polk St. San 94117 USA
Shop Suite 5 Francisco
46 LILA- Carlos Carrera 52 Barquisime 3508 Venezuel
Supermercado González con Ave. to a
Bolívar #65-
98 Llano
Largo
47 LINO- Felipe Ave. 5 de I. de 4980 Venezuel
Delicateses Izquierdo Mayo Margarita a
Porlamar
48 Lonesome Fran Wilson 89 Portland 97219 USA
Pine Chiaroscuro
Restaurant Rd.
49 Magazzini Giovanni Via Ludovico Bergamo 24100 Italy
Alimentari Rovelli il Moro 22
Riuniti
50 Maison Dewey Catherine Rue Joseph- Bruxelles B-1180 Belgium
Dewey Bens 532
51 Mère Paillarde Jean 43 rue St. Montréal H1J 1C3 Canada
Fresnière Laurent
52 Morgenstern Alexander Heerstr. 22 Leipzig 04179 Germany
Gesundkost Feuer
53 North/South Simon South House London SW7 1RZ UK
Crowther 300
Queensbridg
e
54 Océano Yvonne Ing. Gustavo Buenos 1010 Argentina
Atlántico Ltda. Moncada Moncada Aires
8585 Piso
20-A
55 Old World Rene Phillips 2743 Bering Anchorage 99508 USA
Delicatessen St.
56 Ottilies Henriette Mehrheimers Köln 50739 Germany
Käseladen Pfalzheim tr. 369
57 Paris Marie 265, Paris 75012 France
spécialités Bertrand boulevard
Charonne
58 Pericles Guillermo Calle Dr. México 05033 Mexico
Comidas Fernández Jorge Cash D.F.
clásicas 321
59 Piccolo und Georg Pipps Geislweg 14 Salzburg 5020 Austria
mehr
60 Princesa Isabel Isabel de Estrada da Lisboa 1756 Portugal
Vinhoss Castro saúde n. 58
61 Que Delícia Bernardo Rua da Rio de 02389-673 Brazil
Batista Panificadora, Janeiro
12
62 Queen Lúcia Alameda dos São Paulo 05487-020 Brazil
Cozinha Carvalho Canàrios,
891
63 QUICK-Stop Horst Kloss Taucherstraß Cunewalde 01307 Germany
e 10
64 Rancho Sergio Av. del Buenos 1010 Argentina
grande Gutiérrez Libertador Aires
900
65 Rattlesnake Paula Wilson 2817 Milton Albuquerq 87110 USA
Canyon Dr. ue
Grocery
66 Reggiani Maurizio Strada Reggio 42100 Italy
Caseifici Moroni Provinciale Emilia
124
67 Ricardo Janete Av. Rio de 02389-890 Brazil
Adocicados Limeira Copacabana, Janeiro
267
68 Richter Michael Holz Grenzacherw Genève 1203 Switzerla
Supermarkt eg 237 nd
69 Romero y Alejandra Gran Vía, 1 Madrid 28001 Spain
tomillo Camino
70 Santé Jonas Erling Stavern 4110 Norway
Gourmet Bergulfsen Skakkes gate
78
71 Save-a-lot Jose Pavarotti 187 Suffolk Boise 83720 USA
Markets Ln.
72 Seven Seas Hari Kumar 90 Wadhurst London OX15 4NB UK
Imports Rd.
73 Simons bistro Jytte Vinbæltet 34 København 1734 Denmark
Petersen
74 Spécialités du Dominique 25, rue Paris 75016 France
monde Perrier Lauriston
75 Split Rail Beer Art P.O. Box 555 Lander 82520 USA
& Ale Braunschwei
ger
76 Suprêmes Pascale Boulevard Charleroi B-6000 Belgium
délices Cartrain Tirou, 255
77 The Big Liz Nixon 89 Jefferson Portland 97201 USA
Cheese Way Suite 2
78 The Cracker Liu Wong 55 Grizzly Butte 59801 USA
Box Peak Rd.
79 Toms Karin Josephs Luisenstr. 48 Münster 44087 Germany
Spezialitäten
80 Tortuga Miguel Angel Avda. Azteca México 05033 Mexico
Restaurante Paolino 123 D.F.
81 Tradição Anabela Av. Inês de São Paulo 05634-030 Brazil
Hipermercado Domingues Castro, 414
s
82 Trail's Head Helvetius 722 DaVinci Kirkland 98034 USA
Gourmet Nagy Blvd.
Provisioners
83 Vaffeljernet Palle Ibsen Smagsløget Århus 8200 Denmark
45
84 Victuailles en Mary Saveley 2, rue du Lyon 69004 France
stock Commerce
85 Vins et alcools Paul Henriot 59 rue de Reims 51100 France
Chevalier l'Abbaye
86 Die Rita Müller Adenaueralle Stuttgart 70563 Germany
Wandernde e 900
Kuh
87 Wartian Pirkko Torikatu 38 Oulu 90110 Finland
Herkku Koskitalo
88 Wellington Paula Parente Rua do Resende 08737-363 Brazil
Importadora Mercado, 12
89 White Clover Karl Jablonski 305 - 14th Seattle 98128 USA
Markets Ave. S. Suite
3B
90 Wilman Kala Matti Keskuskatu Helsinki 21240 Finland
Karttunen 45
91 Wolski Zbyszek ul. Filtrowa Walla 01-012 Poland
68

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.

SQL naredbe se sastoje od ključnih reči koje su lako razumljive.

Sledeća SQL naredba vraća sve zapise iz tabele pod nazivom "Customers":

SELECT * FROM Customers;

U ovom tutorijalu naučićemo vas sve o različitim SQL naredbama.

TABELE BAZE PODATAKA


Baza podataka najčešće sadrži jednu ili više tabela. Svaka tabela je identifikovana imenom (npr.
"Customers" ili "Orders"), i sadrži zapise (redove) sa podacima.

U ovom tutorijalu koristićemo dobro poznatu Northwind uzorak bazu podataka (uključenu u MS Access i
MS SQL Server).

U nastavku je prikaz selekcije iz tabele Customers koja se koristi u primerima:

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.

Da li treba da dodam tačku-zarez nakon SQL naredbi?

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.

U ovom tutorijalu, koristićemo tačku-zarez na kraju svake SQL naredbe.

Neke od najvažnijih SQL komandi su:

SELECT - izvlači podatke iz baze podataka

UPDATE - ažurira podatke u bazi podataka

DELETE - briše podatke iz baze podataka

INSERT INTO - umeće nove podatke u bazu podataka

CREATE DATABASE - kreira novu bazu podataka

ALTER DATABASE - modifikuje bazu podataka

CREATE TABLE - kreira novu tabelu

ALTER TABLE - modifikuje tabelu

DROP TABLE - briše tabelu

CREATE INDEX - kreira indeks (ključ pretrage)

DROP INDEX - briše indeks


SQL SELECT NAREDBA
SQL SELECT naredba se koristi za selektovanje podataka iz baze podataka.

Primer:

Povratak podataka iz tabele Customers:

SELECT CustomerName, City FROM Customers;

Sintaksa:

SELECT column1, column2, ...

FROM table_name;

Ovde, column1, column2, ... su imena polja tabele iz koje želite da selektujete podatke.

table_name predstavlja ime tabele iz koje želite da selektujete podatke.

Demo baza podataka:

U nastavku je prikaz selekcije iz tabele Customers koja se koristi u primerima:

Selektovanje SVIH kolona

Ako želite da vratite sve kolone, a da ne navodite svako ime kolone, možete koristiti sintaksu SELECT *:

Primer

Vratite sve kolone iz tabele Customers:

SELECT * FROM Customers;

Korišćenjem ključne reči DISTINCT u funkciji COUNT, možemo vratiti broj različitih zemalja.
Primer:

SELECT COUNT(DISTINCT Country) AS NumberOfCountries

FROM Customers;

Ovaj upit će vratiti broj različitih zemalja iz tabele Customers.

21

Napomena: COUNT(DISTINCT column_name) nije podržan u Microsoft Access bazama podataka.

Evo rešenja za MS Access:

Primer:

SELECT Count(*) AS DistinctCountries

FROM (SELECT DISTINCT Country FROM Customers);

Kasnije ćete naučiti o funkciji COUNT u ovom tutorijalu.

SELECT DISTINCT Country FROM Customers;

Country

Germany

Mexico

UK

Sweden

France

Spain

Canada

Argentina

Switzerland

Brazil

Austria

Italy

Portugal

USA

Venezuela

Ireland
Belgium

Norway

Denmark

Finland

Poland

Primer bez korišćenja DISTINCT ključne reči:

SELECT Country FROM Customers;

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

ZADACI ZA SAMOSTALNO VEŽBANJE

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;

SQL WHERE klauzula

WHERE klauzula se koristi za filtriranje zapisa.

Koristi se za izvlačenje samo onih zapisa koji ispunjavaju određeni uslov.

Primer:

Izaberite sve kupce iz Meksika:

SELECT * FROM Customers

WHERE Country='Mexico';

Sintaksa:

SELECT column1, column2, ...


FROM table_name

WHERE condition;

Napomena: WHERE klauzula se ne koristi samo u SELECT naredbama, već se takođe


koristi i u UPDATE, DELETE, itd. naredbama!
Polja za tekst vs. Polja za numerike
SQL zahteva navođenje tekstualnih vrednosti između jednostrukih ili dvostrukih
navodnika, dok numeričke vrednosti ne treba da budu u navodnicima.
SQL zahteva jednostruke navodnike oko tekstualnih vrednosti (većina sistema za
baze podataka takođe dozvoljava i dvostruke navodnike).
Međutim, numerička polja ne bi trebalo da budu u navodnicima:
Primer
U vašem primeru, ako želite da pronađete kupca čiji je CustomerID jednak 1, upit bi
trebao da izgleda ovako:
SELECT * FROM Customers
WHERE CustomerID=1;

ZADACI ZA SAMOSTALNO VEŽBANJE


1. Izaberite sve zapise gde kolona City ima vrednost "Berlin":
2. Izaberite sve zapise gde kolona CustomerID ima vrednost 32:

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)

CustomerID CustomerName ContactName Address City PostalCode Country


Tradição Anabela Av. Inês de São
81 05634-030 Brazil
Hipermercados Domingues Castro, 414 Paulo
Trail's Head
Helvetius 722 DaVinci
82 Gourmet Kirkland 98034 USA
Nagy Blvd.
Provisioners
Smagsløget Denmar
83 Vaffeljernet Palle Ibsen Århus 8200
45 k
Victuailles en 2, rue du
84 Mary Saveley Lyon 69004 France
stock Commerce
Vins et alcools 59 rue de
85 Paul Henriot Reims 51100 France
Chevalier l'Abbaye
Die Wandernde Adenaueralle Stuttga German
86 Rita Müller 70563
Kuh e 900 rt y
Pirkko
87 Wartian Herkku Torikatu 38 Oulu 90110 Finland
Koskitalo
Wellington Rua do Resend
88 Paula Parente 08737-363 Brazil
Importadora Mercado, 12 e
305 - 14th
White Clover
89 Karl Jablonski Ave. S. Suite Seattle 98128 USA
Markets
3B
Matti Keskuskatu
90 Wilman Kala Helsinki 21240 Finland
Karttunen 45
ul. Filtrowa
91 Wolski Zbyszek Walla 01-012 Poland
68

Korisno je prieniti i opciju


Copy to SQL
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('81', 'Tradição Hipermercados',
'Anabela Domingues', 'Av. Inês de Castro, 414', 'São Paulo', '05634-030', 'Brazil');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('82', 'Trail''s Head Gourmet
Provisioners', 'Helvetius Nagy', '722 DaVinci Blvd.', 'Kirkland', '98034', 'USA');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('83', 'Vaffeljernet', 'Palle Ibsen',
'Smagsløget 45', 'Århus', '8200', 'Denmark');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('84', 'Victuailles en stock', 'Mary
Saveley', '2, rue du Commerce', 'Lyon', '69004', 'France');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('85', 'Vins et alcools Chevalier',
'Paul Henriot', '59 rue de l''Abbaye', 'Reims', '51100', 'France');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('86', 'Die Wandernde Kuh', 'Rita
Müller', 'Adenauerallee 900', 'Stuttgart', '70563', 'Germany');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('87', 'Wartian Herkku', 'Pirkko
Koskitalo', 'Torikatu 38', 'Oulu', '90110', 'Finland');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('88', 'Wellington Importadora',
'Paula Parente', 'Rua do Mercado, 12', 'Resende', '08737-363', 'Brazil');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('89', 'White Clover Markets',
'Karl Jablonski', '305 - 14th Ave. S. Suite 3B', 'Seattle', '98128', 'USA');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('90', 'Wilman Kala', 'Matti
Karttunen', 'Keskuskatu 45', 'Helsinki', '21240', 'Finland');
INSERT INTO "main"."" ("CustomerID", "CustomerName", "ContactName",
"Address", "City", "PostalCode", "Country") VALUES ('91', 'Wolski', 'Zbyszek', 'ul.
Filtrowa 68', 'Walla', '01-012', 'Poland');

Napomena: Ovako ćemo raditi u Oracle LIVE SQL-u

Evo nekih operatora koji se mogu koristiti u WHERE klauzuli:

Operator Opis Primer


= Jednako SELECT * FROM Products
WHERE Price = 18;
> Veće od SELECT * FROM Products
WHERE Price > 30;
< Manje od SELECT * FROM Products
WHERE Price < 30;
>= Veće od ili jednako SELECT * FROM Products
WHERE Price >= 30;
<= Manje od ili jednako SELECT * FROM Products
WHERE Price <= 30;
<> Nije jednako. Napomena: U nekim SELECT * FROM Products
verzijama SQL-a ovaj operator WHERE Price <> 18;
može biti napisan kao !=
BETWEEN Između određenog opsega SELECT * FROM Products
WHERE Price BETWEEN 50
AND 60;
LIKE Pretražuje uzorak SELECT * FROM Customers
WHERE City LIKE 's%';
IN Za specificiranje više mogućih SELECT * FROM Customers
vrednosti za kolonu WHERE City IN
('Paris','London');

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:

SELECT CAST('2/9/1952' AS DATE) AS Datum;

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:

SELECT CONVERT(DATE, '2/9/1952', 101) AS Datum;

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.

SELECT CAST(tvoja_kolona AS DATE) AS Datum

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.

Ili možete koristiti funkciju CONVERT na isti način:

SELECT CONVERT(DATE, tvoja_kolona, 101) AS Datum

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.

Sortirajte proizvode po ceni:

SELECT * FROM Products

ORDER BY Price;

Ovaj upit vrši selekciju svih kolona iz tabele "Proizvodi" i sortira rezultate po koloni "Cena".

Sintaksa:

SELECT kolona1, kolona2, ...

FROM ime_tabele

ORDER BY kolona1, kolona2, ... ASC|DESC;

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

Sortirajte proizvode od najviše do najniže cene:

SELECT * FROM Proizvodi


ORDER BY Cena DESC;

RASPORED ABECEDNO
Za string vrednosti, ključna reč ORDER BY će ih sortirati abecedno:

Primer

Rasporedi proizvode abecedno po imenu proizvoda:

SELECT * FROM Products

ORDER BY ProductName;

Alphabetically DESC

Da biste sortirali tabelu obrnuto abecedno, koristite ključnu reč DESC:

Primer

Sortirajte proizvode po imenu proizvoda u obrnutom redosledu:

SELECT * FROM Products

ORDER BY ProductName DESC;

ORDER BY Više Kolona

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

SELECT * FROM Customers

ORDER BY Country, CustomerName;

Koristeći i ASC i DESC

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

ORDER BY Country ASC, CustomerName DESC;

ZADACI ZA SAMOSTALNO VEŽBANJE


1. Izaberite sve zapise iz tabele Customers i sortirajte rezultat abecedno po koloni City

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.

SELECT * FROM Customers

ORDER BY City;

2.

SELECT * FROM Customers

ORDER BY City DESC;

3.

SELECT * FROM Customers

ORDER BY Country, City;

SQL AND OPERATOR


Klauzula WHERE može sadržavati jedan ili više AND operatora.
AND operator se koristi za filtriranje zapisa na osnovu više od jednog uslova, kao na primer ako
želite da vratite sve kupce iz Španije čije ime počinje slovom 'G':
Izaberite sve kupce iz Španije čije ime počinje slovom 'G':
SELECT * FROM Customers
WHERE Country = 'Spain' AND CustomerName LIKE 'G%';

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:

SELECT * FROM Customers

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".

Obavezno koristite zagrade kako biste dobili tačan rezultat.

Primer

Izaberite sve španske kupce čije ime počinje sa "G" ili "R":

SELECT * FROM Customers

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

Izaberite sve kupce koji su ili:

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

SELECT * FROM Customers

WHERE City = 'Berlin' AND PostalCode = 12209;

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.

Evo osnovne strukture COUNT() funkcije:

SELECT COUNT(column_name) FROM table_name WHERE condition;

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.

FROM table_name: Specifikacija tabele iz koje želite da brojite redove.

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.

Na primer, ako želite da brojite sve studente u tabeli STUDENT:

SELECT COUNT(*) FROM STUDENT;

Ova naredba će vratiti ukupan broj studenata u tabeli STUDENT.

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:

SELECT COUNT(*) FROM POHAĐA WHERE IDPredmeta = 1;

Ova naredba će vratiti broj studenata koji pohađaju predmet Matematika iz tabele POHAĐA.

Vežba

SELECT COUNT (*) FROM Customers


WHERE Country = 'Germany' AND City = 'Berlin' AND PostalCode > 12000;

Koliko je mušterija iz Velike Britanije iz Londona?

Odgovor: 6

Kod:

SELECT COUNT (*) FROM Customers

WHERE Country = 'UK' AND City = "London"

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":

SELECT * FROM Customers

WHERE City = 'Berlin' OR CustomerName LIKE 'G%' OR Country = 'Norway';

Kako bismo izbrojali ovo?

SELECT count (*) FROM Customers


WHERE City = 'Berlin' OR CustomerName LIKE 'G%' OR Country = 'Norway'
count(*)

Sledeći SQL upit bira sve kupce iz Španije čije ime počinje slovom "G" ili "R".

Obavezno koristite zagrade da biste dobili tačan rezultat.

CustomerID CustomerName ContactName AddressCity PostalCode Country

29 Galería del gastrónomo Eduardo Saavedra Rambla de Cataluña, 23 Barcelona 8022


Spain

30 Godos Cocina Típica José Pedro Freyre C/ Romero, 33 Sevilla 41101 Spain

69 Romero y tomillo Alejandra Camino Gran Vía, 1 Madrid 28001 Spain

Kako da izbrojimo?

SELECT count (*) FROM Customers

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:

CustomerID CustomerName ContactName AddressCity PostalCode Country


29 Galería del gastrónomo Eduardo Saavedra Rambla de Cataluña, 23 Barcelona 8022
Spain

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

68 Richter Supermarkt Michael Holz Grenzacherweg 237 Genève 1203 Switzerland

69 Romero y tomillo Alejandra Camino Gran Vía, 1 Madrid 28001 Spain

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.

SELECT count (*)

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

WHERE City = 'Berlin' OR City = 'London';

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:

SELECT * FROM Customers


WHERE NOT Country = 'Spain';

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:

-- Primer sa uporednim operatorima

SELECT * FROM Customers

WHERE NOT Age = 30; -- Vraća sve zapise gde Age nije jednak 30

-- Primer sa logičkim operatorima

SELECT * FROM Orders

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

-- Kombinacija uporednih i logičkih operatora

SELECT * FROM Products

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.

Izaberite kupce koji ne počinju slovom 'A':

SELECT * FROM Customers

WHERE CustomerName NOT LIKE 'A%';

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'.

Izaberite kupce čiji CustomerID nije između 10 i 60:

SELECT * FROM Customers

WHERE CustomerID NOT BETWEEN 10 AND 60;


Ovaj SQL upit će izabrati sve zapise iz tabele Customers čiji CustomerID nije u rasponu od 10 do 60.
Korišćenjem NOT BETWEEN operatora sa rasponom 10 AND 60, dobijamo sve zapise čiji CustomerID nije
unutar tog raspona.

Kontrola 40 zapisa

Izaberite kupce koji nisu iz Pariza ili Londona:

SELECT * FROM Customers

WHERE City NOT IN ('Paris', 'London');

KOntrola 83 zapisa

SELECT count (*) FROM Customers

WHERE City NOT IN ('Paris', 'London')

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.

Izaberite kupce čiji CustomerID nije veći od 50:

SELECT * FROM Customers

WHERE NOT CustomerID > 50;

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:

SELECT count (*) FROM Customers

WHERE NOT CustomerID > 50

Izaberite kupce čiji CustomerID nije manji od 50:

SELECT * FROM Customers

WHERE NOT CustomerId < 50;

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

Izaberite sve zapise gde City NIJE "Berlin":

SELECT * FROM YourTableName

WHERE NOT City = 'Berlin';

Šta će vratiti upit:


SELECT * FROM Customers

WHERE City LIKE 's%';

Odgovor 12

SQL INSERT INTO izjava

SQL INSERT INTO izjava se koristi za dodavanje novih zapisa u tabelu.

Sintaksa INSERT INTO

Moguće je napisati INSERT INTO izjavu na dva načina:

Specifikujte i imena kolona i vrednosti koje želite da dodate:

INSERT INTO ime_tabele (kolona1, kolona2, kolona3, ...)

VALUES (vrednost1, vrednost2, vrednost3, ...);

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:

INSERT INTO ime_tabele

VALUES (vrednost1, vrednost2, vrednost3, ...);

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:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)

VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

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".

Jeste li primetili da nismo uneli nijedan broj u polje CustomerID?

Polje CustomerID je polje sa automatskim uvećanjem i biće generisano automatski kada se unese novi
zapis u tabelu.

Moguće je takođe uneti podatke samo u određene kolone.


Sledeći SQL upit će dodati novi zapis, ali će uneti podatke samo u kolone "CustomerName", "City" i
"Country" (CustomerID će biti automatski ažuriran):

Primer

INSERT INTO Customers (CustomerName, City, Country)

VALUES ('Cardinal', 'Stavanger', 'Norway');

Takođe je moguće uneti više redova u jednom upitu.

Da biste uneli više redova podataka, koristimo isti INSERT INTO statement, ali sa više vrednosti:

Primer

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)

VALUES

('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway'),

('Greasy Burger', 'Per Olsen', 'Gateveien 15', 'Sandnes', '4306', 'Norway'),

('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

SQL upit za dodavanje novog zapisa u tabelu "Customers":

INSERT INTO Customers (CustomerName, Address, City, PostalCode, Country)

VALUES ('Hekkan Burger', 'Gateveien 15', 'Sandnes', '4306', 'Norway');

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".

Šta je NULL vrednost?

Polje sa NULL vrednošću je polje bez vrednosti.

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!

Kako testirati za NULL vrednosti?

Nije moguće testirati NULL vrednosti sa uporednim operatorima, poput =, < ili <>.

Umesto toga, koristimo IS NULL i IS NOT NULL operatore.

Sintaksa za IS NULL

SELECT imena_kolona

FROM ime_tabele

WHERE ime_kolone IS NULL;

Sintaksa za IS NOT NULL

SELECT imena_kolona

FROM ime_tabele

WHERE ime_kolone IS NOT NULL;

Operator IS NULL koristi se za testiranje praznih vrednosti (NULL vrednosti).

Sledeći SQL upit izlistava sve kupce sa NULL vrednošću u polju "Address":

SELECT *

FROM Customers

WHERE Address IS NULL;

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

Sledeći SQL upit izlistava sve kupce sa vrednošću u polju "Address":

SELECT CustomerName, ContactName, Address

FROM Customers

WHERE Address IS NOT NULL;

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:

SELECT * FROM Customers

WHERE PostalCode IS NULL;

Ovaj SQL upit će izabrati sve zapise iz tabele Customers gde je kolona PostalCode prazna (NULL
vrednost).

SQL UPDATE Statement

SQL UPDATE izjava se koristi za modifikaciju postojećih zapisa u tabeli.

Sintaksa UPDATE

UPDATE ime_tabele

SET kolona1 = vrednost1, kolona2 = vrednost2, ...

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

SET ContactName = 'John Smith', City = 'New York'

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.

Ažuriranje više zapisa

To je WHERE klauzula koja određuje koliko će zapisa biti ažurirano.

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".

Upozorenje pri ažuriranju!

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

1. Ažurirajte kolonu City za sve zapise u tabeli Customers na 'Oslo':

___________ Customers

_________ City = 'Oslo';

Rešenje

UPDATE Customers

SET City = 'Oslo';

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

_________ City = 'Oslo'

_________ Country = 'Norway';

Rešenje

UPDATE Customers

SET City = 'Oslo'


WHERE Country = 'Norway';

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

_________ City = 'Oslo' ________

_________ = 'Norway'

WHERE CustomerID = 32;

Rešenje

UPDATE Customers

SET City = 'Oslo', Country = 'Norway'

WHERE Country = 'Norway';

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".

SQL DELETE izjava

SQL DELETE izjava se koristi za brisanje postojećih zapisa iz tabele.

Sintaksa DELETE

DELETE FROM ime_tabele WHERE uslov;

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!

SQL primer brisanja

Sledeći SQL upit briše kupca "Alfreds Futterkiste" iz tabele "Customers":

Primer

DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';

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.

Brisanje svih zapisa


Moguće je obrisati sve redove u tabeli bez brisanja same tabele. To znači da će struktura tabele, atributi
i indeksi ostati netaknuti:

DELETE FROM ime_tabele;

Sledeći SQL upit će obrisati sve redove iz tabele "Customers", ali će struktura tabele ostati netaknuta:

Primer

DELETE FROM Customers;

Brisanje tabele

Da biste potpuno obrisali tabelu, koristite DROP TABLE izjavu:

Primer

DROP TABLE Customers;

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

1. Brisanje svih zapisa iz tabele Customers gde je vrednost Country 'Norway':

__________ Customers

__________ Country = 'Norway';

Rešenje

DELETE FROM Customers WHERE Country = 'Norway';

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.

2. Brisanje svih zapisa iz tabele Customers:

__________ FROM Customers;

Rešenje

DELETE FROM Customers;

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.

SQL TOP, LIMIT, FETCH FIRST ili ROWNUM klauzula

SQL SELECT TOP klauzula


SELECT TOP klauzula se koristi da specificira broj zapisa koji će biti vraćeni.

SELECT TOP klauzula je korisna na velikim tabelama sa hiljadama zapisa. Vraćanje velikog broja zapisa
može uticati na performanse.

Primer

Izaberite samo prva 3 zapisa iz tabele Customers:

SELECT TOP 3 * FROM Customers;

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.

Evo nekoliko primera:

SQL Server / MS Access sintaksa sa SELECT TOP klauzulom:

SELECT TOP number|percent column_name(s)

FROM table_name

WHERE condition;

MySQL sintaksa sa LIMIT klauzulom:

SELECT column_name(s)

FROM table_name

WHERE condition

LIMIT number;

Oracle 12 sintaksa sa FETCH FIRST n ROWS ONLY:

SELECT column_name(s)

FROM table_name

ORDER BY column_name(s)

FETCH FIRST number ROWS ONLY;

Starija Oracle sintaksa sa ROWNUM:

SELECT column_name(s)

FROM table_name

WHERE ROWNUM <= number;


Starija Oracle sintaksa sa ROWNUM i ORDER BY:

SELECT *

FROM (SELECT column_name(s) FROM table_name ORDER BY column_name(s))

WHERE ROWNUM <= number;

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:

SELECT * FROM Customers

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:

SELECT * FROM Customers

FETCH FIRST 3 ROWS ONLY;

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:

SELECT TOP 50 PERCENT * FROM Customers;

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:

Oracle primer sa FETCH FIRST klauzulom:

SELECT * FROM Customers

FETCH FIRST 3 ROWS ONLY;

Ovaj SQL upit će izabrati samo prva 3 zapisa iz tabele Customers u Oracle bazi podataka.

SQL Server / MS Access primer sa TOP PERCENT klauzulom:


SELECT TOP 50 PERCENT * FROM Customers;

Ovaj SQL upit će izabrati prvih 50% zapisa iz tabele Customers u SQL Server ili MS Access bazi podataka.

SQL AGREGATNE FUNKCIJE

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.

Najčešće korišćene SQL agregatne funkcije su:

MIN() - vraća najmanju vrednost u izabranoj koloni

MAX() - vraća najveću vrednost u izabranoj koloni

COUNT() - vraća broj redova u skupu

SUM() - vraća ukupnu sumu numeričke kolone

AVG() - vraća prosečnu vrednost numeričke kolone

Agregatne funkcije ignorišu NULL vrednosti (osim za COUNT()).

Proći ćemo kroz navedene agregatne funkcije u narednim poglavljima.

SQL MIN() i MAX() Funkcije

SQL MIN() i MAX() Funkcije

MIN() funkcija vraća najmanju vrednost izabrane kolone.

MAX() funkcija vraća najveću vrednost izabrane kolone.

Primer sa MIN()

Pronađi najnižu cenu u koloni Price:

SELECT MIN(Price)

FROM Products;

Primer sa MAX()

Pronađi najvišu cenu u koloni Price:


SELECT MAX(Price)

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

SELECT MIN(Price) AS NajmanjaCena

FROM Products;

Koristi MIN() sa GROUP BY

Ovde koristimo MIN() funkciju i GROUP BY klauzulu da bismo dobili najmanju cenu za svaku kategoriju u
tabeli Products:

Primer

SELECT MIN(Price) AS NajmanjaCena, CategoryID

FROM Products

GROUP BY CategoryID;

Više ćete naučiti o GROUP BY klauzuli kasnije u ovom tutorialu.

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

WHERE Price = (SELECT MIN(Price) FROM Products);

ProductI ProductName SupplierID CategoryID Unit Price


D
33 Geitost 15 4 500 2.5
g

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

WHERE Price = (SELECT MAX(Price) 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

WHERE Price = 18;

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

SQL SUM() Funkcija

SQL SUM() Funkcija

SUM() funkcija vraća ukupnu sumu numeričke kolone.

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.

Možete dodati WHERE klauzulu da biste naveli uslove:

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

Dajte imenovanu kolonu koristeći AS ključnu reč.

Primer

SELECT SUM(Quantity) AS total

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

SELECT OrderID, SUM(Quantity) AS [Ukupna Količina]

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

Parametar unutar SUM() funkcije može biti i izraz.


Ako pretpostavimo da svaki proizvod u koloni OrderDetails košta 10 dolara, možemo pronaći ukupnu
zaradu u dolarima množeći svaku količinu sa 10:

Primer

Koristite izraz unutar SUM() funkcije:

SELECT SUM(Quantity * 10)

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

Spojite OrderDetails sa Products, i koristite SUM() da biste pronašli ukupan iznos:

SELECT SUM(Price * Quantity)

FROM OrderDetails

LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID;

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().

Evo kako bi izgledao SQL upit:

SELECT SUM(Price)

FROM Products;

Ovaj SQL upit će izračunati zbir svih vrednosti u koloni Price u tabeli Products.

SQL AVG() Funkcija

SQL AVG() funkcija vraća prosečnu vrednost numeričke kolone.

Primer

Pronađite prosečnu cenu svih proizvoda:

SELECT AVG(Price)

FROM Products;
Napomena: NULL vrednosti se ignorišu.

Sintaksa

SELECT AVG(column_name)

FROM table_name

WHERE condition;

Dodavanjem WHERE klauzule možemo specificirati uslove za izračunavanje prosečne vrednosti.

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

Da bismo dali imenu kolone AVG vrednosti, koristimo AS ključnu reč.

Primer:

SELECT AVG(Price) AS [average price]

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:

SELECT * FROM Products

WHERE price > (SELECT AVG(price) FROM Products);

ProductID ProductName SupplierID CategoryID Unit Price


7 Uncle Bob's Organic Dried 3 7 12 - 1 lb pkgs. 30
Pears
8 Northwoods Cranberry Sauce 3 2 12 - 12 oz jars 40
9 Mishi Kobe Niku 4 6 18 - 500 g pkgs. 97
10 Ikura 4 8 12 - 200 ml jars 31
12 Queso Manchego La Pastora 5 4 10 - 500 g pkgs. 38
17 Alice Mutton 7 6 20 - 1 kg tins 39
18 Carnarvon Tigers 7 8 16 kg pkg. 62.5
20 Sir Rodney's Marmalade 8 3 30 gift boxes 81
26 Gumbär Gummibärchen 11 3 100 - 250 g bags 31.23
27 Schoggi Schokolade 11 3 100 - 100 g pieces 43.9
28 Rössle Sauerkraut 12 7 25 - 825 g cans 45.6
29 Thüringer Rostbratwurst 12 6 50 bags x 30 sausgs. 123.79
32 Mascarpone Fabioli 14 4 24 - 200 g pkgs. 32
38 Côte de Blaye 18 1 12 - 75 cl bottles 263.5
43 Ipoh Coffee 20 1 16 - 500 g tins 46
51 Manjimup Dried Apples 24 7 50 - 300 g pkgs. 53
53 Perth Pasties 24 6 48 pieces 32.8
56 Gnocchi di nonna Alice 26 5 24 - 250 g pkgs. 38
59 Raclette Courdavault 28 4 5 kg pkg. 55
60 Camembert Pierrot 28 4 15 - 300 g rounds 34
62 Tarte au sucre 29 3 48 pies 49.3
63 Vegie-spread 7 2 15 - 625 g jars 43.9
64 Wimmers gute Semmelknödel 12 5 20 bags x 4 pieces 33.25
69 Gudbrandsdalsost 15 4 10 kg pkg. 36
72 Mozzarella di Giovanni 14 4 24 - 200 g pkgs. 34.8
Takođe, možemo koristiti AVG() funkciju zajedno sa GROUP BY klauzulom da bismo izračunali prosečnu
cenu za svaku kategoriju u tabeli Products.

Primer:

SELECT AVG(Price) AS AveragePrice, CategoryID

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

WHERE City LIKE '%a%';

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

WHERE City LIKE '%a';

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".

SQL LIKE Operator

Operator LIKE se koristi u WHERE klauzuli kako bi se pretražio određeni obrazac u koloni.

Postoje dva džokera često korišćena u kombinaciji sa LIKE operatorom:

Procenat znak % predstavlja nula, jedan ili više karaktera

Donja crta znak _ predstavlja jedan, pojedinačni karakter

Više ćete naučiti o džokerima u sledećem poglavlju.

Primer

Izaberite sve kupce koji počinju slovom "a":

SELECT * FROM Customers

WHERE CustomerName LIKE 'a%';

sintaksni oblik za korišćenje LIKE operatora u SQL-u. Evo primer kako se to koristi:

SELECT column1, column2, ...

FROM table_name

WHERE columnN LIKE 'pattern';


Gde column1, column2, ... predstavljaju kolone koje želite da izaberete, table_name je ime tabele iz koje
želite da izaberete podatke, columnN je kolona u kojoj tražite određeni obrazac, a pattern je obrazac koji
tražite.

CustomerID CustomerName ContactNam Address City PostalCode Country


e
1 Alfreds John Smith Obere Str. New York 12209 Germany
Futterkiste 57
2 Ana Trujillo Ana Trujillo Avda. de la México 5021 Mexico
Emparedados y Constitución D.F.
helados 2222
3 Antonio Antonio Mataderos México 5023 Mexico
Moreno Moreno 2312 D.F.
Taquería
4 Around the Thomas 120 London WA1 1DP UK
Horn Hardy Hanover Sq.

način korišćenja _ wildcard karaktera u SQL-u

SELECT * FROM Customers

WHERE city LIKE 'L_nd__';

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.

CustomerID CustomerName ContactName Address City PostalCode Country


4 Around the Thomas Hardy 120 Hanover London WA1 1DP UK
Horn Sq.
11 B's Beverages Victoria Fauntleroy London EC2 5NT UK
Ashworth Circus
16 Consolidated Elizabeth Berkeley London WX1 6LT UK
Holdings Brown Gardens 12
Brewery
19 Eastern Ann Devon 35 King London WX3 6FW UK
Connection George
53 North/South Simon South House London SW7 1RZ UK
Crowther 300
Queensbridge
72 Seven Seas Hari Kumar 90 Wadhurst London OX15 4NB UK
Imports Rd.
75 Split Rail Beer Art P.O. Box 555 Lander 82520 USA
& Ale Braunschweige
r

način korišćenja % wildcard karaktera u SQL-u.


U prvom primeru, tražimo sve kupce iz grada koji sadrže slovo 'L' bilo gde u imenu grada. U drugom
primeru, tražimo sve kupce čije ime počinje sa 'La'. Oba primera su dobra demonstracija korišćenja
wildcard karaktera u SQL upitima.

SQL upit koji će vratiti sve kupce čiji grad sadrži slovo 'L'.

SELECT * FROM Customers

WHERE city LIKE '%L%';

Sledeći SQL upit trebalo bi da vrati sve kupce čije ime počinje sa 'La'.

CustomerID CustomerNam ContactName Address City PostalCode Country


e
40 La corne Daniel Tonini 67, avenue Versailles 78000 France
d'abondance de
l'Europe
41 La maison Annette 1 rue Toulouse 31000 France
d'Asie Roulet Alsace-
Lorraine
42 Laughing Yoshi 1900 Oak Vancouver V3F 2K1 Canada
Bacchus Wine Tannamuri St.
Cellars
43 Lazy K Kountry John Steel 12 Walla 99362 USA
Store Orchestra Walla
Terrace

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':

SELECT * FROM Customers

WHERE CustomerName LIKE 'a%' OR CustomerName LIKE '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

Vrati sve kupce čije ime se završava sa 'a':

SELECT * FROM Customers

WHERE CustomerName LIKE '%a';

Možete takođe kombinovati "počinje sa" i "završava se sa":


Primer

Vrati sve kupce čije ime počinje sa "b" i završava se sa "s":

SELECT * FROM Customers

WHERE CustomerName LIKE 'b%s';

CustomerID CustomerName ContactName Address City PostalCode Country


7 Blondel père et Frédérique 24, place Strasbourg 67000 France
fils Citeaux Kléber
8 Bólido Comidas Martín C/ Araquil, Madrid 28023 Spain
preparadas Sommer 67
11 B's Beverages Victoria Fauntleroy London EC2 5NT UK
Ashworth Circus

Da biste vratili zapise koji sadrže određeno slovo ili frazu, dodajte % i pre i posle slova ili fraze.

Primer

Vrati sve kupce koji sadrže frazu 'or'

SELECT * FROM Customers

WHERE CustomerName LIKE '%or%';

Kombinujte zamenske znakove

Svaki zamenski znak, poput % i _ , može se koristiti u kombinaciji s drugim zamenskim znakovima.

Primer

Vrati sve kupce koji počinju sa "a" i imaju bar 3 karaktera:

SELECT * FROM Customers

WHERE CustomerName LIKE 'a__%';

Primer

Vrati sve kupce koji imaju "r" na drugom mestu:

SELECT * FROM Customers

WHERE CustomerName LIKE '_r%';

Bez zamenskih znakova


Ako nema zamenskih znakova navedenih, fraza mora da se poklapa tačno da bi se vratio rezultat.

Primer

Vrati sve kupce iz Španije:

SELECT * FROM Customers

WHERE Country LIKE 'Spain';

Vežbe

izaberete sve zapise gde vrednost kolone "City" počinje slovom "a":

SELECT * FROM Customers

WHERE City LIKE 'a%';

izaberete sve zapise gde vrednost kolone "City" završava slovom "a":

SELECT * FROM Customers

WHERE City LIKE '%a';

izaberete sve zapise gde vrednost kolone "City" sadrži slovo "a":

SELECT * FROM Customers

WHERE City LIKE '%a%';

SQL upit da biste izabrali sve zapise gde vrednost kolone "City" počinje slovom "a" i završava se slovom
"b":

SELECT * FROM Customers

WHERE City LIKE 'a%b';

Da biste izabrali sve zapise gde vrednost kolone "City" ne počinje slovom "a", možete koristiti sledeći
SQL upit:

SELECT * FROM Customers

WHERE NOT City LIKE 'a%';

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 nula ili više karaktera.

_: Predstavlja jedan karakter.


[]: Predstavlja bilo koji jedan karakter unutar uglatih zagrada.

^: Predstavlja bilo koji karakter koji nije naveden unutar uglatih zagrada.

-: Predstavlja bilo koji jedan karakter unutar specificiranog opsega.

{}: Predstavlja bilo koji escape karakter.

Na primer, ako želite da vratite sve kupce čije ime počinje slovom 'a', možete koristiti % kao wildcard:

SELECT * FROM Customers

WHERE CustomerName LIKE 'a%';

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':

SELECT * FROM Customers

WHERE CustomerName LIKE 'a%';

CustomerID CustomerName ContactNam Address City PostalCode Country


e
1 Alfreds John Smith Obere Str. New York 12209 Germany
Futterkiste 57
2 Ana Trujillo Ana Trujillo Avda. de la México 5021 Mexico
Emparedados y Constitución D.F.
helados 2222
3 Antonio Antonio Mataderos México 5023 Mexico
Moreno Moreno 2312 D.F.
Taquería
4 Around the Thomas 120 London WA1 1DP UK
Horn Hardy Hanover Sq.

Evo pregleda specijalnih karaktera džokera u SQL-u:

%: Predstavlja nula ili više karaktera.

_: Predstavlja jedan karakter.

[]: Predstavlja bilo koji jedan karakter koji se nalazi unutar uglatih zagrada.

^: Predstavlja bilo koji karakter koji se ne 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.

Evo primera korišćenja džoker karaktera %:

SELECT * FROM Customers

WHERE CustomerName LIKE '%es';

Ovaj upit će vratiti sve korisnike čija se imena završavaju na uzorak 'es'.

CustomerID CustomerName ContactName Address City PostalCode Country


11 B's Beverages Victoria Fauntleroy London EC2 5NT UK
Ashworth Circus
23 Folies Martine 184, Lille 59000 France
gourmandes Rancé chaussée
de Tournai
31 Gourmet André Av. Brasil, Campinas 04876-786 Brazil
Lanchonetes Fonseca 442
34 Hanari Carnes Mario Pontes Rua do Rio de 05454-876 Brazil
Paço, 67 Janeiro
47 LINO- Felipe Ave. 5 de I. de 4980 Venezuela
Delicateses Izquierdo Mayo Margarita
Porlamar
76 Suprêmes Pascale Boulevard Charleroi B-6000 Belgium
délices Cartrain Tirou, 255

Evo primera korišćenja džoker karaktera %:

SELECT * FROM Customers

WHERE CustomerName LIKE '%mer%';

Ovaj upit će vratiti sve korisnike čija imena sadrže uzorak 'mer' bilo gde u imenu.

CustomerID CustomerName ContactNam Address City PostalCode Country


e
13 Centro Francisco Sierras de México D.F. 5022 Mexico
comercial Chang Granada
Moctezuma 9993
46 LILA- Carlos Carrera Barquisimet 3508 Venezuela
Supermercado González 52 con o
Ave.
Bolívar
#65-98
Llano
Largo
69 Romero y Alejandra Gran Vía, Madrid 28001 Spain
tomillo Camino 1
81 Tradição Anabela Av. Inês São Paulo 05634-030 Brazil
Hipermercados Domingues de
Castro,
414

Evo primera korišćenja džoker karaktera _:

SELECT * FROM Customers

WHERE City LIKE '_ondon';

Ovaj upit će vratiti sve korisnike čiji grad počinje bilo kojim karakterom, a zatim sledi "ondon".

CustomerID CustomerName ContactName Address City PostalCode Country


4 Around the Thomas 120 Hanover London WA1 1DP UK
Horn Hardy Sq.
11 B's Beverages Victoria Fauntleroy London EC2 5NT UK
Ashworth Circus
16 Consolidated Elizabeth Berkeley London WX1 6LT UK
Holdings Brown Gardens 12
Brewery
19 Eastern Ann Devon 35 King London WX3 6FW UK
Connection George
53 North/South Simon South House London SW7 1RZ UK
Crowther 300
Queensbridg
e
72 Seven Seas Hari Kumar 90 Wadhurst London OX15 4NB UK
Imports Rd.

Evo primera korišćenja džoker karaktera _:

SELECT * FROM Customers

WHERE City LIKE 'L___on';

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".

Evo primera korišćenja džoker karaktera [ ]:

SELECT * FROM Customers

WHERE CustomerName LIKE '[bsp]%';

Ovaj upit će vratiti sve korisnike čije ime počinje sa slovima "b", "s" ili "p".

Evo primera korišćenja karaktera džokera -:


SELECT * FROM Customers

WHERE CustomerName LIKE '[a-f]%';

Ovaj upit će vratiti sve korisnike čije ime počinje sa slovima od "a" do "f".

Evo primera kombinovanja karaktera džokera:

SELECT * FROM Customers

WHERE CustomerName LIKE 'a__%';

Ovaj upit će vratiti sve korisnike čije ime počinje slovom "a" i ima barem tri karaktera u dužini.

CustomerID CustomerName ContactNam Address City PostalCode Country


e
1 Alfreds John Smith Obere Str. New York 12209 Germany
Futterkiste 57
2 Ana Trujillo Ana Trujillo Avda. de la México 5021 Mexico
Emparedados y Constitución D.F.
helados 2222
3 Antonio Antonio Mataderos México 5023 Mexico
Moreno Moreno 2312 D.F.
Taquería
4 Around the Thomas 120 London WA1 1DP UK
Horn Hardy Hanover Sq.

Evo primera bez upotrebe karaktera džokera:

SELECT * FROM Customers

WHERE Country LIKE 'Spain';

Ovaj upit će vratiti sve korisnike iz Španije jer se traži tačno podudaranje sa navedenim izrazom "Spain".

CustomerID CustomerName ContactName Address City PostalCode Country


8 Bólido Comidas Martín C/ Araquil, Madrid 28023 Spain
preparadas Sommer 67
22 FISSA Fabrica Diego Roel C/ Madrid 28034 Spain
Inter. Moralzarzal,
Salchichas S.A. 86
29 Galería del Eduardo Rambla de Barcelona 8022 Spain
gastrónomo Saavedra Cataluña,
23
30 Godos Cocina José Pedro C/ Romero, Sevilla 41101 Spain
Típica Freyre 33
69 Romero y Alejandra Gran Vía, 1 Madrid 28001 Spain
tomillo Camino
Vežbe

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 %:

SELECT * FROM Customers

WHERE City LIKE '_a%';

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 %:

SELECT * FROM Customers

WHERE City LIKE '[acs]%';

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 %:

SELECT * FROM Customers

WHERE City LIKE '[a-f]%';

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:

SELECT * FROM Customers

WHERE City LIKE '[^acf]%';

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:

SELECT * FROM Customers

WHERE Country IN ('Norway', 'France');

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:

SELECT * FROM Customers

WHERE Country NOT IN ('Norway', 'France');


Ovaj upit će vratiti sve zapise iz tabele Customers gde Country nije ni "Norway" ni "France".

SQL IN Operator

SQL IN operator vam omogućava da specificirate više vrednosti u WHERE klauzuli.

SQL IN operator je skraćenica za višestruke OR uslove.

Primer

Vratite sve klijente iz 'Nemačke', 'Francuske' ili 'Velike Britanije'

SELECT * FROM Customers

WHERE Country IN ('Nemačka', 'Francuska', 'Velika Britanija');

Sintaksa

SELECT naziv_kolone(kolona_ime)

FROM ime_tabele

WHERE kolona_ime IN (vrednost1, vrednost2, ...);

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':

SELECT * FROM Customers

WHERE Country NOT IN ('Nemačka', 'Francuska', 'Velika Britanija');

IN (SELECT)

Možete takođe koristiti IN sa podupitom u WHERE klauzuli.

Pomoću podupita možete vratiti sve zapise iz glavnog upita koji su prisutni u rezultatu podupita.

Primer

Vratite sve kupce koji imaju porudžbinu u tabeli Porudžbine:

SELECT * FROM Kupci

WHERE KupacID IN (SELECT KupacID FROM Porudžbine);

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.

SELECT * FROM Customers

WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);

Operator SQL BETWEEN

Operator BETWEEN bira vrednosti unutar datog opsega. Vrednosti mogu biti brojevi, tekst ili datumi.

Operator BETWEEN je uključujući: početne i krajnje vrednosti su uključene.

Primer

Izaberi sve proizvode sa cenom između 10 i 20:

SELECT * FROM Products

WHERE Price BETWEEN 10 AND 20;

Sintaksa

SELECT ime_kolone(ime_kolona)

FROM ime_tabele

WHERE ime_kolone BETWEEN vrednost1 AND vrednost2;

ProductID ProductName SupplierID CategoryID Unit Price


1 Chais 1 1 10 boxes x 20 18
bags
2 Chang 1 1 24 - 12 oz 19
bottles
3 Aniseed Syrup 1 2 12 - 550 ml 10
bottles
15 Genen Shouyu 6 2 24 - 250 ml 15.5
bottles
16 Pavlova 7 3 32 - 500 g 17.45
boxes
21 Sir Rodney's 8 3 24 pkgs. x 4 10
Scones pieces
25 NuNuCa Nuß- 11 3 20 - 450 g 14
Nougat-Creme glasses
31 Gorgonzola 14 4 12 - 100 g pkgs 12.5
Telino
34 Sasquatch Ale 16 1 24 - 12 oz 14
bottles
35 Steeleye Stout 16 1 24 - 12 oz 18
bottles
36 Inlagd Sill 17 8 24 - 250 g jars 19
39 Chartreuse 18 1 750 cc per 18
verte bottle
40 Boston Crab 19 8 24 - 4 oz tins 18.4
Meat
42 Singaporean 20 5 32 - 1 kg pkgs. 14
Hokkien Fried
Mee
44 Gula Malacca 20 2 20 - 2 kg bags 19.45
46 Spegesild 21 8 4 - 450 g 12
glasses
48 Chocolade 22 3 10 pkgs. 12.75
49 Maxilaku 23 3 24 - 50 g pkgs. 20
50 Valkoinen 23 3 12 - 100 g bars 16.25
suklaa
57 Ravioli Angelo 26 5 24 - 250 g 19.5
pkgs.
58 Escargots de 27 8 24 pieces 13.25
Bourgogne
66 Louisiana Hot 2 2 24 - 8 oz jars 17
Spiced Okra
67 Laughing 16 1 24 - 12 oz 14
Lumberjack bottles
Lager
68 Scottish 8 3 10 boxes x 8 12.5
Longbreads pieces
70 Outback Lager 7 1 24 - 355 ml 15
bottles
73 Röd Kaviar 17 8 24 - 150 g jars 15
74 Longlife Tofu 4 7 5 kg pkg. 10
76 Lakkalikööri 23 1 500 ml 18
77 Original 12 2 12 boxes 13
Frankfurter
grüne Soße

NOT BETWEEN

Za prikazivanje proizvoda van opsega prethodnog primera, koristite NOT BETWEEN:

Primer

SELECT * FROM Products

WHERE Price NOT BETWEEN 10 AND 20;


BETWEEN sa IN

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

SELECT * FROM Products

WHERE Price BETWEEN 10 AND 20

AND CategoryID IN (1, 2, 3);

Između tekstualnih vrednosti

Sledeći SQL statement bira sve proizvode sa ProductName koji su abecedno između Carnarvon Tigers i
Mozzarella di Giovanni:

Primer

SELECT * FROM Products

WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'

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

SELECT * FROM Products

WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning"

ORDER BY ProductName;

Nije između tekstualnih vrednosti

Sledeći SQL statement bira sve proizvode sa ProductName koji nisu između Carnarvon Tigers i
Mozzarella di Giovanni:

Primer

SELECT * FROM Products

WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'


ORDER BY ProductName;

Između datuma

Sledeći SQL statement bira sve porudžbine sa OrderDate između '01-July-1996' i '31-July-1996':

Primer

SELECT * FROM Orders

WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;

ILI:

Primer

SELECT * FROM Orders

WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

prevođenje teksta u datum

SELECT * FROM Orders

WHERE date(OrderDate) BETWEEN '1996-07-01' AND '1996-07-31';

ili umesto between

SELECT * FROM Orders

WHERE date(OrderDate) >= '1996-07-01' AND OrderDate <= '1996-07-31';

Vežbe

1. Koristite operator BETVEEN da biste izabrali sve zapise u kojima je vrednost kolone Cena između 10 i
20.

Rešenje

SELECT * FROM Products

WHERE Price BETWEEN 10 AND 20;

2. Koristite operator BETVEEN da biste izabrali sve zapise u kojima vrednost kolone Cena NIJE između 10
i 20.

Rešenje

SELECT * FROM Products

WHERE Price NOT BETWEEN 10 AND 20;


3. Koristite operator BETVEEN da biste izabrali sve zapise u kojima je vrednost kolone ProductName po
abecednom redu između „Geitost“ i „Pavlova“.

Rešenje

SELECT * FROM Products

WHERE ProductName BETWEEN 'Geitost' AND 'Pavlova';

You might also like