Sadržaj
Основно о базама података
Основно о базама података - лекција
Основно о базама података - квиз
Системи за управљање базом података
Пројектовање
Ентитети и инстанце
Атрибути
Ентитети, инстанце и атрибути - квиз
Везе
Везе - квиз
Посебне ситуације на моделу
Модел и додатна документација
Задаци
Задаци - упутство
Задаци са два ентитета
Задаци 1-M
Задаци M-M
Разни задаци
Нерешени задаци
Нормализација
Нормализација
Нормализација - задаци
Дизајн табела у бази података
Дизајн табела у бази података - ентитети и веза 1:M
Дизајн табела у бази података - везе 1:1 и M:M
Дизајн табела у бази података - надтип са подтиповима
Дизајн табела у бази података - задаци
Пример моделовања - факултет
Пример моделовања - факултет
Пример моделовања - продаја дигиталних композиција
Пример моделовања - продаја дигиталних композиција
Пројектни задатак - моделовање
Пројектни задатак - моделовање
Креирање табела
Команда CREATE TABLE
Креирање табела - команда CREATE TABLE и везе 1:M и M:M
Креирање табела - команда CREATE TABLE - примери
Креирање табела - команда CREATE TABLE - квиз
Задатак - направи базу за салон аутомобила
Креирање базе помоћу алата SQL Server Management Studio
Рад са табелама - команде ALTER TABLE и DROP TABLE
Рад са подацима
Рад са подацима - квиз
Задатак - салон аутомобила
База података библиотеке
База података библиотеке - преглед модела и базе
База података библиотеке - креирање базе и табела
База података библиотеке - унос података
База података библиотеке - дијаграм
База података библиотеке - други начин за креирање базе
Упит SELECT - пројекција и селекција
Упит SELECT - упит из једне табеле - пројекција
Упит SELECT - упит из једне табеле - пројекција - квиз
Упит SELECT - упит из једне табеле - пројекција - задаци
Упит SELECT - упит из једне табеле - селекција
Упит SELECT - упит из једне табеле - селекција - квиз
Упит SELECT - упит из једне табеле - селекција - задаци
Упит SELECT - упит из једне табеле - пројекција и селекција - задаци
Задаци - салон аутомобила
Упит SELECT - спајање табела
Упит SELECT - спајање табела
Упит SELECT - спајање табела - квиз
Упит SELECT - спајање табела - задаци
Задаци - салон аутомобила
Упит SELECT - функције и подупити
Упит SELECT - употреба функција
Упит SELECT - употреба функција - задаци
Упит SELECT - подупити
Упит SELECT - подупити - задаци
Продаја дигиталних композиција - база
База података за продају дигиталних композиција
База података за продају дигиталних композиција - наставак
Задаци - пројекција и селекција
Задаци - спајање табела
Задаци - групне функције и једна табела
Задаци - групне функције и спајање табела
Погледи
Погледи
Пројектни задатак
Пројектни задатак
Додаци
База података библиотеке – ORACLE
База за продају дигиталних композиција – SQLite

Упит SELECT - подупити

Уколико желимо да пронађемо запослене који зарађују 50.000 динара, можемо да напишемо и покренемо следећи упит:

SELECT prezime FROM zaposleni
WHERE plata = 50000

У овом примеру смо тачно знали који износ тражимо. Постоје, међутим, ситуације у којима нам није позната тачна вредност већ ту вредност морамо прво да сазнамо из података сачуваних у бази. На пример, како ћемо да решимо задатак да нам се прикажу сви запослени који имају исту висину плате као запослена која се презива Лазовић? У случајевима попут овог користимо подупите.

Начин писања подупита и њихову употребу ћемо приказати кроз примере.

За све наредне примере користићемо базу података библиотеке. Следи списак свих табела са колонама. Примарни кључеви су истакнути болдом, а страни италиком.

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/specit_baze3/slika_401.png

Упити се пишу и покрећу када се кликне New Query након што се покрене систем SQL Server и кликне на креирану базу Biblioteka у прозору Object Explorer. Фајл са упитима SQLQuery1.sql може, али и не мора да се сачува.

Након што се унесе једна команда, кликне се на дугме Execute. Уколико се у простору за писање команди налази више њих, потребно је обележити ону коју желимо да покренемо. Ако је ту више база података, обавезно проверити да ли је поред овог дугмета назив базе у којој желите да вршите упите.

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/specit_baze3/slika_401b.png

1. Написати упит којим се приказују запослени који зарађују исто као запослена са презименом Лазовић.

SELECT prezime, plata
FROM zaposleni
WHERE plata = (SELECT plata FROM zaposleni WHERE prezime='Lazovic')

Подупит се први изврши и врати главном упиту податак о томе који је износ плате запослене са презименом „Лазовић“. Како у бази података постоји само једна запослена особа која се презива „Лазовић“, подупит враћа једну вредности и цео упит ће радити.

Упит можемо да поправимо тако да не приказује запослену са презименом „Лазовић“.

SELECT prezime, plata
FROM zaposleni
WHERE plata = (SELECT plata FROM zaposleni WHERE prezime='Lazovic')
AND prezime <> 'Lazovic'
https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/specit_baze3/slika_423a.png

2. Написати упит којим се приказују сви чланови који током 2019. године плаћају исти износ чланарине као члан са бројем чланске карте 33.

SELECT prezime
FROM clanarine JOIN clanovi
ON (clanarine.broj_clanske_karte=clanovi.broj_clanske_karte)
WHERE iznos = (SELECT iznos FROM clanarine WHERE broj_clanske_karte=33 AND god=2019)
AND clanovi.broj_clanske_karte <> 33

3. Написати упит којим се приказују сви чланови који су у неком тренутку плаћали исти износ чланарине као члан са бројем чланске карте 33.

Прва идеја је да се напише следећи упит, али он неће радити:

SELECT prezime
FROM clanarine JOIN clanovi
ON (clanarine.broj_clanske_karte=clanovi.broj_clanske_karte)
WHERE iznos= (SELECT iznos FROM clanarine WHERE broj_clanske_karte=33)
AND clanovi.broj_clanske_karte <> 33

Подупит у наведеном упиту враћа више од једне вредности зато што је овај члан библиотеке био члан неколико година и у свакој години је имао неки износ чланарине који је плаћао. Када подупит враћа више од једне вредности, морају да се користе другачији оператори.

Први начин је да се уз оператор поређења = дода реч ANY :

SELECT prezime
FROM clanarine JOIN clanovi
ON (clanarine.broj_clanske_karte=clanovi.broj_clanske_karte)
WHERE iznos = ANY(SELECT iznos FROM clanarine WHERE broj_clanske_karte=33)
AND clanovi.broj_clanske_karte <> 33

Други начин је да се употреби оператор који проверава да ли је нека вредност у скупу:

FROM clanarine JOIN clanovi
ON (clanarine.broj_clanske_karte=clanovi.broj_clanske_karte)
WHERE iznos IN (SELECT iznos FROM clanarine WHERE broj_clanske_karte=33)
AND clanovi.broj_clanske_karte <> 33

4. Написати упит којим се приказују све књиге које је објавио исти издавач који је објавио књигу са називом „ПРОГРАМИРАЊЕ – класе и објекти“.

SELECT knjige.naziv
FROM knjige JOIN izdavaci ON (knjige.id_izdavaca = izdavaci.id)
WHERE izdavaci.naziv = (SELECT izdavaci.naziv
                        FROM knjige JOIN izdavaci
                        ON (knjige.id_izdavaca = izdavaci.id)
                        WHERE knjige.naziv = 'PROGRAMIRANJE - klase i objekti')
AND NOT(knjige.naziv = 'PROGRAMIRANJE - klase i objekti')
  1. Написати упит којим се приказују подаци о запосленом који најмање зарађује.

SELECT * FROM zaposleni
WHERE plata = (SELECT MIN(plata) FROM zaposleni)
  1. Написати упит којим се приказују подаци о запосленима који зарађују више од просека.

SELECT *
FROM zaposleni
WHERE plata > (SELECT AVG(plata) FROM zaposleni)
  1. Написати упит којим се приказује назив књиге која је издата током најстарије позајмице.

SELECT naziv
FROM knjige JOIN primerci ON (primerci.id_knjige=knjige.id_knjige)
JOIN pozajmice ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
WHERE datum_uzimanja = (SELECT MIN(datum_uzimanja) FROM pozajmice)

8. Написати упит којим се приказују чланови библиотеке који су позајмили бар једну књигу исту као члан са бројем чланске карте 33.

SELECT DISTINCT clanovi.broj_clanske_karte, prezime
FROM clanovi JOIN pozajmice
   ON (pozajmice.broj_clanske_karte=clanovi.broj_clanske_karte)
JOIN primerci ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
WHERE id_knjige = ANY(
       SELECT id_knjige
       FROM pozajmice JOIN primerci
       ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
       WHERE broj_clanske_karte = 33)
AND clanovi.broj_clanske_karte <> 33
Prethodna lekcija
Sledeća lekcija
A- A+
Тема
Темa

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.