Oct 29, 2023

Apache HTTP Server

Apache HTTP Server, često nazivan samo Apache, je besplatan i otvorenog koda web server softver koji omogućava distribuciju web sadržaja putem interneta. Ovaj server je razvijen od strane Apache Software Foundation i dostupan je za različite platforme, uključujući Unix, Linux, Windows i mnoge druge.

Instalacija Apache Servera

Za instalaciju Apache servera na Linux sistemu, možete koristiti paketni menadžer. Na primer, na Debian-based sistemima, koristite komandu:

sudo apt-get install apache2

Na Red Hat-based sistemima, koristite:

sudo yum install httpd

Nakon instalacije, možete pokrenuti Apache server sa:

sudo systemctl start apache2    # na Debian-based sistemima

sudo systemctl start httpd     # na Red Hat-based sistemima

Gde se nalazi konfiguracija Apache Servera?

Konfiguracija Apache servera se nalazi u konfiguracionim datotekama koje se obično nalaze u direktorijumu /etc/apache2/ na Debian-based sistemima ili /etc/httpd/ na Red Hat-based sistemima.

Osnovna konfiguracija se nalazi u datoteci httpd.conf, dok se specifične postavke za svaki veb sajt obično stavljaju u datoteke u direktorijumima /etc/apache2/sites-available/ ili /etc/httpd/conf.d/.

Instalacija Apache dokumentacije

Apache dokumentacija se obično instalira kao zaseban paket. Na Debian-based sistemima, možete koristiti sledeću komandu za instalaciju paketa apache2-doc:
sudo apt-get install apache2-doc w3m
Na Red Hat-based sistemima, možete koristiti sličan pristup da biste instalirali paket httpd-manual:
sudo yum install httpd-manual w3m

Pristup dokumentaciji:
Nakon uspešne instalacije, dokumentacija će biti smeštena u odgovarajući direktorijum. Obično se nalazi u /usr/share/doc/apache2/ na Debian-based sistemima ili /usr/share/doc/httpd/ na Red Hat-based sistemima.

Da biste pristupili dokumentaciji, otvorite web pregledač i upišite URL koji vodi do lokalnih Apache dokumentacija. Na primer:
http://localhost/manual/

Ili iz comandne linije uz pomoć w3m tekstualnog web browsera:
w3m http://localhost/manual/

Ovo će vas odvesti na početnu stranicu Apache dokumentacije. Odavde možete istraživati različite delove dokumentacije kako biste pronašli informacije koje su vam potrebne.

Dokumentacija obuhvata različite teme, uključujući konfiguraciju servera, upravljanje veb sajtovima, upravljanje modulima i mnoge druge korisne informacije.

Napomena: Lokacija dokumentacije može se razlikovati u zavisnosti od distribucije Linux-a i verzije Apache servera koju koristite. Preporučujem da proverite tačnu putanju na vašem sistemu ukoliko se razlikuje.

Provera statusa Apache servisa

Koristite sledeću komandu na komandnoj liniji da biste proverili status Apache servera na većini Linux sistema:
systemctl status apache2   # Na Debian/Ubuntu sistemima
Ako koristite Red Hat-based sistem, koristite:
systemctl status httpd     # Na Red Hat/CentOS sistemima
Ova komanda će prikazati informacije o trenutnom statusu Apache servera, uključujući da li je server pokrenut ili zaustavljen, aktivni procesi i druge relevantne informacije.

Status Apache servera se može proveriti i na stranici:
w3m http://localhost/server-status

Smještanje HTML stranica na Apache serveru - CentOS

Na CentOS operativnom sistemu, HTML stranice i drugi resursi za Apache web server obično se smeštaju u direktorijum koji se naziva "DocumentRoot". Evo standardnih putanja:

  1. Osnovni direktorijum za web server konfiguraciju: /etc/httpd/
  2. DocumentRoot za glavni sajt: /var/www/html/
  3. Dodatni sajtovi: Mogu imati svoje DocumentRoot direktorijume u /var/www/.

Kada dodate HTML datoteke u odgovarajući DocumentRoot direktorijum, možete ih pregledati preko web pregledača unosom IP adrese ili domena servera u adresnu traku.

Smještanje HTML stranica na Apache serveru - Ubuntu

Na Ubuntu operativnom sistemu, HTML stranice i drugi resursi za Apache web server obično se smeštaju u direktorijum koji se naziva "DocumentRoot". Evo standardnih putanja:

  1. Osnovni direktorijum za web server konfiguraciju: /etc/apache2/
  2. DocumentRoot za glavni sajt: /var/www/html/
  3. Dodatni sajtovi: Mogu imati svoje DocumentRoot direktorijume u /var/www/.

Kada dodate HTML datoteke u odgovarajući DocumentRoot direktorijum, možete ih pregledati preko web pregledača unosom IP adrese ili domena servera u adresnu traku.

VirtualHost

VirtualHost (virtuelni host) je koncept koji vam omogućava da na istom fizičkom web serveru hostujete više web stranica ili aplikacija, svaka sa svojim vlastitim postavkama i domenom. To vam omogućava da razdvojite različite sajtove ili aplikacije na istom serveru. Virtualni hostovi se često koriste za hosting više domena na jednom serveru ili za razvoj i testiranje različitih web aplikacija na istom serveru.

Evo kako se konfiguriše VirtualHost u Apache web serveru, zajedno s primerima:

Kreiranje konfiguracionih datoteka za VirtualHost:

Konfiguracijske datoteke za VirtualHost obično se smeštaju u direktorijumu /etc/apache2/sites-available/ na većini Linux sistema. Možete kreirati posebne datoteke za svaki VirtualHost.

Primeri VirtualHost konfiguracija:

a. Jednostavan primer za hosting više domena:

Ovaj primer pokazuje kako hostovati dva različita domena na istom serveru. Kreirajte dve odvojene konfiguracijske datoteke za svaki domen.

Konfiguracijska datoteka za prvi-domen.com (/etc/apache2/sites-available/prvi-domen.com.conf):

<VirtualHost *:80>

    ServerAdmin webmaster@prvi-domen.com

    ServerName prvi-domen.com

    DocumentRoot /var/www/prvi-domen

</VirtualHost>

Konfiguracijska datoteka za drugi-domen.com (/etc/apache2/sites-available/drugi-domen.com.conf):

<VirtualHost *:80>

    ServerAdmin webmaster@drugi-domen.com

    ServerName drugi-domen.com

    DocumentRoot /var/www/drugi-domen

</VirtualHost>

Zatim aktivirajte ove konfiguracije koristeći naredbu:

sudo a2ensite prvi-domen.com.conf

sudo a2ensite drugi-domen.com.conf

Nakon toga, ponovo pokrenite Apache server (sudo systemctl restart apache2).


b. Primer za hosting web aplikacija sa različitim domenima i SSL podrškom:

Ovaj primer prikazuje kako hostovati dve web aplikacije sa različitim domenama i SSL/TLS podrškom.

Konfiguracijska datoteka za prvi-aplikacija.com (/etc/apache2/sites-available/prvi-aplikacija.com.conf):

<VirtualHost *:80>

    ServerAdmin webmaster@prvi-aplikacija.com

    ServerName prvi-aplikacija.com

    DocumentRoot /var/www/prvi-aplikacija

</VirtualHost>


<VirtualHost *:443>

    ServerAdmin webmaster@prvi-aplikacija.com

    ServerName prvi-aplikacija.com

    DocumentRoot /var/www/prvi-aplikacija

    SSLEngine on

    SSLCertificateFile /putanja/do/ssl-sertifikata.crt

    SSLCertificateKeyFile /putanja/do/privatnog-kljuca.key

</VirtualHost>

Konfiguracijska datoteka za drugi-aplikacija.com (/etc/apache2/sites-available/drugi-aplikacija.com.conf):


<VirtualHost *:80>

    ServerAdmin webmaster@drugi-aplikacija.com

    ServerName drugi-aplikacija.com

    DocumentRoot /var/www/drugi-aplikacija

</VirtualHost>


<VirtualHost *:443>

    ServerAdmin webmaster@drugi-aplikacija.com

    ServerName drugi-aplikacija.com

    DocumentRoot /var/www/drugi-aplikacija

    SSLEngine on

    SSLCertificateFile /putanja/do/ssl-sertifikata.crt

    SSLCertificateKeyFile /putanja/do/privatnog-kljuca.key

</VirtualHost>

Aktivirajte ove konfiguracije i instalirajte SSL sertifikate za oba domena kako bi omogućili HTTPS.

Nakon podešavanja VirtualHost konfiguracija, ne zaboravite ponovo pokrenuti Apache server kako bi promene stupile na snagu. VirtualHost omogućava hosting više domena i aplikacija na istom serveru, pružajući izolaciju i prilagodljivost za svaku od njih.


Moduli

Apache HTTP Server dolazi s velikim brojem modula koji proširuju njegove funkcionalnosti i omogućavaju konfiguraciju za različite potrebe. Evo nekoliko klasičnih i često korišćenih Apache modula:
  • mod_rewrite: Ovaj modul omogućava konfiguraciju URL preusmeravanja i promene URL struktura na serveru. Koristi se za implementaciju URL preusmeravanja i prilagođavanje URL-ova.
  • mod_ssl: Ovaj modul omogućava podršku za SSL i TLS enkripciju, čime se omogućava siguran prenos podataka preko HTTPS protokola.
  • mod_proxy: Modul za proksi server koji omogućava Apache serveru da deluje kao proksi server. Može se koristiti za preusmeravanje zahteva prema drugim serverima, kao što su aplikacioni serveri.
  • mod_auth: Omogućava autentifikaciju korisnika. Podržava različite metode autentifikacije, kao što su osnovna autentifikacija, autentifikacija sertifikatom i drugi.
  • mod_security: Modul za zaštitu od napada na web aplikacije (WAF). Pomaže u zaštiti servera i aplikacija od različitih vrsta napada.
  • mod_cache: Omogućava keširanje web sadržaja kako bi se smanjilo opterećenje servera i ubrzao odgovor na zahteve klijenata.
  • mod_gzip: Modul za kompresiju sadržaja koji omogućava smanjenje veličine prenosa podataka između servera i klijenta, čime se poboljšava brzina učitavanja stranica.
  • mod_dav: Modul za podršku WebDAV (Web Distributed Authoring and Versioning) protokolu, koji omogućava rad sa fajlovima i resursima na daljinu.
  • mod_cgi: Omogućava izvršavanje CGI skripti na serveru. Ovo je korisno za dinamičke web aplikacije napisane u jezicima poput Perl, Python i drugih.
  • mod_userdir: Omogućava korisnicima da hostuju svoje veb stranice u svojim ličnim direktorijumima na serveru.
  • mod_include: Omogućava uključivanje dinamičkih elemenata u HTML stranice, kao što su SSI (Server Side Includes).
  • mod_headers: Ovaj modul omogućava konfiguraciju HTTP zaglavlja, što je korisno za kontrolu keširanja, sigurnosti i drugih aspekata HTTP komunikacije.
Ovo su samo neki od često korišćenih modula za Apache HTTP Server. 

A2 komande

a2dismod i a2enmod komande

a2dismod i a2enmod su komande koje se često koriste na Debian-based sistemima (uključujući Debian i Ubuntu) za upravljanje Apache modulima. Ove komande omogućavaju lako omogućavanje (enable) i onemogućavanje (disable) pojedinačnih modula na Apache HTTP Serveru. Evo kako se koriste i primeri:

a2enmod (Apache2 Enable Module):
Ova komanda se koristi za omogućavanje (aktiviranje) Apache modula. Kada omogućite modul, on postaje deo aktivne konfiguracije servera i može se koristiti za razne svrhe, poput autentifikacije, kompresije, keširanja i drugih.

Primer:
sudo a2enmod rewrite
Ovaj primer omogućava modul rewrite, što je korisno za konfiguraciju URL preusmeravanja i promene URL struktura na serveru.

a2dismod (Apache2 Disable Module):
Ova komanda se koristi za onemogućavanje (deaktiviranje) Apache modula. Kada onemogućite modul, on se izbacuje iz aktivne konfiguracije servera i više neće biti deo obrade zahteva na serveru.

Primer:
sudo a2dismod status
Ovaj primer onemogućava modul status, koji je odgovoran za server-status stranicu, kao što smo prethodno spomenuli.

Nakon što koristite a2enmod ili a2dismod, obavezno ponovo pokrenite Apache server kako biste primenili promene:
sudo systemctl restart apache2


apache2ctl komanda

apache2ctl je komandna linija koja se koristi za upravljanje Apache HTTP Serverom na Unix i Linux sistemima. Ova komanda pruža različite opcije za kontrolu Apache servera, uključujući pokretanje, zaustavljanje, ponovno pokretanje, proveru konfiguracije i druge operacije. Ovo je koristan alat za administratore sistema i webmastera koji upravljaju Apache serverima.

Evo nekoliko čestih opcija koje se koriste sa apache2ctl:
  • start: Pokreće Apache HTTP Server. Na primer: sudo apache2ctl start.
  • stop: Zaustavlja Apache server. Na primer: sudo apache2ctl stop.
  • restart: Ponovo pokreće Apache server. Ovo je korisno nakon izmena u konfiguraciji kako bi se primenile promene. Na primer: sudo apache2ctl restart.
  • graceful: Izvodi "graceful" ponovno pokretanje Apache servera. Ovo omogućava da se aktivni zahtevi završe pre nego što se server zaustavi i ponovo pokrene. Na primer: sudo apache2ctl graceful.
  • configtest: Proverava konfiguraciju Apache servera na greške. Ovo je korisno kako biste identifikovali probleme u konfiguraciji pre nego što ih primenite. Na primer: sudo apache2ctl configtest.
  • status: Prikazuje status Apache servera, uključujući informacije o trenutnim procesima i konekcijama. Na primer: sudo apache2ctl status.

apache2ctl može varirati u nazivima i dostupnim opcijama u zavisnosti od verzije Apache servera i operativnog sistema koji koristite.

a2query komanda

a2query je komanda koja se koristi za upravljanje Apache konfiguracijom na Debian-based sistemima. Ova komanda omogućava različite opcije za pregled i analizu Apache konfiguracije. Evo nekoliko glavnih opcija:

  • -m (moduli): Prikazuje listu aktivnih Apache modula.
  • -v (Virtual Hosts): Prikazuje informacije o aktivnim Apache Virtual Host-ovima.
  • -l (Load File): Prikazuje putanju do glavne konfiguracione datoteke Apache servera.
  • -f (File): Omogućava pregled informacija o određenoj konfiguracionoj datoteci ili direktorijumu.

Ove opcije se često koriste za analizu i dijagnostiku Apache konfiguracije kako bi se identifikovali aktivni moduli, Virtual Host-ovi i druge informacije o konfiguraciji.


a2ensite i a2dissite komande

a2ensite i a2dissite su korisne komande na Debian-based sistemima, poput Debian-a i Ubuntu-a, koje se koriste za upravljanje Apache Virtual Host konfiguracijama. Virtual Host-ovi omogućavaju hostovanje više veb sajtova na istom Apache serveru, a ove komande olakšavaju aktiviranje i deaktiviranje pojedinačnih Virtual Host konfiguracija.

a2ensite (Apache2 Enable Site)

Ova komanda omogućava (aktivira) Apache Virtual Host konfiguraciju. Konfiguracija Virtual Host-a se simbolički povezuje sa direktorijumom /etc/apache2/sites-enabled/, što ga čini aktivnim i dostupnim na serveru.

Primer:

sudo a2ensite mywebsite

Ovaj primer omogućava Virtual Host sa imenom mywebsite, čime se veb sajt konfigurisan u toj Virtual Host konfiguraciji sada aktivira na serveru.

a2dissite (Apache2 Disable Site)

Ova komanda onemogućava (deaktivira) Apache Virtual Host konfiguraciju. Simbolička veza na konfiguracionu datoteku Virtual Host-a se uklanja iz direktorijuma /etc/apache2/sites-enabled/, čime se deaktivira.

Primer:

sudo a2dissite mywebsite

Ovaj primer onemogućava Virtual Host sa imenom mywebsite, čime se veb sajt konfigurisan u toj Virtual Host konfiguraciji više neće prikazivati na serveru.

Direktive

DocumentRoot direktiva

DocumentRoot je ključna konfiguraciona direktiva u Apache HTTP Serveru koja definiše osnovni direktorijum na serveru u kojem se nalaze web sadržaji (HTML, CSS, slike, fajlovi itd.) koji će biti dostupni putem HTTP protokola.

Drugim rečima, DocumentRoot je putanja do korena vašeg veb sajta na serveru.

Kada klijent (korisnik web pregledača) zahteva određeni URL sajta, Apache server traži odgovarajući resurs (npr. HTML stranicu) u direktorijumu koji je naveden kao DocumentRoot za taj sajt. Ako se resurs nalazi u tom direktorijumu, server će ga poslati klijentu. Ovo je osnovni koncept koji omogućava Apacheu da servira web stranice.

Na primer, ako imate konfiguraciju u Apache koja izgleda ovako:

DocumentRoot /var/www/html

To znači da su svi web sadržaji za taj veb sajt smešteni u direktorijumu /var/www/html. Ako neko zatraži stranicu sa URL-om http://www.example.com/index.html, Apache će potražiti ovu stranicu u direktorijumu /var/www/html i, ako je pronađe, poslaće je klijentu.

DocumentRoot se često koristi zajedno sa Apache Virtual Host-ovima (Virtual Host-ovi omogućavaju hostovanje više veb sajtova na istom serveru). Svaki Virtual Host može imati svoj sopstveni DocumentRoot kako bi različiti sajtovi bili odvojeni na serveru.

Pravilno konfigurisan DocumentRoot je ključan za ispravno hostovanje web sajtova na Apache serveru. Važno je da osigurate da ova direktiva vodi do tačnog direktorijuma u kojem se nalaze vaši web sadržaji kako bi server mogao da pravilno servira stranice i resurse.

ServerName direktiva

ServerName je Apache konfiguraciona direktiva koja se koristi za definisanje kanonskog (osnovnog) imena servera. Ova direktiva se obično koristi u konfiguracionim datotekama Apache servera kako bi se navelo ime ili DNS (Domain Name System) naziv pod kojim će server biti poznat na internetu.

Kada se zahtevi šalju serveru putem HTTP ili HTTPS protokola, Apache koristi vrednost ServerName da bi usmerio zahtev na odgovarajući Virtual Host (ako su konfigurisani). Takođe, ServerName je važan za generisanje odgovarajućih HTTP odgovora, kao što su HTTP "Location" zaglavlja koja se koriste za preusmeravanje korisnika.

Evo primera upotrebe ServerName u Apache konfiguraciji:

<VirtualHost *:80>

    ServerName www.example.com

    DocumentRoot /var/www/example

</VirtualHost>

U ovom primeru, ServerName je postavljen na www.example.com. To znači da će svi zahtevi koji stignu na ovu adresu biti usmereni na odgovarajući Virtual Host sa podešenim DocumentRoot direktorijumom.

Važno je napomenuti da svaki Apache Virtual Host treba da ima svoju ServerName ili ServerAlias direktivu kako bi se tačno usmerili zahtevi na odgovarajući sajt. Osim toga, ServerName može biti i IP adresa servera, a ne samo DNS ime.

Pravilno postavljen ServerName je ključan za tačno usmeravanje zahteva i funkcionalnost Virtual Host-ova na Apache serveru, posebno kada se hostuje više sajtova na istom serveru.

LogFormat direktiva

LogFormat je Apache konfiguraciona direktiva koja se koristi za definisanje formata zapisa (log formata) za Apache pristupne i greške log datoteke. Ova direktiva omogućava prilagođavanje načina na koji se informacije o zahtevima i događajima zabeleženi u log datotekama formatiraju i prikazuju.

Standardni format zapisa (Common Log Format):

    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    CustomLog "logs/access_log" common
    

Ovaj format zapisa uključuje IP adresu klijenta (%h), identifikaciju korisnika (%l), korisničko ime (%u), vremensku oznaku (%t), HTTP zahtev ("%r"), status HTTP odgovora (>%s), i veličinu odgovora (%b).

Kratki format zapisa sa vremenskom oznakom:

    LogFormat "%t %h \"%r\" %>s %b" shorttime
    CustomLog "logs/access_log" shorttime
    

Ovaj format zapisa prikazuje samo vremensku oznaku, IP adresu klijenta, HTTP zahtev, status HTTP odgovora i veličinu odgovora.

Prilagođeni format sa dodatnim informacijama:

    LogFormat "[%{%Y-%m-%d %H:%M:%S}t] %h \"%r\" %>s %b 
            \"%{Referer}i\"\"%{User-Agent}i\"" customformat
    CustomLog "logs/access_log" customformat
    

Ovaj prilagođeni format dodaje dodatne informacije, kao što su vremenska oznaka u određenom formatu, Referer zaglavlje i User-Agent zaglavlje.

<Location> direktiva

<Location> direktiva u Apache HTTP server konfiguraciji podržava različite opcije koje omogućavaju precizno podešavanje ponašanja za određeni URL prostor. Evo nekoliko često korišćenih opcija za <Location> direktivu:

  • AuthType: Definiše vrstu autentifikacije koja se koristi za zaštitu ove lokacije. Na primer, AuthType Basic koristi HTTP osnovnu autentifikaciju.
  • AuthName: Postavlja ime autentifikacionog stvaratelja koje će se pojaviti u dijalogu za unos korisničkog imena i lozinke.
  • AuthUserFile: Postavlja putanju do datoteke koja sadrži informacije o korisnicima i njihovim lozinkama za autentifikaciju.
  • Require: Definiše uslove koje korisnik mora zadovoljiti kako bi pristupio ovoj lokaciji. Na primer, Require valid-user zahteva da korisnik bude validan (autentifikovan).
  • Redirect: Koristi se za postavljanje redirekcija sa ove lokacije na drugu lokaciju. Na primer, Redirect 301 /old-url /new-url će trajno preusmeriti zahteve sa /old-url na /new-url.
  • ProxyPass: Omogućava proxy postavke za ovu lokaciju, korisne za obrtanje proxy-ja. Na primer, ProxyPass /app http://app-server:8080 usmerava zahteve sa ove lokacije na drugi server.
  • SetHandler: Postavlja handler za obradu zahteva za ovu lokaciju. Na primer, SetHandler cgi-script može se koristiti za izvršavanje CGI skripti.
  • ErrorDocument: Definiše prilagođeni dokument za prikazivanje grešaka na ovoj lokaciji. Na primer, ErrorDocument 404 /custom-404.html će prikazati prilagođenu stranicu za 404 grešku.
  • Options: Postavlja opcije koje se primenjuju na ovu lokaciju, kao što su Indexes za omogućavanje indeksiranja direktorijuma ili FollowSymLinks za praćenje simboličkih veza.

Ovo su samo neke od opcija koje možete koristiti sa <Location> direktivom. Opcije se često koriste zajedno kako bi se precizno konfigurisalo ponašanje za određeni URL prostor na Apache serveru.

SetHandler direktiva

SetHandler je Apache konfiguraciona direktiva koja se koristi za postavljanje handlera (obrtnika) za određenu URL putanju ili lokaciju na web serveru. Obrtnici su odgovorni za procesiranje zahteva i generisanje odgovora na osnovu tipa sadržaja. Korišćenjem SetHandler možete precizno odabrati kako će Apache obraditi zahteve za određenim resursima.

Sintaksa SetHandler izgleda ovako:

<Location URL-path>

    SetHandler handler-name

</Location>

<Location URL-path> definiše na kojoj putanji (URL-u) će se primeniti SetHandler.

SetHandler handler-name postavlja handler koji će se koristiti za određenu putanju.

Evo nekoliko primera kako se SetHandler može koristiti:


Postavljanje PHP handlera za .php datoteke:

<LocationMatch "\.php$">

    SetHandler application/x-httpd-php

</LocationMatch>

U ovom primeru, SetHandler se koristi da se postavi handler za sve .php datoteke, tako da će Apache koristiti PHP interpreter za obradu ovih datoteka.


Postavljanje handlera za CGI skripte:

<Location /cgi-bin>

    SetHandler cgi-script

</Location>

Ovaj primer postavlja handler cgi-script za sve resurse unutar direktorijuma /cgi-bin, što omogućava izvršavanje CGI skripti na tim putanjama.


Postavljanje handlera za određene vrste sadržaja:

<Location /images>

    SetHandler image-handler

</Location>

Ovde, SetHandler se koristi za postavljanje custom handlera (image-handler) za sve resurse unutar direktorijuma /images.

SetHandler vam omogućava da precizno kontrolišete kako će Apache obrađivati različite tipove resursa na osnovu njihove putanje. Ovo je korisno za postavljanje specifičnih pravila za obradu različitih vrsta sadržaja na vašem web serveru.

AllowOverride direktiva

AllowOverride je Apache konfiguraciona direktiva koja se koristi u okviru <Directory> bloka kako bi se kontrolisalo koji tipovi konfiguracija i promena u konfiguracionim datotekama mogu biti primenjeni na određeni direktorijum i njegove potdirektorijume. Kada se postavi na vrednost "None" (AllowOverride None), to znači da se ne dozvoljava nikakvo nasleđivanje ili promene iz konfiguracijskih datoteka unutar tog direktorijuma.

Ovo se često koristi kao sigurnosna mera kako bi se onemogućilo potencijalno opasno ili neovlašćeno konfigurisanje iz .htaccess datoteka unutar tog direktorijuma. Kada je AllowOverride postavljen na "None", .htaccess datoteke unutar tog direktorijuma se ignorišu, i bilo kakve konfiguracije unutar tih datoteka se ne primenjuju.

Primer konfiguracije u Apache konfiguracionoj datoteci sa AllowOverride None izgledao bi ovako:

<Directory /putanja/do/direktorijuma>

    AllowOverride None

</Directory>

U ovom primeru, sve konfiguracije koje se nalaze u .htaccess datotekama unutar /putanja/do/direktorijuma i njegovih potdirektorijuma neće biti primenjene, bez obzira na šta je definisano u tim datotekama.

AllowOverride je korisna zaštita kada želite da ograničite promene u konfiguraciji za određene direktorijume kako biste spriječili potencijalne bezbednosne ranjivosti ili neovlašćene izmene u konfiguraciji.


Podešavanje SSL certifikata na CentOS

Evo osnovnih koraka:

  1. Instaliranje mod_ssl:
  2. Prvo, instalirajte mod_ssl, Apache modul koji omogućava SSL podršku. Koristite yum komandu za instalaciju:

    sudo yum install mod_ssl
  3. Podesite VirtualHost za HTTPS:
  4. Otvorite konfiguracionu datoteku vašeg Apache VirtualHosta za HTTPS, koja se obično nalazi u direktorijumu /etc/httpd/conf.d/. U tom fajlu, postavite sledeće direktive:

                <VirtualHost *:443>
                    ServerName example.com
                    DocumentRoot /var/www/html
    
                    SSLEngine on
                    SSLCertificateFile /putanja/do/ssl.crt
                    SSLCertificateKeyFile /putanja/do/ssl.key
                </VirtualHost>
            
  5. Ponovno pokrenite Apache server:
  6. Nakon što ste sačuvali izmene u konfiguracionoj datoteci, ponovo pokrenite Apache server da biste primenili promene:

    sudo systemctl restart httpd
  7. Proverite konfiguraciju:
  8. Pre nego što klijenti počnu da pristupaju vašem sajtu preko HTTPS-a, proverite konfiguraciju na greške. Koristite sledeću komandu:

    sudo httpd -t
  9. Omogućite firewall:
  10. Ako koristite firewall, ne zaboravite omogućiti dolazni saobraćaj na portu 443 (HTTPS port).

Ovo su osnovni koraci za postavljanje SSL certifikata na CentOS za Apache web server. Nakon izvršenih ovih koraka, vaš web sajt će biti dostupan preko HTTPS-a, pružajući sigurniju komunikaciju između servera i klijenata.

Podešavanje SSL certifikata na Debian-based sistemima

Prvo, instalirajte mod_ssl, Apache modul koji omogućava SSL podršku. Koristite a2enmod komandu za instalaciju:

sudo a2enmod ssl
Podesite VirtualHost za HTTPS:

Otvorite konfiguracionu datoteku vašeg Apache VirtualHosta za HTTPS, koja se obično nalazi u direktorijumu /etc/apache2/sites-available/. U tom fajlu, postavite sledeće direktive:


        <VirtualHost *:443>
            ServerName example.com
            DocumentRoot /var/www/html

            SSLEngine on
            SSLCertificateFile /putanja/do/ssl.crt
            SSLCertificateKeyFile /putanja/do/ssl.key
        </VirtualHost>
    
Ponovno pokrenite Apache server:

Nakon što ste sačuvali izmene u konfiguracionoj datoteci, ponovo pokrenite Apache server da biste primenili promene:

sudo systemctl restart apache2
Proverite konfiguraciju:

Pre nego što klijenti počnu da pristupaju vašem sajtu preko HTTPS-a, proverite konfiguraciju na greške. Koristite sledeću komandu:

sudo apache2ctl configtest
Omogućite firewall:

Ako koristite firewall, ne zaboravite omogućiti dolazni saobraćaj na portu 443 (HTTPS port).

Ovo su osnovni koraci za postavljanje SSL certifikata na Ubuntu za Apache web server. Nakon izvršenih ovih koraka, vaš web sajt će biti dostupan preko HTTPS-a, pružajući sigurniju komunikaciju između servera i klijenata.

Podešavanje autentifikacije

Podešavanje autentifikacije na Apache web serveru omogućava vam zaštitu određenih resursa ili direktorijuma lozinkom. Evo osnovnih koraka za postavljanje autentifikacije na Apache:

  1. Instaliranje Apache modula za autentifikaciju:
  2. Pre nego što možete koristiti autentifikaciju, morate se pobrinuti da odgovarajući Apache moduli budu instalirani i omogućeni. Dva česta modula za autentifikaciju su mod_auth_basic i mod_authn_file.

  3. Podesite direktorijum koji zahteva autentifikaciju:
  4. Otvorite Apache konfiguracionu datoteku koja se obično nalazi u /etc/apache2/sites-available/ na Debian-based sistemima ili /etc/httpd/conf.d/ na CentOS-based sistemima. Unutar <Directory> ili <Location> bloka, dodajte sledeće direktive za postavljanje autentifikacije:

    
                <Directory /putanja/do/zasticenog-direktorijuma>
                    AuthType Basic
                    AuthName "Zaštićeni resursi"
                    AuthUserFile /putanja/do/htpasswd-datoteke
                    Require valid-user
                </Directory>
            
  5. Generisanje htpasswd datoteke:
  6. Da biste dodali korisnička imena i lozinke za autentifikaciju, koristite htpasswd alat. Na primer, za dodavanje korisnika izvršite sledeću komandu:

    sudo htpasswd -c /putanja/do/htpasswd-datoteke korisnik
  7. Ponovno pokrenite Apache server:
  8. Nakon što ste postavili autentifikaciju i generisali htpasswd datoteku, ponovo pokrenite Apache server kako biste primenili promene:

    sudo systemctl restart apache2

Sada ste postavili autentifikaciju na Apache web serveru. Kada korisnici pokušaju da pristupe zaštićenom resursu, biće im zatraženo da unesu korisničko ime i lozinku koje ste postavili.

Apache kao WAF

Mod_security je WAF (Web Application Firewall) modul za Apache server koji se koristi za zaštitu web aplikacija od različitih vrsta napada. Evo primera kako konfigurisati Apache server sa mod_security modulom:

Instaliranje mod_security:
Prvo, morate instalirati mod_security modul na vašem Apache serveru. Koristite sistemski paketni menadžer ili preuzmite mod_security sa zvanične web stranice modula.

Aktiviranje mod_security modula:
Nakon instalacije, morate aktivirati mod_security modul u Apache konfiguraciji. To se obično postiže uređivanjem konfiguracionih datoteka Apache servera.

Konfiguracija mod_security:
Konfiguraciona datoteka za mod_security obično se nalazi u /etc/modsecurity/modsecurity.conf na većini Linux sistema. Otvorite ovu datoteku i prilagodite postavke prema vašim potrebama. Evo primera osnovnih postavki:
<IfModule mod_security2.c>
    # Aktivira mod_security
    SecRuleEngine On

    # Putanja do osnovnih pravila
    IncludeOptional /etc/modsecurity.d/*.conf
</IfModule>
Podešavanje pravila:
Pored osnovnih postavki, možete definisati pravila koja će se primenjivati na HTTP zahtjeve i odgovore. Pravila se obično čuvaju u datotekama sa ekstenzijom .conf u direktorijumu /etc/modsecurity.d/. Evo primera pravila koja blokira SQL injection napade:
# Blokira SQL injection napade
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "\b(?:s(?:elect\b(?:\s+(?:length\b\([^)]+\)|.*?[\s\*]+[\w\*]+\s*[\*\(]|\.\s*from\b)|\s+from\b)|ys(?:tem\b\(|\.))|ql\b\(|x(?:(?:p\(|mltype\b\(.+\bdocument\.location|ss\b\()|ecute\s*\()" "id:900130,rev:5,severity:2,msg:'SQL Injection Attack'"
Restartovanje Apache servera:
Nakon što ste konfigurisali mod_security, trebate ponovo pokrenuti Apache server kako bi promene bile primenjene:
sudo systemctl restart apache2
Nakon ovih koraka, mod_security će biti aktiviran na vašem Apache serveru i primenjivaće se pravila za zaštitu od različitih vrsta napada na web aplikacije. Vodite računa o konfiguraciji i pravilima kako biste osigurali da se mod_security ponaša u skladu sa zahtjevima vaše aplikacije i pruža željeni nivo sigurnosti.


Evo još nekoliko primera SecRule direktiva za konfiguraciju mod_security pravila. Ovi primjeri prikazuju kako možete definisati pravila za različite vrste napada i zaštite vašu web aplikaciju:

Zaštita od XSS napada:
Ovaj primer pokazuje kako definisati pravilo koje blokira pokušaje Cross-Site Scripting (XSS) napada:
SecRule ARGS|REQUEST_COOKIES|REQUEST_BODY|REQUEST_HEADERS "script" "id:1001,phase:2,deny,status:403,msg:'XSS Attack Detected'"

Zaštita od SQL injection napada:
Ovaj primer blokira pokušaje SQL injection napada:
SecRule REQUEST_COOKIES|ARGS|REQUEST_HEADERS "((\%27)|(\'))|((\%23)|(\#))|((\%2f)|(/etc/passwd))" "id:1002,phase:2,deny,status:403,msg:'SQL Injection Attack'"

Zaštita od pristupa osetljivim datotekama:
Ovaj primer blokira pristup određenim osetljivim datotekama kao što je config.php:
SecRule REQUEST_URI "@rx config\.php" "id:1003,phase:1,deny,status:403,msg:'Access to Sensitive File Denied'"

Zaštita od brute force napada na autentifikaciju:
Ovaj primer može pomoći u sprečavanju brute force napada na autentifikaciju:
SecAction "phase:1,t:none,nolog,pass,initcol:ip=%{REMOTE_ADDR},initcol:user=%{REMOTE_ADDR},id:1004"
SecRule REQUEST_HEADERS:Authorization "Basic" "phase:2,deprecatevar:ip.user=3/600,pass,nolog,setvar:ip.user=+1,expirevar:ip.user=600,id:1005"
SecRule IP:bf_block "@gt 0" "phase:2,deny,status:401,log,id:1006,msg:'Brute Force Protection: IP Blocked'"

Zaštita od CSRF napada:
Ovaj primer pomaže u zaštiti od Cross-Site Request Forgery (CSRF) napada:
SecRule REQUEST_HEADERS:Referer "@rx ^$" "id:1007,phase:2,block,msg:'CSRF Attack Detected: Empty Referer Header'"
Ovi primjeri su samo nekoliko osnovnih pravila i tipova napada koje možete zaštiti koristeći mod_security. Prilagodite pravila prema specifičnim zahtjevima vaše aplikacije i potrebama za sigurnošću. Vodite računa o konfiguraciji i testiranju pravila kako biste osigurali da ne blokiraju legitimne zahteve.

SQL ALL, ANY, EXISTS i SOME Operateri

SQL operateri `ALL`, `ANY`, `EXISTS` i `SOME` se koriste za poređenje vrednosti u podupitu sa vrednostima u glavnom upitu. Evo objašnjenja i primera za svaki od ovih operatera:

ALL operator:

Operator `ALL` koristi se za upoređivanje da li svi rezultati podupita zadovoljavaju određeni uslov.

    
    SELECT Ime
    FROM Studenti
    WHERE Bodovi > ALL (SELECT Bodovi FROM Studenti WHERE Godina = 2);
    
    

ANY operator:

Operator `ANY` koristi se za upoređivanje da li bar jedan rezultat podupita zadovoljava određeni uslov.

    
    SELECT Ime
    FROM Proizvodi
    WHERE Cena = ANY (SELECT Cena FROM KonkurentskaRoba 
                        WHERE Kategorija = 'Elektronika');
    
    

EXISTS operator:

Operator `EXISTS` koristi se za proveru postojanja rezultata u podupitu.

    
    SELECT Ime
    FROM Narudžbine
    WHERE EXISTS (SELECT * FROM StavkeNarudžbine 
                    WHERE Narudžbine.ID = StavkeNarudžbine.NarudžbaID);
    
    

SOME operator:

Operator `SOME` se koristi na sličan način kao `ANY` za upoređivanje sa bilo kojim rezultatom podupita.

    
    SELECT Ime
    FROM Proizvodi
    WHERE Cena = SOME (SELECT Cena FROM KonkurentskaRoba 
                        WHERE Kategorija = 'Elektronika');
    
    
Napomena: Sintaksa za kreiranje privremene tabele može se razlikovati u različitim SQL sistemima (npr. SQL Server, MySQL, itd.), pa je važno da koristite odgovarajuću sintaksu za svoju bazu podataka.

SQL Subqueries (Podupiti)

Podupiti su upiti unutar drugih upita i koriste se za dobijanje dodatnih podataka ili filtriranje rezultata glavnog upita.

Primeri upotrebe podupita:

    
    1. Jednostavan podupit u klauzuli WHERE:
    SELECT Ime
    FROM Zaposleni
    WHERE OdeljenjeID = (SELECT OdeljenjeID FROM Odeljenja 
                        WHERE Naziv = 'Računovodstvo');

    2. Podupit u klauzuli SELECT:
    SELECT Ime, (SELECT COUNT(*) FROM Narudzbe 
                 WHERE KupacID = K.KupacID) AS BrojNarudzbi
    FROM Kupci K;
    
    

Podupiti omogućavaju rukovanje složenim logikama i zavise od rezultata drugih upita.

Napomena: Podupiti su korisni za rešavanje složenih problema i omogućavaju vam da izgradite upite koji zavise od rezultata drugih upita.

SQL SELECT INTO TEMPORARY TABLE

SELECT INTO TEMPORARY TABLE u SQL-u se koristi za kreiranje privremene tabele na osnovu rezultata SELECT upita. Privremene tabele su vidljive samo tokom trenutne sesije i automatski se brišu nakon sesije.

Primer korišćenja SELECT INTO Privremena Tabela:

    
    SELECT Ime, Prezime
    INTO #PrivremenaTabela
    FROM Zaposleni
    WHERE DatumZaposlenja > '2023-01-01';
    
    

Ovaj upit će kreirati privremenu tabelu #PrivremenaTabela sa kolonama "Ime" i "Prezime" i kopirati podatke zaposlenih čiji je datum zaposlenja nakon 1. januara 2023. godine.


Napomena: Sintaksa za kreiranje privremene tabele može se razlikovati u različitim SQL sistemima (npr. SQL Server, MySQL, itd.), pa je važno da koristite odgovarajuću sintaksu za svoju bazu podataka.

SQL INSERT INTO SELECT

INSERT INTO SELECT u SQL-u se koristi za umetanje podataka u ciljnu tabelu na osnovu rezultata SELECT upita.

Primer korišćenja INSERT INTO SELECT:

    
    INSERT INTO NoviZaposleni (Ime, Prezime, DatumZaposlenja)
    SELECT Ime, Prezime, DatumZaposlenja
    FROM StariZaposleni
    WHERE DatumZaposlenja > '2023-01-01';
    
    

Ovaj upit će umetnuti podatke iz tabele "StariZaposleni" u tabelu "NoviZaposleni" za sve redove gde je datum zaposlenja nakon 1. januara 2023. godine.

Napomena: Ciljna tabela mora biti prethodno kreirana sa odgovarajućim kolonama, i obezbedite da tipovi podataka u SELECT upitu odgovaraju tipovima podataka u ciljnoj tabeli.

SQL SELECT INTO

SELECT INTO u SQL-u se koristi za kreiranje nove tabele na osnovu rezultata SELECT upita.

Primer korišćenja SELECT INTO:

    
    SELECT Ime, Prezime
    INTO NoviZaposleni
    FROM Zaposleni
    WHERE DatumZaposlenja > '2023-01-01';
    
    

Ovaj upit će kreirati novu tabelu "NoviZaposleni" sa kolonama "Ime" i "Prezime" i kopirati podatke zaposlenih čiji je datum zaposlenja nakon 1. januara 2023. godine.

Napomena: Nova tabela mora biti prethodno kreirana, i morate imati odgovarajuće dozvole za kreiranje nove tabele.

SQL UNION

UNION u SQL-u se koristi za spajanje rezultata više upita u jedan rezultat, pri čemu se eliminišu duplicirani redovi.

Primer korišćenja UNION:

    
    SELECT Ime, Prezime FROM Zaposleni
    UNION
    SELECT Ime, Prezime FROM Klijenti;
    
    

Ovaj upit će spojiti imena i prezimena zaposlenih i klijenata iz tabela "Zaposleni" i "Klijenti" i vratiti jedinstvene vrednosti.

Napomena: `UNION` automatski uklanja duplicirane redove. Ako želite zadržati sve redove, uključujući i duplicirane, možete koristiti `UNION ALL` umesto `UNION`.

SQL JOIN (Spajanje) Operacije

JOIN u SQL-u se koristi za spajanje podataka iz više tabela na osnovu određenih uslova. Postoje različite vrste JOIN operacija:

INNER JOIN (Unutarnji JOIN):

INNER JOIN vraća samo redove koji imaju podudaranja u obe tabelama koje se spajaju.

INNER JOIN Primer
    
    SELECT Narudzba.NarudzbaID, Kupac.Ime
    FROM Narudzba
    INNER JOIN Kupac ON Narudzba.KupacID = Kupac.KupacID;
    
    

Ovaj upit će spojiti tabelu "Narudzba" sa tabelom "Kupac" na osnovu zajedničkog polja "KupacID" i vratiti podatke o narudžbama i imenima kupaca.

LEFT JOIN (Levi JOIN):

LEFT JOIN vraća sve redove iz leve tabele i odgovarajuće redove iz desne tabele.

LEFT JOIN Primer
    
    SELECT Radnik.Ime, Radnik.Pozicija, Projekat.Naziv
    FROM Radnik
    LEFT JOIN Projekat ON Radnik.RadnikID = Projekat.RadnikID;
    
    

Ovaj upit će spojiti tabelu "Radnik" sa tabelom "Projekat" na osnovu zajedničkog polja "RadnikID" i prikazati sve radnike i projekte kojima su dodeljeni, uključujući i one radnike koji nisu dodeljeni projektima.

RIGHT JOIN (Desni JOIN):

RIGHT JOIN je sličan LEFT JOIN-u, ali vraća sve redove iz desne tabele i odgovarajuće redove iz leve tabele.

RIGHT JOIN Primer
    
    SELECT Narudzba.NarudzbaID, Kupac.Ime
    FROM Narudzba
    RIGHT JOIN Kupac ON Narudzba.KupacID = Kupac.KupacID;
    
    

Ovaj upit će spojiti tabelu "Narudzba" sa tabelom "Kupac" na osnovu zajedničkog polja "KupacID" i prikazati sve narudžbe i kupce, uključujući i one kupce koji nisu napravili narudžbe.

FULL JOIN (Puni JOIN):

FULL JOIN vraća sve redove iz obe tabele.

FULL JOIN Primer
    
    SELECT Radnik.Ime, Projekat.Naziv
    FROM Radnik
    FULL JOIN Projekat ON Radnik.RadnikID = Projekat.RadnikID;
    
    

Ovaj upit će spojiti tabelu "Radnik" sa tabelom "Projekat" na osnovu zajedničkog polja "RadnikID" i prikazati sve radnike i projekte, uključujući i one koji nemaju podudaranja.

SQL DELETE Naredba

DELETE je SQL naredba koja se koristi za brisanje postojećih redova iz tabele baze podataka. Evo primera:

    
    DELETE FROM Korisnici
    WHERE KorisnikID = 123;
    
    

Ovaj upit će trajno izbrisati korisnika sa ID brojem 123 iz tabele "Korisnici".

Napomena: Budite veoma oprezni prilikom korišćenja DELETE naredbe, jer ona trajno uklanja podatke. Uvek budite sigurni da ste pravilno postavili WHERE klauzulu kako biste precizno odabrali redove koje želite da obrišete. Ukoliko se izostavi WHERE kaluzula, svi podaci ove tabele će biti obrisani, ali ne i sama tabela.

SQL UPDATE Naredba

UPDATE je SQL naredba koja se koristi za ažuriranje postojećih redova u tabeli baze podataka. Evo primera:

    
    UPDATE Korisnici
    SET Status = 'Aktivan'
    WHERE KorisnikID = 123;
    
    

Ovaj upit će ažurirati tabelu "Korisnici" tako da kolona "Status" za korisnika sa ID brojem 123 bude postavljena na "Aktivan".

Napomena: UPDATE naredba obavezno sadrži SET klauzulu koja definiše koje kolone želite da ažurirate i nove vrednosti koje ćete postaviti. Takođe, često se koristi WHERE klauzula da se specificira koji redovi u tabeli će biti ažurirani (ukoliko se izostavi, svi redovi u koloni će biti ažurirani).

SQL INSERT INTO Naredba

INSERT INTO je SQL naredba koja se koristi za dodavanje novih redova u tabelu baze podataka. Evo primera:

    
    INSERT INTO Korisnici (Ime, Prezime, Email)
    VALUES ('Ana', 'Ivanović', 'ana@email.com');
    
    

Ovaj upit će dodati novog korisnika u tabelu "Korisnici" sa imenom "Ana", prezimenom "Ivanović" i e-mail adresom "ana@email.com".

Napomena: Imena kolona u zagradama (npr. Ime, Prezime, Email) moraju se podudarati sa redosledom vrednosti koje unosite u vrednostima (npr. 'Ana', 'Ivanović', 'ana@email.com'). Takođe, naredba INSERT INTO može se koristiti za unos podataka u kolone koje su opciono obeležene kao NULL, što znači da ne morate uneti vrednost za svaku kolonu.

SQL Komentari

Komentari u SQL-u su tekstualni delovi koji služe za dodatna objašnjenja i dokumentaciju upita ili skripte. Postoje dva tipa SQL komentara:

Jednolinijski komentari:

Ovi komentari počinju sa znakom dvostrukih crta (--) i obuhvataju sve do kraja reda.

    
    SELECT Ime, Prezime -- Ovde biramo imena i prezimena
    FROM Zaposleni;
    
    

Višelinijski komentari:

Ovi komentari počinju sa /* i završavaju se sa */. Mogu obuhvatiti više redova i koriste se za dodavanje detaljnijih komentara.

    
    /* 
    Ovo je primer upita koji 
    bira sve zaposlene iz tabele Zaposleni.
    */
    SELECT Ime, Prezime
    FROM Zaposleni;
    
    

SQL NULL funkcije

NULL funkcije omogućavaju vam da obradite NULL vrednosti u SQL upitima. Evo nekoliko često korišćenih NULL funkcija sa objašnjenjima i primerima:

IS NULL poređenje:

Ova funkcija se koristi da proveri da li je određena vrednost NULL.

    
    SELECT Ime, Prezime
    FROM Zaposleni
    WHERE Plata IS NULL;
    
    

Ovaj upit će izabrati sve zaposlene čija plata ima NULL vrednost.

ISNULL() funkcija:

ISNULL() funkcija se koristi za proveru da li je određena vrednost NULL ili ne. Ako je vrednost NULL, funkcija će vratiti 1 (tačno); inače će vratiti 0 (netačno).

    
	SELECT Ime, Prezime
    FROM Zaposleni
    WHERE ISNULL(Plata, 0) = 0;
    
	

Ovaj upit će izabrati imena i prezimena zaposlenih čija plata nije NULL ili gde je plata NULL, ali će se zameniti nulom (0).

COALESCE funkcija:

COALESCE funkcija se koristi da odabere prvu "ne-NULL" vrednost iz niza vrednosti.

    
    SELECT Ime, COALESCE(Adresa, 'Nepoznato') AS Adresa
    FROM Klijenti;
    
    

Ovaj upit će izabrati imena klijenata i, ako adresa nije NULL, prikazati adresu, inače će prikazati "Nepoznato".

NULLIF funkcija:

NULLIF funkcija se koristi da poredi dve vrednosti. Ako su vrednosti jednake, funkcija će vratiti NULL.

    
    SELECT Ime, NULLIF(Status, 'Nedostupan') AS Status
    FROM Korisnici;
    
    

Ovaj upit će izabrati imena korisnika i, ako je status "Nedostupan", prikazati NULL, inače će prikazati stvarni status.

IFNULL funkcija (za MySQL):

IFNULL funkcija se koristi za zamenjivanje NULL vrednosti drugom vrednošću.

    
    SELECT Ime, IFNULL(Adresa, 'Nepoznato') AS Adresa
    FROM Klijenti;
    
    

Ovaj upit će izabrati imena klijenata i, ako adresa nije NULL, prikazati adresu; inače će prikazati "Nepoznato".

NVL funkcija (za Oracle baze):

NVL funkcija se koristi za zamenjivanje NULL vrednosti drugom vrednošću.

    
    SELECT Ime, NVL(Adresa, 'Nepoznato') AS Adresa
	FROM Klijenti;
    
    

Ovaj upit će izabrati imena klijenata i, ako adresa nije NULL, prikazati adresu; inače će prikazati "Nepoznato".

SQL NULL vrednost

NULL označava odsustvo vrednosti u SQL-u. To ne znači da je vrednost nula, već da vrednost nije ni poznata ni definisana. Evo nekoliko primera:

Primer 1: Dodavanje zapisa bez vrednosti

Ako se pri dodavanju zapisa u tabelu određena kolona ne popuni vrednošću, ta kolona će imati NULL vrednost.

    
    INSERT INTO Korisnici (Ime, Prezime, Telefon) 
    	VALUES ('Ana', 'Ivanović', NULL);
    
    

Primer 2: Nedostajući podaci

Kada neki podaci nisu dostupni ili nisu uneti, NULL se koristi da označi te praznine.

Primer 3: Neobavezne kolone

U slučaju kada kolona nije obavezna za unos (nije definisana kao NOT NULL), NULL se može koristiti da označi odsustvo vrednosti.

Primer 4: Nedefinisane vrednosti

Kada vrednost nije primenjiva ili nije definisana za određeni zapis, NULL se koristi da označi ovu situaciju.

Važno je napomenuti da NULL nije isto što i prazan string ('') ili nula (0). NULL označava odsustvo vrednosti, dok prazan string i nula predstavljaju konkretnu vrednost.

SQL Compound (Složeno dodeljivanje) Operatori

Operateri sa složenim dodeljivanjem u SQL-u omogućavaju izvođenje operacija nad vrednostima kolona i dodeljivanje rezultata toj istoj koloni. Evo nekoliko često korišćenih operatera sa složenim dodeljivanjem sa objašnjenjima na srpskom jeziku i primerima:

+= operator:

Ovaj operator se koristi za dodavanje vrednosti jedne kolone drugoj koloni i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Zaposleni
    SET Plata += 500  -- Plata = Plata + 500
    WHERE Odeljenje = 'Prodaja';
    
    

-= operator:

Ovaj operator se koristi za oduzimanje vrednosti jedne kolone od druge kolone i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Korisnici
    SET BrojPoena -= 10  -- BrojPoena = BrojPoena - 10
    WHERE Status = 'Aktivan';
    
    

*= operator:

Ovaj operator se koristi za množenje vrednosti jedne kolone sa vrednošću druge kolone i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Proizvodi
    SET Cena *= 1.1  -- Cena = Cena * 1.1
    WHERE Kategorija = 'Elektronika';
    
    

/= operator:

Ovaj operator se koristi za deljenje vrednosti jedne kolone sa vrednošću druge kolone i dodeljivanje rezultata prvoj koloni.

    
    UPDATE Porudžbine
    SET UkupanIznos /= Količina  -- UkupanIznos = UkupanIznos / Količina
    WHERE Status = 'Završeno';
    
    

SQL Comparison (Poređenje) Operatori

Comparison operatori u SQL-u koriste se za upoređivanje vrednosti i vraćaju rezultat koji ukazuje na tačnost ili netačnost uslova. Evo nekoliko često korišćenih komparativnih operatora sa objašnjenjima na srpskom jeziku i primerima:

Jednako (=):

Operator "jednako" se koristi za upoređivanje da li dve vrednosti su iste.

    
    SELECT Ime, Prezime
    FROM Korisnici
    WHERE Grad = 'Beograd';
    
    

Različito (<>) ili (!=):

Operator "različito" se koristi za upoređivanje da li dve vrednosti nisu iste.

    
    SELECT Ime, Prezime
    FROM Korisnici
    WHERE Grad <> 'Novi Sad';
    
    

Veće od (>):

Operator "veće od" se koristi za upoređivanje da li jedna vrednost je veća od druge.

    
    SELECT Ime, Plata
    FROM Zaposleni
    WHERE Plata > 50000;
    
    

Manje od (<):

Operator "manje od" se koristi za upoređivanje da li jedna vrednost je manja od druge.

    
    SELECT Ime, Godine
    FROM Osobe
    WHERE Godine < 30;
    
    

Veće ili jednako (>=):

Operator "veće ili jednako" se koristi za upoređivanje da li jedna vrednost je veća ili jednaka drugoj.

    
    SELECT Ime, BrojPoruka
    FROM Korisnici
    WHERE BrojPoruka >= 100;
    
    

Manje ili jednako (<=):

Operator "manje ili jednako" se koristi za upoređivanje da li jedna vrednost je manja ili jednaka drugoj.

    
    SELECT Ime, Bodovi
    FROM Studenti
    WHERE Bodovi <= 60;
    
    

SQL Aritmetički Operatori

Aritmetički operatori u SQL-u omogućavaju izvođenje matematičkih operacija nad numeričkim vrednostima u upitima. Evo nekoliko često korišćenih aritmetičkih operatora sa primerima:

Sabiranje (+):

Koristi se za sabiranje dve numeričke vrednosti.

    
    SELECT Cena + Popust AS KonacnaCena
    FROM Proizvodi;
    
    

Oduzimanje (-):

Koristi se za oduzimanje jedne numeričke vrednosti od druge.

    
    SELECT UkupanIznos - Popust AS Placanje
    FROM Narudžbine;
    
    

Množenje (*):

Koristi se za množenje dve numeričke vrednosti.

    
    SELECT Cena * Količina AS UkupanIznos
    FROM StavkeNarudžbine;
    
    

Deljenje (/):

Koristi se za deljenje jedne numeričke vrednosti sa drugom.

    
    SELECT UkupanIznos / BrojStavki AS ProsečnaCena
    FROM Narudžbine;
    
    

Modulo (%):

Vraća ostatak pri deljenju dve numeričke vrednosti.

    
    SELECT Broj % 2 AS Ostatak
    FROM Tabela;
    
    

SQL CASE klauzula

CASE (SLUČAJ) klauzula u SQL-u se koristi za implementaciju uslovnih izraza u upitima. Omogućava vam da definišete različite radnje ili vrednosti na osnovu ispunjenja određenih uslova. CASE može biti korisna za izbor različitih vrednosti za istu kolonu ili za kreiranje dodatnih kolona na osnovu uslovnih provera.

Primer korišćenja CASE:

Korišćenje CASE klauzule za dodelu ocene "Prolaz" ili "Pad" na osnovu rezultata ispita.

    
    SELECT Ime, Rezultat,
      CASE
        WHEN Rezultat >= 50 THEN 'Prolaz'
        ELSE 'Pad'
      END AS Ocena
    FROM Ispiti;
    
    

Ovaj upit će dodati kolonu "Ocena" koja će sadržavati vrednost "Prolaz" ako je rezultat veći ili jednak 50, inače će sadržavati vrednost "Pad".

Korišćenje CASE klauzule sa više uslova za dodelu ocene "Odličan", "Dobar", "Prosečan" ili "Nedovoljan" na osnovu rezultata ispita.

    
    SELECT Ime, Rezultat,
      CASE
        WHEN Rezultat >= 90 THEN 'Odličan'
        WHEN Rezultat >= 70 THEN 'Dobar'
        WHEN Rezultat >= 50 THEN 'Prosečan'
        ELSE 'Nedovoljan'
      END AS Ocena
    FROM Ispiti;
    
    

Ovaj upit će dodati kolonu "Ocena" koja će sadržavati vrednosti "Odličan", "Dobar", "Prosečan" ili "Nedovoljan" u zavisnosti od vrednosti u koloni "Rezultat". Na osnovu različitih uslova, različite ocene će biti dodeljene.

SQL SUM() i AVG() funkcije

SUM() (ZBIR()) funkcija se koristi za izračunavanje ukupnog zbirnog broja vrednosti u određenoj koloni, dok se AVG() (PROSEK()) funkcija koristi za izračunavanje prosečne vrednosti u toj koloni. Obe funkcije se često koriste za analizu numeričkih podataka.

Primer korišćenja SUM():

Korišćenje SUM() funkcije za izračunavanje ukupne vrednosti svih narudžbina.

    
    SELECT SUM(Iznos) AS UkupanIznos
    FROM Narudžbine;
    
    

Ovaj upit će izračunati ukupan iznos svih narudžbina u tabeli "Narudžbine" i vratiti ga kao "UkupanIznos".

Primer korišćenja AVG():

Korišćenje AVG() funkcije za izračunavanje prosečne ocene proizvoda.

    
    SELECT AVG(Ocena) AS ProsečnaOcena
    FROM Proizvodi;
    
    

Ovaj upit će izračunati prosečnu ocenu svih proizvoda u tabeli "Proizvodi" i vratiti je kao "ProsečnaOcena".

SQL COUNT() funkcija

COUNT() (BROJ()) funkcija u SQL-u koristi se za brojanje broja redova u određenoj tabeli ili rezultatu upita. Ova funkcija omogućava vam da saznate koliko redova ispunjava određeni uslov ili koliko redova postoji u tabeli.

Primer korišćenja COUNT():

Korišćenje COUNT() funkcije za brojanje broja korisnika u tabeli "Korisnici".

    
    SELECT COUNT(*) AS BrojKorisnika
    FROM Korisnici;
    
    

Ovaj upit će izbrojati sve redove u tabeli "Korisnici" i vratiti broj korisnika.

SQL HAVING klauzula

HAVING (Imajući) je klauzula u SQL upitu koja se koristi zajedno sa "GROUP BY" kako bi se filtrirali rezultati grupisanih redova. Ova klauzula omogućava postavljanje uslova za grupisane podatke nakon što su grupisani i agregirani. "HAVING" se koristi za filtriranje grupa koje ispunjavaju određene uslove.

Primer korišćenja HAVING:

Grupisanje korisnika prema njihovim gradovima i izračunavanje ukupnog broja korisnika u svakom gradu, a zatim filtriranje gradova sa više od 10 korisnika.

    
    SELECT Grad, COUNT(*) AS BrojKorisnika
    FROM Korisnici
    GROUP BY Grad
    HAVING COUNT(*) > 10;
    
    

Ovaj upit će grupisati korisnike po njihovim gradovima, izračunati ukupan broj korisnika u svakom gradu i zatim filtrirati samo one gradove gde ima više od 10 korisnika.

Napomena: "HAVING" se koristi isključivo sa "GROUP BY" i koristi se za filtriranje grupisanih podataka na osnovu agregatnih funkcija (npr. COUNT, SUM) ili drugih uslova. To omogućava da se selektuju samo one grupe koje ispunjavaju određene kriterijume.

SQL GROUP BY

GROUP BY (Grupisanje po) je klauzula u SQL upitu koja se koristi za grupisanje redova iz tabele na osnovu vrednosti u određenoj koloni. Ovo omogućava agregiranje podataka i primenu funkcija nad grupisanim redovima.

Primer korišćenja GROUP BY:

Grupisanje korisnika prema njihovom gradu i izračunavanje ukupnog broja korisnika u svakom gradu.

    
    SELECT Grad, COUNT(*) AS BrojKorisnika
    FROM Korisnici
    GROUP BY Grad;
    
    

Ovaj upit će grupisati korisnike po njihovim gradovima i vratiti rezultat sa dve kolone: "Grad" i "BrojKorisnika". Brojač "COUNT(*)" će izračunati ukupan broj korisnika u svakom gradu.

Napomena: Uz "GROUP BY", često se koriste agregatne funkcije kao što su "SUM", "AVG", "MAX" ili "MIN" kako bi se izračunali statistički podaci za svaku grupu.

SQL Alias

Alias (Privremeno Ime) je koncept koji se koristi u SQL upitima kako bi se dodeljivala privremena imena kolonama ili tabelama radi olakšanja čitljivosti upita ili promene prikazanih imena kolona.

Primer korišćenja Aliasa:

Korišćenje aliasa za preimenovanje kolone "Ime" u "Kupčeva Imena" u rezultatu upita.

    
    SELECT Ime AS "Kupčeva Imena"
    FROM Kupci;
    
    

Ovaj upit će promeniti prikazane nazive kolona u rezultatu upita sa "Ime" na "Kupčeva Imena" kako bi bilo jasnije.

Evo još jednog primera:

    
    -- Korišćenje aliasa za preimenovanje tabele "Porudžbine" 
    -- u "Narudžbine".
    SELECT *
    FROM Porudžbine AS Narudžbine;
    
    

U ovom slučaju, cela tabela "Porudžbine" je privremeno preimenovana kao "Narudžbine" kako bi se olakšalo pisanje upita.

Korišćenje aliasa je korisno za poboljšanje čitljivosti upita i može biti posebno korisno kada se koristi više tabela u složenim upitima. Aliasima se može dodeliti bilo koje privremeno ime koje vam olakšava rad sa podacima.

SQL Wildcards

Wildcards (džokeri) su specijalni znakovi koji se koriste u SQL upitima za pretragu vrednosti koje se podudaraju sa određenim oblicima ili obrascima. Ovi znakovi čine pretragu tekstualnih vrednosti fleksibilnom i moćnom.

Najčešće korišćeni wildcards su:

  • % (procento): Zamena za nula, jedan ili više karaktera.
  • _ (donja crta): Zamena za tačno jedan karakter.
  • [ ] (uglaste zagrade): Koriste se za definisanje opsega karaktera.
  • [^ ] (uglaste zagrade s kareta): Koriste se za isključivanje određenih karaktera iz opsega.

Primeri korišćenja Wildcards:

    
-- Pronalaženje svih korisnika čija se adresa završava 
-- sa "Street" ili "Avenue".
SELECT * FROM Korisnici
WHERE Adresa LIKE '%Street' OR Adresa LIKE '%Avenue';

-- Pronalaženje svih proizvoda čije ime počinje 
-- sa slovima "S", "T" ili "U".
SELECT * FROM Proizvodi
WHERE Ime LIKE '[STU]%';

-- Pronalaženje svih gradova čiji naziv počinje 
-- sa slovom iz opsega A do G.
SELECT * FROM Gradovi
WHERE Naziv LIKE '[A-G]%';

-- Pronalaženje svih vrednosti koje ne sadrže cifre.
SELECT * FROM Podaci
WHERE Vrednost LIKE '[^0-9]%';
    
    

Korišćenje wildcards olakšava pretragu i filtriranje podataka u SQL upitima, omogućavajući precizno pronalaženje vrednosti koje odgovaraju određenim obrascima ili zahtevima.

SQL LIKE operator

LIKE operator (Operator "SADRŽI") se koristi za filtriranje redova na osnovu šablona, tj. za pronalaženje redova u kojima određena kolona sadrži određeni niz karaktera ili deo niza karaktera. Ovaj operator je koristan kada želite da tražite vrednosti koje sadrže određeni oblik ili deo teksta.

Primer:

Dohvatanje svih proizvoda iz tabele "Proizvodi" koji u nazivu sadrže reč "mobilni".

    
    SELECT * FROM Proizvodi
    WHERE Naziv LIKE '%mobilni%';
    
    

Napomena: U "LIKE" operatoru, znak "%" se koristi kao zamena za nulu, jedan ili više karaktera, što omogućava fleksibilno pretraživanje teksta u koloni.

SQL MIN i MAX Funkcije

MIN funkcija (Minimum funkcija) se koristi za pronalaženje najmanje vrednosti u određenoj koloni ili skupu vrednosti. Ova funkcija vraća najmanju vrednost prisutnu u koloni.

Primer:

Pronalaženje najmanje plate među zaposlenima u tabeli "Zaposleni".

    
    SELECT MIN(Plata) FROM Zaposleni;
    
    

MAX funkcija (Maksimum funkcija) se koristi za pronalaženje najveće vrednosti u određenoj koloni ili skupu vrednosti. Ova funkcija vraća najveću vrednost prisutnu u koloni.

Primer:

Pronalaženje najveće starosti među korisnicima u tabeli "Korisnici".

    
    SELECT MAX(Starost) FROM Korisnici;
    
    

Ove funkcije su korisne za pronalaženje ekstremnih vrednosti (minimuma ili maksimuma) u skupu podataka, što je često korisno za analizu ili izveštavanje.

SQL SELECT TOP Operator

SELECT TOP se koristi za ograničavanje broja redova koji će biti vraćeni u rezultatu SQL upita. Ovaj izraz se često koristi u Microsoft SQL Serveru i Accessu. Na nekim drugim sistemima, možda ćete koristiti "LIMIT" umesto "TOP" kako biste postigli isti efekat.

Primer:

Dohvatanje prvih 10 redova iz tabele "Klijenti" (iz SQL Server-a).

    
    SELECT TOP 10 * FROM Klijenti;
    
    

Napomena: U nekim bazama podataka, kao što je MySQL, možete koristiti "LIMIT" kako biste postigli isti efekat. Na primer, u MySQL-u:

    
    SELECT * FROM Klijenti
    LIMIT 10;
    
    

Ovo će takođe vratiti prvih 10 redova iz tabele "Klijenti".

SQL BETWEEN Operator

BETWEEN operator (Operator "IZMEĐU") se koristi za filtriranje rezultata upita na osnovu opsega vrednosti u određenoj koloni. Ovaj operator se koristi za izbor redova čija vrednost u određenoj koloni pada unutar specificiranog opsega, uključujući i granice tog opsega.

Primer:

Dohvatanje svih narudžbina iz tabele "Narudžbine" koje su napravljene u periodu između 1. januara 2023. godine i 31. decembra 2023. godine.

    
    SELECT * FROM Narudžbine
    WHERE DatumNarudžbine BETWEEN '2023-01-01' AND '2023-12-31';
    
    

Napomena: "BETWEEN" operator je koristan kada želite da izaberete redove čija vrednost u određenoj koloni upada u određeni opseg vrednosti, što čini postavljanje uslova za odabir određenih podataka lakšim i preglednijim.

SQL NOT Operator

NOT operator (Operator "NIJE") se koristi za negaciju uslova u SQL upitu. Ovaj operator menja istinitost uslova, tj. vraća redove koji ne zadovoljavaju navedeni uslov. To znači da će se vratiti redovi koji nisu u skladu sa navedenim uslovom.

Primer:

Dohvatanje svih proizvoda iz tabele "Proizvodi" koji nisu u kategoriji "Elektronika".

    
    SELECT * FROM Proizvodi
    WHERE NOT Kategorija = 'Elektronika';
    
    

Napomena: "NOT" operator je koristan kada želite da isključite određeni uslov i dobijete sve redove koji ne zadovoljavaju taj uslov.

SQL IN Operator

IN operator (Operator "U") koristi se za upoređivanje vrednosti u koloni sa nizom vrednosti. Ovaj operator se koristi kada želite da izaberete redove gde vrednost u određenoj koloni odgovara bilo kojoj od navedenih vrednosti u nizu. To je korisno za smanjenje dužine upita i olakšava postavljanje višestrukih uslova za upit.

Primer:

Dohvatanje svih proizvoda iz tabele "Proizvodi" koji pripadaju kategorijama "Elektronika" ili "Kućni aparati".

    
    SELECT * FROM Proizvodi
    WHERE Kategorija IN ('Elektronika', 'Kućni aparati');
    
    
Napomena: "IN" operator može biti koristan kada želite da izaberete redove koji odgovaraju više različitih vrednosti u istoj koloni, umesto da pišete više uslova sa "OR" operatorom.

SQL AND i OR Operatori

AND operator (I operator) koristi se za kombinovanje dva ili više uslova u SQL upitu. Rezultat će biti tačan samo ako su svi uslovi istiniti. Ovaj operator zahteva da svi uslovi budu zadovoljeni kako bi se rezultiralo tačnim rezultatom.

Primer:

Dohvatanje svih zaposlenih iz tabele "Zaposleni" koji su stariji od 30 godina i rade u odeljenju "Prodaja".

    
    SELECT * FROM Zaposleni
    WHERE Starost > 30 AND Odeljenje = 'Prodaja';
    
    

OR operator (ILI operator) koristi se za kombinovanje dva ili više uslova u SQL upitu. Rezultat će biti tačan ako je bar jedan od uslova istinit. Ovaj operator omogućava fleksibilnost u postavljanju uslova.

Primer:

Dohvatanje svih proizvoda iz tabele "Proizvodi" koji imaju status "Dostupan" ili čija je cena manja od 50 dolara.

    
    SELECT * FROM Proizvodi
    WHERE Status = 'Dostupan' OR Cena < 50;
    
    

SQL ORDER BY

ORDER BY (Redosled po) koristi se za sortiranje rezultata upita prema vrednostima u određenim kolonama. Ova klauzula omogućava da se rezultati sortiraju po rastućem (ASC) ili opadajućem (DESC) redosledu, u zavisnosti od potrebe. Evo objašnjenja i primera za "ORDER BY" klauzulu na srpskom jeziku:

Primeri:

  1. Sortiranje po rastućem redosledu: Dohvatanje svih zaposlenih iz tabele "Zaposleni" sortiranih po imenu u rastućem redosledu.
                
                SELECT * FROM Zaposleni
                ORDER BY Ime ASC;
                
                
  2. Sortiranje po opadajućem redosledu: Dohvatanje svih proizvoda iz tabele "Proizvodi" sortiranih po ceni u opadajućem redosledu.
                
                SELECT * FROM Proizvodi
                ORDER BY Cena DESC;
                
                
  3. Sortiranje po više kolona: Dohvatanje narudžbina iz tabele "Narudžbine" sortiranih prvo po datumu, a zatim po ukupnom iznosu.
                
                SELECT * FROM Narudžbine
                ORDER BY DatumNarudžbine ASC, UkupanIznos DESC;
                
                

SQL WHERE

WHERE klauzula u SQL-u koristi se za postavljanje uslova koji filtriraju podatke pri izvođenju SELECT upita. Ovo znači da možete specificirati kriterijume koje podaci moraju zadovoljiti kako bi se prikazali u rezultatu upita. Evo objašnjenja i nekoliko primera korišćenja WHERE klauzule:

    
    SELECT kolone
    FROM tabela
    WHERE uslov;
    
    

kolone: Označava koje kolone želite izabrati iz tabele.

tabela: Označava iz koje tabele želite izabrati podatke.

uslov: Definiše kriterijume za odabir redova koji će se prikazati u rezultatu upita.

Primeri korišćenja WHERE klauzule:

  1. Dohvatanje svih redova iz tabele "Klijenti" gde je grad "New York":
                
                SELECT * FROM Klijenti WHERE Grad = 'New York';
                
                
  2. Dohvatanje imena i prezimena osoba iz tabele "Zaposleni" gde su stariji od 30 godina:
                
                SELECT Ime, Prezime FROM Zaposleni WHERE Starost > 30;
                
                
  3. Dohvatanje svih redova iz tabele "Narudžbine" gde je ukupan iznos narudžbine veći od 1000 dolara:
                
                SELECT * FROM Narudžbine WHERE UkupanIznos > 1000;
                
                

SQL SELECT DISTINCT

SELECT DISTINCT se koristi za dohvatanje jedinstvenih vrednosti iz određenih kolona u rezultatu upita. Ovo osigurava da se iste vrednosti neće pojaviti više puta u rezultatu. Evo kako koristiti SELECT DISTINCT i nekoliko primera:

    
    SELECT DISTINCT kolone
    FROM tabela;
    
    

kolone: Označava koje kolone ili kolonu želite da budu jedinstvene.

tabela: Označava iz kojih tabela želite dohvatiti podatke.

Primeri korišćenja SELECT DISTINCT:

  1. Dohvatanje jedinstvenih vrednosti iz kolone "Grad" u tabeli "Klijenti":
                
                SELECT DISTINCT Grad
                FROM Klijenti;
                
                
  2. Dohvatanje jedinstvenih imena autora knjiga iz tabele "Knjige":
                
                SELECT DISTINCT Autor
                FROM Knjige;
                
                

SQL SELECT

SELECT naredba u SQL-u koristi se za dohvatanje podataka iz baze podataka. Možete specificirati koje stupce/kolone želite dohvatiti i postaviti uslove kako biste filtrirali podatke prema određenim kriterijumima. Evo osnovne sintakse SELECT naredbe:

    
    SELECT col
    FROM tabela
    WHERE uslov;
    
    

col: Označava koje kolone želite dohvatiti. Možete navesti ime jedne ili više kolona, ili koristiti znak zvezdice (*) da biste dohvatili sve kolone.

tabela: Označava iz koje tabele želite dohvatiti podatke.

uslov: Definiše kriterijume za filtriranje podataka. Samo redovi koji ispunjavaju ovaj uslov će biti dohvaćeni.

Evo ponovljenih primera SELECT naredbi s korišćenjem "uslova":

Primeri SELECT naredbi:

  1. Dohvatanje svih podataka iz tabele "Osobe":
                
                SELECT * FROM Osobe;
                
                
  2. Dohvatanje samo imena i prezimena osoba iz tabele "Osobe":
                
                SELECT Ime, Prezime FROM Osobe;
                
                
  3. Dohvatanje osoba starijih od 30 godina:
                
                SELECT * FROM Osobe WHERE Godina_Rodenja < 1993;
                
                
  4. Dohvatanje svih studenata koji studiraju informatiku:
                
                SELECT * FROM Studenti WHERE Fakultet = 'Informatika';
                
                
  5. Dohvatanje imena, prezimena i proseka ocena za studente koji imaju prosek ocena veći od 4.0:
                
                SELECT Ime, Prezime, ProsjekOcjena FROM Studenti 
                WHERE ProsekOcena > 4.0;   
                

Šta je SQL?

SQL (Structured Query Language) je specijalizirani jezik za upravljanje relacijskim bazama podataka. Koristi se za komunikaciju s bazama podataka kako biste stvarali, upravljali, ažurirali i dohvatali podatke iz njih. SQL je standardiziran jezik i omogućava korisnicima da obavljaju različite operacije nad podacima, uključujući:

Dohvatanje podataka (SELECT)

SQL omogućava izradu upita za dohvatanje podataka iz tabela u bazi podataka. Na primer, možete napisati upit koji će vratiti sve redove ili samo određene redove koji ispunjavaju određene uslove.

Dodavanje podataka (INSERT)

Možete koristiti SQL za dodavanje novih redova u tabele baze podataka. Ovo je korisno za unos novih podataka.

Ažuriranje podataka (UPDATE)

SQL omogućava ažuriranje postojećih redova u tabelama. Možete promeniti vrednosti u određenim kolonama za određene redove.

Brisanje podataka (DELETE)

SQL se koristi za brisanje redova iz tabela. Možete brisati redove koji ispunjavaju određene kriterijume.

Stvaranje tabela (CREATE TABLE)

SQL omogućava definisanje strukture tabela, uključujući kolone, njihove tipove podataka i ograničenja.

Stvaranje baza podataka (CREATE DATABASE)

Možete koristiti SQL za stvaranje novih baza podataka, koje mogu sadržati više tabela.

Indeksi (INDEX)

SQL omogućava kreiranje indeksa koji ubrzavaju pretragu podataka.

Povezivanje tabela (JOIN)

SQL omogućava spajanje podataka iz više tabela kako biste dobili sveobuhvatne informacije.

Transakcije

SQL podržava transakcije koje omogućavaju da se niz SQL operacija izvršava kao jedna celina, često s ciljem očuvanja integriteta podataka.

SQL je ključan alat za razvoj, upravljanje i analizu podataka u relacijskim bazama podataka, a koristi se u mnogim aplikacijama i okruženjima, uključujući web aplikacije, mobilne aplikacije, analitiku podataka i mnoge druge oblasti.

HTML Forme

 HTML forme (<form>) se koriste za prikupljanje podataka od korisnika na web stranici. Obično se koriste za kreiranje kontaktnih obrazaca, pretrage, registracije i mnoge druge vrste interaktivnih elemenata na web stranicama. Ovde su osnovni koncepti i elementi HTML formi:

Osnovni koncepti:

  • <form> element: Osnovni okvir forme. Definiše početak i kraj forme.
  • <input> element: Koristi se za unos podataka. Može biti u obliku teksta, broja, dugmeta za slanje, i drugih vrsta.
  • <textarea> element: Omogućava unos više teksta u okviru forme.
  • <select> element: Koristi se za izbor iz padajućeg menija. Ovo se često koristi za izbor iz niza opcija.
  • <button> element: Dodaje dugme koje korisnici mogu kliknuti za slanje forme.
  • <label> element u HTML-u se koristi za obeležavanje (labeliranje) drugih elemenata, često za povezivanje sa elementom za unos podataka kao što su <input>, <textarea>, ili <select>. Labeliranje elemenata poboljšava pristupačnost i korisničko iskustvo tako što omogućava korisnicima da lakše razumeju šta treba uneti u određeno polje.

Atributi forme: Formama se mogu dodati različiti atributi kao što su action (adresa za slanje podataka), method (HTTP metoda za slanje podataka, obično "GET" ili "POST"), i drugi atributi koji definišu ponašanje forme.

Primer forme:

Evo jednostavnog primera forme za unos korisničkog imena i lozinke:

<!DOCTYPE html>

<html>

<head>

    <title>Prijava</title>

</head>

<body>

    <h1>Prijava na sistem</h1>

    <form action="procesiranje.php" method="POST">

        <label for="korisnickoIme">Korisničko ime:</label>

        <input type="text" id="korisnickoIme" name="korisnickoIme" required>


        <label for="lozinka">Lozinka:</label>

        <input type="password" id="lozinka" name="lozinka" required>


        <button type="submit">Prijavi se</button>

    </form>

</body>

</html>

U ovom primeru, forma sadrži dva polja za unos korisničkog imena i lozinke, kao i dugme za slanje podataka. Kada korisnik popuni formu i klikne na dugme "Prijavi se," podaci će biti poslati na adresu procesiranje.php putem HTTP POST metode (može se koristiti i GET metoda) radi dalje obrade.


HTML forme su osnovni alat za interakciju sa korisnicima na web stranicama i omogućavaju prikupljanje, obradu i slanje podataka sa web stranica.


<input> element

<input> element se koristi za unos podataka na web stranici, i može imati različite tipove u zavisnosti od vrste podataka koja se očekuje od korisnika. Ovde su neki od najčešće korišćenih tipova <input> elemenata:

Text (tekstualni unos):

<input type="text" name="ime" id="ime" value="Unesite svoje ime">

Ovaj tip omogućava korisnicima da unesu tekstualne podatke kao što su ime, prezime, ili druge informacije.


Password (lozinka):

<input type="password" name="lozinka" id="lozinka">

Ovaj tip se koristi za unos lozinke, a unos će biti sakriven zvezdicama ili tačkama radi bezbednosti.


Email (e-mail adresa):

<input type="email" name="email" id="email">

Ovaj tip se koristi za unos e-mail adrese i može automatski proveriti da li je adresa u ispravnom formatu.


Number (broj):

<input type="number" name="godine" id="godine">

Ovaj tip omogućava unos brojeva, a može se postaviti i minimalna i maksimalna vrednost.


Date (datum):

<input type="date" name="datum" id="datum">

Ovaj tip omogućava unos datuma. Korisnici mogu odabrati datum iz kalendara.


Checkbox (potvrdni okvir):

<input type="checkbox" name="uslovi" id="uslovi" value="da">

Ovaj tip omogućava korisnicima da označe/odbiju određene opcije. Može se koristiti za prihvatanje uslova ili odabir više opcija.


Radio (radio dugme):

<input type="radio" name="pol" id="muski" value="muski"> Muški

<input type="radio" name="pol" id="zenski" value="zenski"> Ženski

Ovaj tip se koristi kada korisnici trebaju da odaberu samo jednu opciju iz više ponuđenih.


File (fajl):

<input type="file" name="slika" id="slika">

Ovaj tip omogućava korisnicima da odaberu fajl sa svog uređaja.


Submit (dugme za slanje):

<input type="submit" value="Pošalji">

Ovaj tip se koristi za slanje podataka sa forme na server.


Button (obično dugme):

<input type="button" value="Klikni me">

Ovaj tip se koristi za stvaranje dugmeta koje može izvršiti JavaScript funkciju na klik.


Hidden (sakriveno polje):

<input type="hidden" name="id" value="123">

Ovaj tip omogućava sakrivanje vrednosti koja se šalje na server.


Ovo su samo neki od najčešće korišćenih tipova <input> elemenata. Svaki od njih ima svoju svrhu i koristi se u zavisnosti od potreba forme i vrste podataka koju treba prikupiti od korisnika.

HTML Head

<head> element u HTML-u je deo web stranice koji sadrži metapodatke i informacije o dokumentu, ali se ne prikazuje direktno na stranici. Ovaj element se koristi za postavljanje različitih informacija o web stranici, kao što su naslov, karakterna šifra, veze ka spoljnim resursima i druge metapodaci. Evo objašnjenja i primera <head> elementa:

Objašnjenje:

  • Naslov stranice (title): <title> oznaka u <head> se koristi za postavljanje naslova stranice koji se prikazuje u traci za naslov web pregledača. Naslov je važan jer pomaže korisnicima da identifikuju sadržaj stranice i poboljšava SEO (optimizaciju za pretraživače).
  • Karakterna šifra (character set): <meta charset="UTF-8"> oznaka se koristi za definisanje karakterne šifre koja se koristi na stranici. UTF-8 karakterna šifra je često preporučena jer podržava mnoge jezike i karaktere.
  • Veze ka spoljnim resursima: <link> oznake se koriste za povezivanje sa spoljnim resursima kao što su CSS fajlovi (za stilizaciju), ikone (favicon), i drugi resursi. Takođe, <script> oznake se koriste za uključivanje JavaScript fajlova.


Primeri:

<!DOCTYPE html>

<html>

<head>

    <title>Primer Head Elementa</title>

    <meta charset="UTF-8">

    <link rel="stylesheet" type="text/css" href="styles/main.css">

    <link rel="icon" href="favicon.ico" type="image/x-icon">

</head>

<body>

    <h1>Dobrodošli na moju web stranicu</h1>

    <p>Ovo je primer korišćenja &lt;head&gt; elementa.</p>

</body>

</html>

U ovom primeru, <head> element sadrži naslov stranice ("Primer Head Elementa"), karakternu šifru (UTF-8), i veze ka spoljnim resursima (CSS fajl i favicon ikona). Ovi metapodaci pomažu web pregledačima i pretraživačima da razumeju i obrade stranicu na odgovarajući način.

HTML Putanje do fajlova

HTML putanje do fajlova (File Paths) se koriste da biste naveli putanju do resursa kao što su slike, stilovi (CSS), JavaScript fajlovi i druge datoteke koje se koriste na web stranici. Postoje dve osnovne vrste HTML putanja: apsolutne (absolute file paths) i relativne (relative file paths).

Apsolutne putanje (Absolute File Paths): Apsolutne putanje počinju od korenskog direktorijuma ili URL-a. One precizno određuju lokaciju resursa nezavisno od trenutnog direktorijuma u kojem se nalazi HTML fajl. Na primer:

Apsolutna putanja za URL adrese: https://www.example.com/images/pic.jpg

Apsolutna putanja za direktorijume na serveru: /images/pic.jpg

Apsolutna putanja za lokalne fajlove: C:/Users/User/Documents/myfile.txt

Relativne putanje (Relative File Paths): Relativne putanje počinju od trenutnog direktorijuma i koriste se za navigaciju do resursa u odnosu na trenutni HTML fajl. Postoje različite vrste relativnih putanja:


Relativna putanja do istog direktorijuma: pic.jpg (nema predstava direktorijuma, pa se pretpostavlja da je u istom direktorijumu kao HTML fajl).

Relativna putanja do poddirektorijuma: images/pic.jpg (slika se nalazi u poddirektorijumu "images" u odnosu na trenutni direktorijum).

Relativna putanja za prelazak na nadređeni direktorijum: ../pic.jpg (prikazuje sliku u direktorijumu iznad trenutnog).

Primer relativnih putanja:

<!DOCTYPE html>

<html>

<head>

    <title>Primer HTML Putanja</title>

    <link rel="stylesheet" type="text/css" href="styles/main.css">

</head>

<body>

    <h1>Slika iz istog direktorijuma</h1>

    <img src="pic.jpg" alt="Slika">


    <h2>Slika iz poddirektorijuma</h2>

    <img src="images/pic.jpg" alt="Slika u poddirektorijumu">


    <h3>Slika iz nadređenog direktorijuma</h3>

    <img src="../pic.jpg" alt="Slika iznad trenutnog direktorijuma">

</body>

</html>

Ovi primeri ilustruju kako se koriste relativne putanje za uključivanje slika i stilova na web stranici. Relativne putanje su često praktičnije jer omogućavaju da se lakše premeste ili prenesu celokupne web stranice na različite lokacije, dok apsolutne putanje zavise od specifičnih adresa i direktorijuma.

HTML JavaScript

JavaScript se koristi za dodavanje dinamičkog ponašanja na web stranici. Na primer, možete koristiti JavaScript za validaciju forme, animaciju, interaktivne elemente i još mnogo toga. Evo osnovnog primera koji koristi JavaScript za prikaz poruke korisniku:

<!DOCTYPE html>

<html>

<head>

    <title>Moj Prvi HTML i JavaScript Primer</title>

</head>

<body>

    <h1>Kliknite na dugme</h1>

    <button id="mojeDugme">Klikni me</button>

    <p id="poruka"></p>


    <script>

        // JavaScript kod

        document.getElementById("mojeDugme").addEventListener("click", function() {

            document.getElementById("poruka").innerText = "Hvala što ste kliknuli!";

        });

    </script>

</body>

</html>

U ovom primeru, JavaScript se koristi da dodamo "slušalac događaja" na dugme. Kada korisnik klikne na dugme, JavaScript reaguje i menja sadržaj paraagrafa sa ID-om "poruka".

Kada kombinujete HTML i JavaScript, možete stvoriti interaktivne i dinamičke web stranice koje omogućavaju korisnicima da komuniciraju sa sadržajem i pruže bogato korisničko iskustvo.