SQL_zadaci sredjeni 2008 baze podataka

Слични документи
01 SUBP

03 SUBP

Fakultet tehničkih nauka, Novi Sad Predmet: ISIBP

Upitni jezik SQL

Introduction to Programming

UPITI NAD JEDNOM TABELOM 1. Izdvojiti šifre svih knjiga select K_SIF from K 2. Izdvojiti šifre knjiga iz tabele K uz imenovanje kolone select K_SIF as

Baza fakultet sadrži 3 tabele: tabela studenti sadrzi informacije o studentima Njeni atributi su: indeks indeks studenta (primarni kljuc) ime ime stud

Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba

Introduction to Programming

Microsoft Word - MySQL_3.doc

Tutoring System for Distance Learning of Java Programming Language

Introduction to Programming

Slide 1

Microsoft PowerPoint - Prve_i_druge_Vezbe.ppt [Compatibility Mode]

Baza podataka

SQL Agregacija Jennifer Widom

Програмирај!

Microsoft PowerPoint - 6. Query Builder.pptx

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

АГЕНЦИЈА ЗА БАНКАРСТВО РЕПУБЛИКЕ СРПСКЕ УПУТСТВО ЗА ЕЛЕКТРОНСКО ДОСТАВЉАЊЕ ПОДАТАКА ИЗ ОБЛАСТИ РЕСТРУКТУРИРАЊА БАНАКА Бања Лука, јули године

Model podataka

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

PROMENLJIVE, TIPOVI PROMENLJIVIH

Introduction to Programming

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

Uvod u računarstvo 2+2

SKRIPTE EKOF 2019/20 skripteekof.com Lekcija 1: Brojevni izrazi Lekcija 1: Brojevni izrazi Pregled lekcije U okviru ove lekcije imaćete priliku da nau

Introduction to Programming

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Primenjeno programiranje - Vežbe

Microsoft Word - Odluka o osnovnim elementima naloga za placanje _3_.doc

Grananje u programu predavač: Nadežda Jakšić

Microsoft Word - 1. REALNI BROJEVI- formulice

Microsoft Word - 02 Elementi programskog jezika Pascal

Slide 1

УНИВЕРЗИТЕТ У ИСТОЧНОМ САРАЈЕВУ П Р А В И Л А НОРМАТИВНО-ПРАВНЕ ТЕХНИКЕ ЗА ИЗРАДУ OПШТИХ АКАТА УНИВЕРЗИТЕТА У ИСТОЧНОМ САРАЈЕВУ Источно Сарајево, деце

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

Database Programming with SQL kurs 2017 database design and programming with sql students slajdovi 17-1 Controlling User Access Davanje dozvole (grant

Прва економска школа Београд РЕПУБЛИЧКО ТАКМИЧЕЊЕ ИЗ СТАТИСТИКЕ март године ОПШТЕ ИНФОРМАЦИЈЕ И УПУТСТВО ЗА РАД Укупан број такмичарских

Classroom Expectations

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

PHP proširenja za rad sa bazama podataka Postoje pojedinačna proširenja za različite tipove baza podataka sa svojim bibliotekama funkcija npr. postoji

ALIP1_udzb_2019.indb

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Uvod u računarstvo 2+2

Упутство за пријављивање испита путем интернета Да би студент могао да пријави испит путем интернета мора прво да се пријави. Пријављивање се врши у п

070-ALIP2-udzbenik.indb

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

No Slide Title

Microsoft Word - 1.Operacije i zakoni operacija

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Орт колоквијум

untitled

8 2 upiti_izvjesca.indd

PowerPoint Presentation

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

PowerPoint Presentation

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ НА КРАЈУ ОСНОВН

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ и технолошког развоја ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ НА КРАЈУ ОСНОВН

Teorija skupova - blog.sake.ba

М А Т Е М А Т И К А Први разред (180) Предмети у простору и односи међу њима (10; 4 + 6) Линија и област (14; 5 + 9) Класификација предмета према свој

Programski jezik C

Microsoft Word - Plan numeracije preciscen tekst

P1.2 Projektovanje asemblera

Algoritmi i arhitekture DSP I

Microsoft Word - Obrazac Izvestaj IR 2012 Apoteka Beograd.doc

My_P_Red_Bin_Zbir_Free

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ПРОБНИ ЗАВРШНИ ИСПИТ школска

Strukture predavač: Nadežda Jakšić

Kombinatorno testiranje

Повезивање са интернетом

Шифра ученика: Укупан број бодова: Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ и технолошког РАзвоја ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСП

Microsoft Word - WP_kolokvij_2_rjesenja.doc

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

Школа Ј. Ј. Змај Свилајнац МЕСЕЧНИ ПЛАН РАДА ЗА СЕПТЕМБАР Школска 2018 /2019. Назив предмета: Информатика и рачунарство Разред: 5. Недељни број часова

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

08 RSA1

MATEMATIKA EKSTERNA PROVJERA ZNANJA UČENIKA NA KRAJU III CIKLUSA OSNOVNE ŠKOLE UPUTSTVO VRIJEME RJEŠAVANJA TESTA: 70 MINUTA Pribor: grafitna olovka i

LAB PRAKTIKUM OR1 _ETR_

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Универзитет у Београду - Фармацеутски факултет

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ТЕСТ МАТЕМАТИКА школска 2015/

PDO

Шифра ученика: Укупан број бодова: Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ и технолошког РАзвоја ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСП

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ НА КРАЈУ ОСНОВН

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Microsoft Word - Upis kandidata ??S sep

Рационални Бројеви Скуп рационалних бројева 1. Из скупа { 3 4, 2, 4, 11, 0, , 1 5, 12 3 } издвој подскуп: а) природних бројева; б) целих броје

УПУТСТВО ЗА КОРИСНИКА Приступ локацији часописа Српски архив за целокупно лекарство добија се преко internet adrese: Након

Dijagrami sekvenci

ОДГОВОРИ НА НАЈЧЕШЋЕ ПОСТАВЉАНА ПИТАЊА У ВЕЗИ СА ПРИМЕНОМ ОДЛУКЕ О ИЗМЕНАМА И ДОПУНИ ОДЛУКЕ О ИЗВЕШТАВАЊУ БАНАКА ( Службени гласник РС бр. 8/2019 у да

КОПАОНИЧКА ШКОЛА ПРИРОДНОГ ПРАВА СЛОБОДАН ПЕРОВИЋ 32 година обавештава правничку и другу научну и стручну јавност да расписује К О Н К У Р С За пријем

Pravilnik o sadržaju poreskog bilansa i drugim pitanjima od značaja za način utvrđivanja poreza na dohodak građana na prihode od samostalne delatnosti

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Транскрипт:

ER model šeme baze podataka: (Sef) (0, N) (0, N) RADNIK (0, 1) SEF (0, N) (Podredjeni) RUKOVODI RADI _NA (1, 1) (0, N) PROJEKAT Šema relacione baze podataka: RADNIK({Mbr, Prez, Ime, Sef, Plata, Datr}, {Mbr}) PROJEKAT({Sifp, Nazp, Ruk}, {Sifp}) RADPROJ({Mbr, Sifp, BrSati}, {Mbr+Sifp}) RADNIK [Sef] RADNIK [Mbr] PROJEKAT [Ruk] RADNIK [Mbr] RADPROJ [Mbr] RADNIK [Mbr] RADPROJ [Sifp] PROJEKAT [Sifp] Null (PROJEKAT, Ruk) = 1

Komande okruženja CONNECT kor.ime/pass[@adresa_servera] DISCONNECT ED otvaranje editora R pokretanje sadržaja editora CLEAR SCREEN DESC ime tabele EXIT 1. UPITI NAD JEDNOM TABELOM SELECT * FROM <naziv relacije Prikaz svih torki date relacije vrednosti svih obeležja 1. Prikazati sadržaj svake od relacija (tabela). SELECT * SELECT <lista obelezja> FROM <naziv relacije> <lista obelezja> - niz naziva obeležja, razdvojenih zarezom, iza poslednjeg elementa u nizu NE stavlja se zarez, redosled navoñenja obeležja je proizvoljan 1. Prikazati prezimena i imena svih radnika. SELECT prez, ime Opcija DISTINCT SELECT DISTINCT <lista obelezja> FROM <naziv relacije> 1. Prikazati sva različita prezimena i imena svih radnika. SELECT DISTINCT prez, ime 2

2. Prikazati sve različite plate radnika. SELECT DISTINCT plata 3. Prikazati različite šifre projekata na kojima je angažovan bar jedan radnik. SELECT DISTINCT Sifp FROM radproj; SELECT <izraz_1 [AS] [ naziv_1]> {, <izraz_n [AS] [ naziv_n]>} FROM <naziv relacije> Operatori: +, -, *, /, Operandi: obelezja, funkcije, izrazi Komentar značenja zagrada: < > - označavaju da je potrebno upisati neki konkretan naziv ili izraz, naravno, bez navodjenja ovih zagrada [ ] označavaju opcione delove naredbe { } označavaju deo naredbe koji se moze ponavljati 0, 1, 2 ili n puta 1. Prikazati prezimena i imena radnika i njihove plate uvecane za 20%. *1.20 2. Prikazati prezimena i imena radnika i njihove plate uvećane za 20%, pri čemu naziv treće kolone treba da bude Povisica. *1.20 as Povisica, plata*1.20 AS "plata sa povisicom" FROM radnik; 3. Prikazati prezimena i imena radnika i njihove plate uvecane za 20%, pri cemu naziv trece kolone treba da bude Povecanje plate. *1.20 as Povecanje plate 3

4. Prikazati prezimena i imena radnika, ali u jednoj koloni, sa jednim praznim mestom izmedju imena i prezimena. SELECT ime prez 2. Prikazati maticni broj i u jednoj koloni ime i prezime radnika SELECT mbr AS "maticni broj", ime ' ' prez AS radnik FROM radnik; SORTIRANJE SELECT <lista izraza> FROM <naziv relacije> ORDER BY <obelezje [ASC DESC]> {, <obelezje [ASC DESC]>} 1. Prikazati prezimena i imena radnika i njihove plate, sortirano po rastućem redosledu plata. ORDER BY plata; 2. Prikazati prezimena i imena radnika i njihove plate, sortirano po rastućem redosledu plata i unutar iste plate po opadajućem redosledu prezimena. ORDER BY plata, prezime DESC; SELEKCIJA torki SELECT <lista izraza> FROM <naziv relacije> WHERE <uslov selekcije> Operandi uslova: izrazi Operatori: <, >, <=, >=, =,!=, <> 1. Prikazati vrednosti svih obeležja radnika sa datim prezimenom (Mirkovic). SELECT * WHERE prez = Mirkovic ; 4

2. Prikazati prezimena, imena i plate radnika sa datim prezimenom (Mirkovic). WHERE prez= Mirkovic ; WHERE LOWER (prez)= mirkovic ; WHERE UPPER(prez)= MIRKOVIC ; 3. Prikazati prezimena, imena i plate radnika sa platom vecom od 50000. WHERE plata > 50000; 4. Prikazati prezimena, imena i plate radnika sa platom vecom od 50000 i manjom od 60000. WHERE plata > 50000 and plata < 60000; Dodatni operatori poredjenja: x BETWEEN y AND z x [NOT] LIKE <uzorak> x IS [NOT] NULL _ zamena za jedan, % za vise znakova Operatori testa pripadnosti: x [NOT] IN (<lista vrednosti>) x *ANY (<lista vrednosti>) x *ALL (<lista vrednosti>) * {<, >, <=, >=, =,!=} Operator egzistencije vrednosti: [NOT] EXISTS (<lista vrednosti>) Prioritet logickih operatora: 1. Operatori poredjenja, pripadnosti i egzistencije/ 2. NOT/ 3. AND/ 4. OR 5

4. Prikazati prezimena, imena i plate radnika sa platom vecom od 50000 i manjom od 60000. WHERE plata BETWEEN 50000 AND 60000; 5. Prikazati prezimena, imena i plate radnika koji se zovu Petar ili Dragana. WHERE ime = Petar or ime = Dragana ; ILI WHERE ime IN ( Petar, Dragana ); ILI WHERE ime = ANY ( Petar, Dragana ); 5. Prikazati prezimena, imena i plate radnika čije je drugo i poslednje slovo imena a. WHERE ime LIKE _a%a ; 6. Prikazati prezimena, imena i plate radnika koji se ne zovu ni Petar ni Dragana. WHERE ime <> Petar and ime <> Dragana ; ILI WHERE ime NOT IN ( Petar, Dragana ); ILI WHERE ime <> ALL ( Petar, Dragana ); 7. Prikazati radnike u formatu: Radnik: Jovic Jovan ima platu: 15670 dinara. SELECT Radnik: prez ime ima platu: plata dinara. AS Plate radnika 8. Prikazati sve radnike koji zaradjuju vise od 15000 i koji nemaju svog rukovodioca. 6

SELECT * WHERE plata > 15000 AND sef IS NULL 9. Prikazati sve radnike koji imaju rukovodioca. SELECT * WHERE sef IS NOT NULL SQL FUNKCIJE naziv_funkcije(agr1, arg2,...argn) funkcija uvek ima vrednost datog tipa VRSTE FUNKCIJA: karakter funkcije numericke funkcije datumske funkcije funkcije za konverziju podataka grupne funkcije KARAKTER FUNKCIJE: LOWER(char) UPPER(char) LTRIM(char) RTRIM(char) CONCAT(char1,char2) REPLACE(char, trazeni string, zamena) SUBSTR(char, m, n) LENGTH(char) vraca numericku vrednost NUMERICKE FUNKCIJE: ROUND(n[,m]) MOD(m,n) SIGN(n) ABS(n) SIN, COS,TAN, SQRT... DATUMSKE FUNKCIJE: ADD_MONTHS(d, n) MONTHS_BETWEEN(d1, d2) SYSDATE 7

FUKCIJE ZA KONVERZIJU PODATAKA TO_CHAR(d[,fmt]) TO_CHAR(n[,fmt]) TO_DATE(char[,fmt]) TO_NUMBER(char[,fmt]) GRUPNE FUNKCIJE AVG([DISTINCT ALL]n) COUNT({* [DISTINCT ALL] izraz}) MAX(izraz) MIN(izraz) SUM([DISTINCT ALL]izraz) ( - označava da se moze koristiti samo jedna od navedenih opcija) 1. Prikazati prosečnu platu radnika. SELECT AVG(plata) 2. Prikazati najveće angažovanje (broj sati) radnika na projektu. SELECT MAX(brsati) FROM radproj; 3. Prikazati broj različitih rukovodilaca projekata (koliko je radnika angažovanih kao rukovodioci projekata). SELECT COUNT(DISTINCT ruk) FROM projekat; 4. Prikazati ukupan broj radnika. SELECT COUNT(*) AS "Broj radnika" 5. Prikazati ukupan broj radnika koji imaju šefa. SELECT COUNT(sef) 6. Prikazati prezimena i imena radnika i matični broj šefa, prikazujući 0 u slučaju kada je matični broj šefa NULL. SELECT prez, ime, NVL(sef,0) AS Rukovodilac 7. Prikazati matični broj, prezime velikim slovima i treće i četvrto slovo prezimena za svakog radnika. 8

SELECT mbr, UPPER(prez), SUBSTR(prez, 3,2) 8. Prikazati prezimena i imena radnika i njihove plate uvećane za 6.33% zaokružene na jednu decimalu. SELECT prez, ime, ROUND(plata*1.633, 1) AS Povisica 9. Prikazati prezimena i imena radnika i matični broj njihovog šefa, pri čemu za radnike koje nemaju šefa treba da piše DIREKTOR. SELECT prez, ime, NVL(TO_CHAR(sef), DIREKTOR ) Grupisanje podataka tabele po kolonama sa istom vrednošću SELECT <lista izraza> FROM <naziv relacije> GROUP BY <obelezje> {, <obelezje>} SELECT sifp, mbr FROM radproj GROUP BY sifp, mbr; 1. Za svaki projekat prikazati šifru projekta i broj radnika koji su na njemu angažovani SELECT sifp, COUNT(mbr) FROM radproj GROUP BY sifp; 2. Za svakog radnika prikazati matični broj i broj projekata na koji je angažovan (pa može maksimalni ili minimalni broj sati angažovanja ili prosečno angažovanje datog radnika) SELECT mbr, COUNT(sifp) FROM radproj GROUP BY mbr; 3. Za svakog radnika koji je sef prikazati matični broj i broj radnika kojima je šef i njihovu prosečnu platu SELECT sef, COUNT(mbr) GROUP BY sef; 9

Selektovanje grupa podataka SELECT <lista izraza> FROM <naziv relacije> GROUP BY <obelezje> {, <obelezje>} HAVING <uslov selekcije grupe> (WHERE se odnosi na torke, a HAVING na grupe torki i uvek ide uz GROUP BY) 1. Prikazati šifru projekta i prosečan broj sati angažovanja radnika, za projekte na kojima je angažovano više od 3 radnika. SELECT sifp, AVG(brsati) FROM radproj GROUP BY sifp HAVING COUNT(mbr) > 2; 2. Prikazati šifru projekta i prosečan broj sati angažovanja radnika, za projekte čija je prva cifra različita od 1 i na kojima je angažovano više od 3 radnika. SELECT sifp, AVG(brsati) FROM radproj WHERE SUBSTR(TO_CHAR(sifp),1,1)<> 1 GROUP BY sifp HAVING COUNT(mbr) > 2; Spisak naredbi za formiranje i popunjavanje tabeli radnik, projekat i radproj: CREATE TABLE radnik (mbr number(6) NOT NULL, prez varchar(12) NOT NULL, ime varchar(12) NOT NULL, sef number(6), plata number(15), datr date ); CREATE Table projekat (sifp number(6) NOT NULL, nazp varchar(20) NOT NULL, ruk number(6) ); CREATE TABLE radproj (mbr number(6) NOT NULL, 10

sifp number(6) NOT NULL, brsati number(2) ); CREATE UNIQUE INDEX idx_radnik ON radnik (mbr asc); CREATE UNIQUE INDEX idx_projekat ON projekat (sifp); CREATE UNIQUE INDEX idx_radproj ON radproj (mbr, sifp); VALUES (100, 'Mitrovic','Milan',null,75000, '31-05-1975'); VALUES (101, 'Mirkovic','Dragana',100,65000, '12-06-1978'); VALUES (102, 'Filipovic','Petar',100,65000, '17-11-1979'); VALUES (103, 'Kljajic','Marija',100,65000, '18-06-1979'); VALUES (104, 'Psodorov','Laza',101,45000, '19-10-1984'); VALUES (105, 'Kapidzic','Pera',101,45000, '21-01-1983'); VALUES (106, 'Peric','Sandra',102,45000, '27-12-1980'); VALUES (107, 'Lazic','Dragana',103,55000, '12-05-1980'); VALUES (108, 'Nadj','Ana',103,55000, '14-11-1986'); VALUES (109, 'Kopanja','Maja',103,25000, '28-10-1988'); VALUES (110, 'Mirkovic','Aleksandar',102,25000, '12-01-1980'); VALUES (111, 'Bojic','Petar',102,27000, '10-12-1982'); INSERT INTO Projekat VALUES (200, 'IS banke',100); INSERT INTO Projekat VALUES (201, 'IS osig drustva',101); INSERT INTO Projekat VALUES (202, 'IS skole',101); INSERT INTO Projekat VALUES (203, 'IS kafica',101); 11

INSERT INTO Projekat VALUES (204, 'IS Kafane',102); INSERT INTO Projekat VALUES (205, 'IS fakulteta',103); VALUES (100, 200,4); VALUES (101, 201,6); VALUES (101, 202,7); VALUES (101, 203,16); VALUES (102, 204,12); VALUES (103, 205,5); VALUES (107, 201,13); VALUES (108, 201,3); VALUES (109, 202,21); VALUES (110, 202,14); VALUES (111, 203,8); VALUES (110, 203,7); VALUES (111, 204,35); VALUES (109, 205,44); VALUES (109, 204,47); VALUES (108, 205,44); 12

Drugi deo SPAJANJE TABELA SELECT <lista izraza> FROM <lista tabela> <lista tabela>: <naziv tabele> [<sinonim>] {, <naziv tabele> [<sinonim>]} 1. Prikazati sve moguće kombinacije radnika i projekata. SELECT *, projekat; ILI SELECT * r, projekat p; SELECT <lista izraza> FROM <lista tabela> WHERE <uslov> Operandi uslova: izrazi Operatori: <, >, <=, >=, =,!=, <> 1. Prikazati nazive svih projekata i prezime i ime njihovih rukovodilaca. SELECT nazp, prez, ime, projekat WHERE ruk = mbr; 2. Prikazati prezimena i imena onih radnika koji su rukovodioci nekog projekta. SELECT DISTINCT prez, ime, projekat WHERE ruk = mbr; 3. Prikazati prezimena i imena onih radnika koji su rukovodioci nekog projekta, sortirane po rastućem prezimenu. SELECT DISTINCT prez, ime, projekat WHERE ruk = mbr ORDER BY prez; 13

4. Prikazati matične brojeve, prezimena i imena radnika, šifre i nazive projekata na kojima su angažovani i broj sati angažovanja. SELECT r.mbr, prez, ime, p.sifp, brsati r, radproj rp, projekat p WHERE r.mbr = rp.mbr AND rp.sifp = p.sifp; 5. Prikazati imena i prezimena radnika koji rade na projektu sa šifrom 201 i urediti ih saglasno opadajućem redosledu imena. SELECT prez, ime r, radproj rp WHERE r.mbr = rp.mbr and rp.sifp = 201 ORDER BY ime DESC; 6. Prikazati nazive projekata na kojima radi radnik sa datim imenom i prezimenom (Dragana Mirkovic). SELECT nazp r, radproj rp, projekat p WHERE prez = Mirkovic AND ime = Dragana AND r.mbr = rp.mbr AND rp.sifp = p.sifp; 7. Prikazati nazive projekata i ukupan broj sati angažovanja na projektima na kojima je ukupno angažovanje veće od 10 sati. SELECT nazp, SUM(brsati) FROM projekat p, radproj rp WHERE p.sifp=rp.sifp GROUP BY nazp HAVING SUM(brsati) > 10; 8. Prikazati prezimena i imena radnika i broj projekata na kojima su angažovani, za one radnike čiji je prosečan broj sati angažovanja na projektima veći od 20 sati. SELECT prez, ime, COUNT(sifp) r, radproj rp WHERE r.mbr = rp.mbr GROUP BY prez, ime HAVING AVG(brsati) > 20; sva obeležja koja se navode u SELECT, moraju se navesti u GROUP BY Spajanje tabele same sa sobom SELECT <lista izraza> FROM <lista tabela> 14

Ista tabela se u <lista tabela> pojavljuje najmanje dva puta sa različitimm sinonima (ulogama) 1. Za svakog radnika prikazati njegov matični broj, prezime, ime i prezime njegovog šefa. SELECT r.mbr, r.prez, r.ime, s.prez as "prezime sefa" r, radnik s WHERE r.sef = s.mbr; 2. Za sve rukovodioce radnika izlistati prezime, ime i broj radnika kojima rukovode. SELECT s.prez, s.ime, COUNT(*) r, radnik s WHERE r.sef = s.mbr GROUP BY s.prez, s.ime; UGNJEŽDENI UPITI SELECT <lista izraza> FROM <lista tabela> WHERE <obelezje> [NOT] [IN *[ANY] *[ALL]] (SELECT... FROM...) * {<,<=,>,>=,=,!=} 1. Prikazati prezimena, imena i plate radnika koji zaradjuju više od prosečne plate. WHERE plata > ANY (SELECT AVG(plata) ); 2. Prikazati prezimena, imena i plate radnika koji ne zaradjuju minimalnu (maksimalnu) platu. WHERE plata <> ALL (SELECT MIN(plata) ); WHERE plata <> (SELECT MIN(plata) ); 3. Prikazati prezimena, imena i plate radnika čije je mesečno angažovanje na nekom od projekata manje ili jednako angažovanju bilo kog radnika na projektu sa šifrom 202. 15

r, radproj rp WHERE r.mbr = rp.mbr AND rp.brsati <= ALL (SELECT DISTINCT brsati FROM radproj WHERE sifp=202); 4. Prikazati prezimena, imena i platu svih radnika koji nisu angažovani ni na jednom projektu. WHERE mbr NOT IN (SELECT DISTINCT mbr FROM radproj); ZAVISNI UGNJEŽDENI UPITI 1. Prikazati matične brojeve, prezimena, imena i plate radnika, čiji je broj sati angažovanja na nekom projektu veći od prosečnog broja sati angažovanja na tom projektu. SELECT r.mbr, r. prez, r.ime, r.plata r, radproj rp WHERE r.mbr = rp.mbr AND rp.brsati > ANY (SELECT AVG(brsati) FROM radproj rp1 WHERE rp.sifp=rp1.sifp); 2. Prikazati prezimena i imena radnika koji ne rade na projektu 201. SELECT prez, ime r WHERE NOT EXISTS (SELECT rp.mbr FROM radproj rp WHERE r.mbr = rp.mbr AND rp.sifp=201); 3. Prikazati prezimena i imena radnika koji ne rade ni na jednom projektu. SELECT prez, ime r WHERE NOT EXISTS (SELECT rp.mbr FROM radproj rp WHERE r.mbr = rp.mbr); 4. Prikazati prezimena i imena radnika koji nisu rukovodioci projekata. SELECT prez, ime r WHERE NOT EXISTS (SELECT DISTINCT p.ruk FROM projekat p WHERE p.ruk = r.mbr); 16

5. Prikazati prezime i ime najstarijeg rukovodioca projekta. SELECT prez, ime r, projekat p WHERE r.mbr=p.ruk and NOT EXISTS(SELECT * r1, projekat p1 WHERE r1.mbr=p1.ruk and r1.datr>r.datr) 6. Prikazati prva četiri radnika po visini zarade u preduzeću SELECT * r1 WHERE 4> (SELECT COUNT(*) r2 WHERE r2.plata>r1.plata); 7. Prikazati matične brojeve, prezimena, imena i plate radnika koji su angažovani na svakom projektu. SELECT mbr, ime, prez, plata r WHERE NOT exists (SELECT p.sifp FROM projekat p WHERE p.sifp NOT IN (SELECT rp.sifp FROM radproj rp WHERE rp.sifp=p.sifp AND r.mbr=rp.mbr)); Rešenje je u formi: SELECT1(SELECT2(SELECT3)) Gde je: SELECT1 - njime se selektuju se radnici koji su angažovani na svakom projektu (tj. ne postoji projekat na kojem nisu angažovani) SELECT2 - njime se selektuju se svi projekti na kojima ne radi radnik za kojeg se trenutno ispituje situacija (projekti nisu u skupu projekata na kojima radnik radi ) SELECT3 - njime se selektuju se svi projekti na kojima radi radnik za kojeg se trenutno ispituje situacija 17

Treći deo Osnovni SQL tipovi podataka Tip podataka NUMBER(p,s) Opis Broj sa maksimalno p cifara od kojih je s maksimalni broj decimala (1 < p < 38) (- 84 < s < 127) VARCHAR2(s) Promenjivi niz karaktera maksimalne dužine s (1 < s < 4000) DATA Datum i vreme za period od 1. januar 4712 p.n.e do 31. decembra 9999. godine CHAR(s) LONG CLOB RAW i LONG RAW BLOB BFILE ROWID Fiksni niz karaktera dužine s (1 < s < 2000) Promenjivi niz karaktera (do 2GB) Niz karaktera (do 4 GB) Promenjivi binarni niz Binarni niz (do 4 GB) Binarni podaci smešteni u spoljnom fajlu Brojni sistem sa osnovom 64 koji predstavlja jedinstvenu adresu vrste u svojoj tabeli FUNKCIJE Dve vrste funkcija: jednoredne funkcije i grupne funkcije Jednoredne funkcije se dele u pet podgrupa: funkcije nad karakternim tipovima funkcije nad brojevnim tipovima funkcije nad datumskim tipovima funkcije za konverziju opšte funkcije Funkcije nad karakternim tipovima: Funkcije za manipulaciju veličine slova (LOWER, UPPER, INITCAP) Funkcije za manipulaciju karaktera (CONCAT, SUBSTR, LENGTH, INSTR, LPAD RPAD, TRIM, REPLACE) 18

Funkcija Upotreba LOWER (kolona/izraz) Prebacuje sve karaktere u mala slova UPPER (kolona/izraz) Prebacuje sve karaktere u velika slova INITCAP (kolona/izraz) Sva početna slova reči prebacuje u velika, ostala u mala slova CONCAT (kolona1/izraz1, kolona2/izraz2) Spaja dva niza karaktera (kao operator ) SUBSTR (kolona/izraz, m [,n]) Vraća podstring počev od pozicije m dužine n (ako je m negativno, broji od kraja stringa, ako je n izostavljeno, vraća podstring on m-te pozicije do kraja) LENGHT (kolona/izraz) Vraća broj karaktera izraza INSTR (kolona/izraz, string [,m] [,n]) Vraća poziciju n-te pojave podstringa počev od m-tog karaktera, default vrednost za m i n je 1 LPAD (kolona/izraz, n, string ) Dopunjava niz karaktera sa pojavama niza RPAD (kolona/izraz, n, string ) karaktera string do dužine n sa leve-desne TRIM (leading trailing both, karakter_trimovanja FROM string_za_trimovanje) REPLACE (tekst, string_za_pretragu, novi_string) Primer strane Izbacuje karakter sa početka/kraja/oba niza karaktera string_za_trimovanje Pronalazi string_za_pretragu u tekstu i zamenjuje svaku njegovu pojavu sa novi_string SELECT CONCAT(CONCAT (ime, ' '), prez) radnik SELECT CONCAT (ime ' ', prez) radnik SELECT LPAD(ime, 12, ' ab') radnik, prez SELECT ime, prez, LPAD(plata, 10, '*') SELECT TRIM(leading 'M' FROM ime) WHERE ime LIKE 'M%'; SELECT REPLACE(ime, 'a','a') 19

funkcije nad brojevnim tipovima (ROUND, TRUNC, MOD) Funkcija Upotreba ROUND (kolona/izraz, n) Zaokružuje broj na n decimala, ili ako je n izostavljeno, izostavlja decimalna mesta ako je n negativno zaokružuje brojeve sa leve strane decimalnog znaka TRUNC (kolona/izraz, n) Odbacuje decimale u zavisnosti od broja n (slično funkciji ROUND) MOD (m, n) Vraća ostatak pri deljenju brojeva m i n Primer: SELECT ROUND(avg (plata), 3) "Prosek plata" SELECT distinct TRUNC(46.927), TRUNC(46.927,2), TRUNC(46.927,-1) SELECT distinct ROUND(46.927), ROUND(46.927,2), ROUND(46.927,-1) CREATE TABLE prosta (x CHAR(1)); INSERT INTO prosta VALUES ( x ); funkcije nad datumskim tipovima Funkcija MONTHS_BETWEEN (date1, date2) ADD_MONTHS (date, n) NEXT_DAY (date, danunedelji) LAST_DAY (date) ROUND (date [, 'fmt']) TRUNC (date [, 'fmt']) Upotreba Broj meseci izmeñu dva datuma, rezultat može biti i negativan Dodaje broj meseci na datum Vraća datum narednog dana u nedelji, argument može biti i broj Vraća poslednji dan u mesecu Zaokružuje datum Skraćuje datum SELECT SYSDATE vreme FROM prosta; 20

Primer 1. selektovati razliku izmeñu najstarijeg i najmlañeg radnika SELECT MAX(MONTHS_BETWEEN (r1.datr, r2.datr)) "Maximalna razlika" r1, radnik r2; Primer 2. Izračunati starost u mesecima SELECT MONTHS_BETWEEN ( '31-05-1978', SYSDATE) starost FROM prosta; Primer 3. selektovati imena, prezimena radnika, njihove datume roñenja i datume kad su postali punoletni SELECT ime ' ' prez radnik, datr "Datum rodjenja", ADD_MONTHS(datr, 18*12) Punoletstvo Primer 4. Izlistati datum narednog petka. SELECT NEXT_DAY(SYSDATE, 6) "Naredni petak" FROM prosta; Primer 5. Prikazati poslednji datum u ovom mesecu SELECT LAST_DAY(SYSDATE) Poslednji FROM prosta; Primer 6. Zaokružiti i skratiti današnji datum SELECT ROUND (TO_DATE('25.08.1980'), 'MONTH'), ROUND (TO_DATE('25.08.1980'), 'YEAR'), TRUNC (TO_DATE('25.08.1980'), 'MONTH'), TRUNC (TO_DATE('25.08.1980'), 'YEAR') FROM prosta; Operacije sa datumima Operacija Rezultat Opis DATE + broj DATE Dodaje broj dana na datum DATE broj DATE Oduzima broj dana od datuma DATE DATE Broj dana Nalazi razliku u datumima DATE + broj/24 DATE Dodaje broj sati na datum 21

Primer 1. Izračunati starost u mesecima SELECT SYSDATE - TO_DATE('31.05.1978') starost FROM prosta; Funkcije za konverziju TO_CHAR TO_NUMBER TO_DATE Opšte funkcije NVL (izraz1, izraz2) NVL2 (izraz1, izraz2, izraz3) NULLIF (izraz1, izraz2) COALESCE (izraz1, izraz2,...,izrazn) Funkcija NVL (izraz1, izraz2) NVL2 (izraz1, izraz2, izraz3) NULLIF (izraz1, izraz2) COALESCE (izraz1, izraz2,...,izrazn) Upotreba Konvertuje NULL vrednost u neku konkretnu Ako vrednost izraza1 nije NULL vraća izraz2 inače vraća izraz3 Uporeñuje dva izraza. Ako su jednaki vraća NULL, ako nisu isti vraća prvi izraz Vraća prvi izraz koji nije NULL Primer 1. Prikazati imena i prezimena svih radnika. Posebno naznačiti da li je zaposleni direktor ili obiičan radnik SELECT ime "ime radnika", prez "prezime", NVL2(sef, 'radnik', 'direktor') funkcija Primer 2. Prikazati imena, prezimena i plate svih zaposlenih. U slučaju da radnik ima platu istu kao svoj šef, javiti poruku o greški. SELECT r1.ime ' ' r1.prez radnik, NVL(TO_CHAR(NULLIF(r1.plata, r2.plata)), 'GRESKA!!!' ) plata r1, radnik r2 22

WHERE r1.sef = r2.mbr (+); UPDATE radnik SET plata = 75000 WHERE mbr=101; 23