Садржај
1 Релационе базе података
1.0 1 Релационе базе података
1.0 2 Релационе базе података - квиз
1.0 3 Веза један према више
1.0 4 Веза један према више - квиз
1.0 5 Веза више према више
1.0 6 Веза више према више - квиз
1.0 7 Алат за пројектовање
1.0 8 СУБП
1.0 9 Креирање базе на други начин
1.0 10 Још неке SQL команде
1.1 1 Упит SELECT
1.1 2 Упит SELECT - упит из једне табеле - задаци
1.1 3 Упит SELECT - упит из једне табеле - квиз
1.1 4 Упит SELECT - функције и подупити - задаци
1.1 5 Упит SELECT - функције и подупити - квиз
1.1 6 Упит SELECT - спајање - задаци
1.1 7 Упит SELECT - спајање - квиз
1.1 8 Упит SELECT - нерешени задаци
1.2 1 База података за библиотеку - креирање базе
1.2 2 БП Библиотека - Упит SELECT - упит из једне табеле - задаци
1.2 3 БП Библиотека - Упит SELECT - упит из једне табеле - нерешени задаци
1.2 4 БП Библиотека - Упит SELECT - спајање - задаци
1.2 5 БП Библиотека - Упит SELECT - спајање - нерешени задаци
1.2 6 БП Библиотека - Упит SELECT - функције и подупити - задаци
1.2 7 БП Библиотека - Упит SELECT - функције и подупити - нерешени задаци
1.3 1 База података за возачке дозволе - креирање базе
1.3 2 БП Возачке дозволе - Дијаграм и подаци - практичан рад
1.3 3 БП Возачке дозволе - Упит SELECT - задаци
1.3 4 БП Возачке дозволе - Упит SELECT - нерешени задаци
1.4 1 БП Филмови - Креирање базе - практични рад
1.4 2 БП Филмови - Дијаграм и подаци - практични рад
1.4 3 БП Филмови - Упит SELECT - задаци
1.4 4 БП Филмови - Упит SELECT - нерешени задаци
2 Писање програма унутар система за управљање базама података
2.0 1 Процедуре и команда INSERT
2.0 2 Процедуре и команде UPDATE и DELETE
2.0 3 Процедуре и команде INSERT, UPDATE, и DELETE - квиз
2.0 4 Процедуре и тестирање програма
2.0 5 Процедуре и упит SELECT
2.0 6 Процедуре и курсор за упит SELECT
2.1 1 Функције и упит SELECT
2.1 2 Процедуре и функције са упитом SELECT - квиз
2.1 3 Процедуре и функције са упитом SELECT из једне табеле - задаци
2.1 4 Процедуре и функције са упитом и групним функцијама - задаци
2.1 5 Процедуре и функције са упитом SELECT са спајањем табела - задаци
2.1 6 Процедуре и функције са упитом - нерешени задаци
2.1 7 Формат XML
2.2 1 База података за библиотеку - Процедуре, функције и поређење различитих решења
2.2 2 Процедуре, функције и поређење различитих решења
2.2 3 Процедуре и функције са упитом SELECT из једне табеле - вежбање
2.2 4 Процедуре и функције са упитом SELECT са спајањем табела - вежбање
2.2 5 Процедуре и функције са упитом и групним функцијама и подупитима - вежбање
2.2 6 Процедуре и функције са упитом SELECT - нерешени задаци
2.3 1 База података за возачке дозволе - процедуре и функције са упитом SELECT - вежбање
2.3 2 База података за возачке дозволе - процедуре и функције - нерешени задаци
2.4 1 База података за филмове - процедуре и функције са упитом SELECT - вежбање
2.4 2 База података за филмове - процедуре и функције - нерешени задаци
3 Писање програма у програмским језицима вишег нивоа
3.0 1 Писање програма у развојном окружењу Visual Studio
3.0 2 Писање програма у развојном окружењу Visual Studio - практичан рад
3.0 3 Писање програма у развојном окружењу Visual Studio - процедуре
3.0 4 Писање програма у развојном окружењу Visual Studio - квиз
3.1 1 Угнежђени упит SELECT унутар програма
3.1 2 Угнежђени упит SELECT унутар програма - задаци
3.1 3 Позив процедуре унутар програма
3.1 4 Позив креиране функције унутар програма
3.1 5 Програм са угнежђеним командама у развојном окружењу Visual Studio - квиз
3.1 6 Програм са угнежђеним упитом SELECT из једне табеле - вежбање
3.1 7 Програм са угњежђеним упитом и групним фунцкијама - вежбање
3.1 8 Програм са угнежђеним упитом SELECT са спајањем табела - вежбање
3.1 9 Програм са класом
3.1 10 Програм са угнежђеним упитом - нерешени задаци
3.1 11 Програм са угнежђеним командама INSERT, UPDATE, и DELETE
3.2 1 База података за библиотеку - програм са угнежђеним упитом SELECT из једне табеле - задаци
3.2 2 База података за библиотеку - програм са угнежђеним упитом SELECT - вежбање
3.2 3 База података за библиотеку - програм са угнежђеним упитом - нерешени задаци
3.3 1 База података за возачке дозволе - програм са угнежђеним упитом SELECT - вежбање
3.3 2 База података за возачке дозволе - програм са угнежђеним упитом - нерешени задаци
3.4 1 База података за филмове - програм са угнежђеним упитом SELECT - вежбање
3.4 2 База података за филмове - програм са угнежђеним упитом - нерешени задаци
4 Друга софтверска решења - СУБП Oracle
4.0 1 Oracle Apex и језик PL/SQL
4.0 2 Језик PL/SQL - задаци
4.0 3 Језик PL/SQL - квиз
4.0 4 Језик PL/SQL – нерешени задаци
4.0 5 Наредбе гранања
4.0 6 Наредбе гранања - нерешени задаци
4.0 7 Наредбе циклуса
4.0 8 Наредбе циклуса - нерешени задаци
4.1 1 База података за библиотеку - практичан рад
4.1 2 Наредба SELECT INTO
4.1 3 Наредба SELECT INTO - zadaci
4.1 4 Наредба SELECT INTO - квиз
4.1 5 Наредба SELECT INTO - вежбање
4.1 6 Наредба SELECT INTO - нерешени задаци
4.2 1 Курсори - Узимање података из више редова
4.2 2 Курсори - задаци
4.2 3 Различити начини да се реши проблем
4.2 4 Курсори - нерешени задаци
4.2 5 Курсор са параметром
4.2 6 Курсор са параметром - задаци
4.2 7 Курсор са параметром - нерешени задаци
4.2 8 Курсори - квиз
4.2 9 Курсори и гранање - задаци
4.2 10 Курсори - вежбање
4.2 11 Тренутне позајмице члана - пример
4.2 12 Спискови књига - пример
4.3 1 Процедуре и функције у СУБП-у Oracle Apex
4.3 2 Процедуре и функције - задаци
4.3 3 Процедуре и функције - нерешени задаци
4.3 4 Позајмице једне књиге - пример
4.3 5 Тренутне позајмице - пример
4.3 6 Процедуре и друге SQL команде
4.3 7 Тригери
4.3 8 Списак свих објеката у бази података
4.4 1 Креирање апликације помоћу алата App Builder
4.4 2 Додатне опције App Builder алата
4.4 3 Покретање апликације
4.4 4 Креирање нових страница у апликацији
4.4 5 Покретање раније креиране процедуре
4.4 6 Алат App Builder и XML
4.5 1 База података за салон аутомобила у СУБП-у Oracle Apex - 1. део
4.5 2 База података за салон аутомобила у СУБП-у Oracle Apex - 2. део
4.5 3 База података за салон аутомобила у СУБП-у Oracle Apex - 3. део
4.5 4 База података за продавницу - нерешени пројектни рад

Упит SELECT са спајањем табела - задаци

Подаци који се у животу виде заједно на једном месту у бази података се чувају у различитим табелама. Као што смо већ видели на примеру, уколико погледаш корице неке књиге, највероватније ћеш на њима видети назив књиге, као и основне податке о аутору или ауторима и издавачу. Ови подаци се у бази података чувају у неколико различитих табела: knjige, autori и izdavaci. Неопходно је и веома важно да имамо механизам на основу којег можемо да видимо како су подаци у једној табели, на пример подаци о једној конкретној књизи, повезани са одговарајућим подацима у другим табелама, тако да можемо да видимо ко је аутор те књиге и ко је издавач те исте књиге.

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

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

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

../_images/slika_116a.jpg

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

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

../_images/slika_116b.jpg
  1. Књига са називом „Veb programiranje“ је веома тражена и библиотека жели да набави још примерака те књиге. Да би библиотека послала наруџбеницу, потребни су јој подаци о издавачу.

Задатак: Написати упит којим се приказују назив, адреса и адреса веб-сајта издавача књиге са називом „Veb programiranje“.

SELECT adresa, veb_sajt
FROM knjige JOIN izdavaci ON (knjige.id_izdavaca=izdavaci.id)
WHERE knjige.naziv = 'Veb programiranje'
../_images/slika_116c.jpg

Подаци који су нам потребни се налазе у две табеле. Сви подаци које приказујемо су у табели izdavaci, а селекцију радимо по услову који се односи на податак који се налази у табели knjige. Ове две табеле су повезане паром колона, страни кључ у једној табели показује на примарни кључ у другој табели.

../_images/slika_116d.jpg

У делу FROM упита је потребно ове табеле спојити управо по вредностима комбинација: страни кључ и одговарајући примарни кључ, тј. примарни кључ на који страни кључ показује. За идентификациони број издавача једне књиге треба у табели izdavaci да пронађемо који је издавач.

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

SELECT adresa, veb_sajt
FROM izdavaci JOIN knjige ON (knjige.id_izdavaca=izdavaci.id)
WHERE knjige.naziv = 'Veb programiranje'

SELECT adresa, veb_sajt
FROM knjige JOIN izdavaci ON (izdavaci.id=knjige.id_izdavaca)
WHERE knjige.naziv = 'Veb programiranje'
  1. Библиотека је у процесу набавке нових примерака књига издавачке куће СЕТ. Тренутно се размишља да се најстарији набављени примерци књига ове издавачке куће повуку из употребе и раскњиже. Анализом примерака који се налазе у библиотеци је установљено да је примерак са инвентарским бројем 13005 у добром стању и релативно скоро набављен, па је потребно проценити стање раније набављених примерака. Раније набављени примерци имају мањи инвентарски број.

Задатак: Написати упит којим се приказују инвентарски бројеви примерака и називи књига у издању издавачке куће СЕТ чији је инвентарски број мањи од 13005.

SELECT inventarski_broj, knjige.naziv
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN izdavaci ON (knjige.id_izdavaca=izdavaci.id)
WHERE izdavaci.naziv='CET' AND inventarski_broj<13005
../_images/slika_116e.jpg

Код колоне naziv је неопходно да додамо назив табеле зато што и у табели knjige и у табели izdavaci постоје колоне које имају исти назив.

  1. Неколико чланова библиотеке се истог дана распитивало за књигу са називом „PROGRAMIRANJE – klase i objekti“. Потребно је проверити да ли постоји довољан број примерака ове књиге.

НАПОМЕНА: На основу овог захтева има смисла формулисати два различита задатка.

Задатак 1: Написати упит којим се приказују инвентарски бројеви књига са називом „PROGRAMIRANJE – klase i objekti“.

SELECT inventarski_broj
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
WHERE naziv = 'PROGRAMIRANJE - klase i objekti'

SELECT inventarski_broj
FROM primerci
WHERE id_knjige = (SELECT id_knjige FROM knjige
WHERE naziv = 'PROGRAMIRANJE - klase i objekti')
../_images/slika_116f.jpg

Задатак 2: Написати упит којим се приказује број примерака књига са називом „PROGRAMIRANJE – klase i objekti“.

SELECT COUNT(inventarski_broj)
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
WHERE naziv = 'PROGRAMIRANJE - klase i objekti'

SELECT COUNT(*)
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
WHERE naziv = 'PROGRAMIRANJE - klase i objekti'
../_images/slika_116g.jpg
  1. Библиотека размишља да набави још примерака књига награђиваног аутора Марка Видојковића. Да би донели одлуку о новим набавкама, прво је потребно да провере стање са примерцима књига које већ имају од овог писца.

НАПОМЕНА: На основу овог захтева има смисла формулисати неколико различитих задатка.

Задатак 1: Написати упит којим се приказују инвентарски бројеви примерака и називи књига аутора Марка Видојковића.

SELECT inventarski_broj, naziv
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
JOIN autori ON (autori_knjige.id_autora=autori.id_autora)
WHERE ime = 'Marko' AND prezime = 'Vidojkovic'
../_images/slika_116h.jpg

Задатак 2: Написати упит којим се приказује укупан број примерака књига аутора Марка Видојковића

SELECT COUNT(inventarski_broj)
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
JOIN autori ON (autori_knjige.id_autora=autori.id_autora)
WHERE ime = 'Marko' AND prezime = 'Vidojkovic'
../_images/slika_116i.jpg

Задатак 3: Написати упит којим се приказује број примерака сваке од књига аутора Марка Видојковића.

SELECT COUNT(inventarski_broj), naziv
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
JOIN autori ON (autori_knjige.id_autora=autori.id_autora)
WHERE ime = 'Marko' AND prezime = 'Vidojkovic'
GROUP BY naziv
../_images/slika_116j.jpg

Уколико постоји могућност да један аутор напише две књиге истог назива, боље би било да се груписање врши по идентификационом броју књиге. У следећем упиту је додат и идентификациони број књиге уз назив. У том случају је неопходно проширити и део GROUP BY тако да пише и naziv и id_knjige.

SELECT COUNT(inventarski_broj), knjige.id_knjige, naziv
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
JOIN autori ON (autori_knjige.id_autora=autori.id_autora)
WHERE ime = 'Marko' AND prezime = 'Vidojkovic'
GROUP BY knjige.id_knjige, naziv

Задатак 4: Написати упит којим се приказују називи књига аутора Марка Видојковића од којих имамо само по један примерак у библиотеци.

SELECT COUNT(inventarski_broj), naziv
FROM primerci JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
JOIN autori ON (autori_knjige.id_autora=autori.id_autora)
WHERE ime = 'Marko' AND prezime = 'Vidojkovic'
GROUP BY naziv
HAVING COUNT(inventarski_broj) = 1
../_images/slika_116k.jpg
  1. У оквиру сарадње библиотеке и Завода за уџбенике планирано је да се ауторима који су писали за ову издавачку кућу уруче захвалнице и симболични поклони.

Задатак: Написати упит којим се, без понављања, приказују аутори који су писали за издавачку кућу Завод за уџбенике.

SELECT DISTINCT ime, prezime
FROM knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
JOIN autori ON (autori_knjige.id_autora=autori.id_autora)
JOIN izdavaci ON (knjige.id_izdavaca=izdavaci.id)
WHERE izdavaci.naziv = 'Zavod za udzbenike'
../_images/slika_116l.jpg
  1. Члан библиотеке је заинтересован да позајми још неку књигу од аутора који су написали уџбеник са називом „Racunarstvo i informatika za 4. razred gimnazije’“.

Задатак: Написати упит којим се, без понављања, приказују називи књига које су написали аутори уџбеника са називом „Racunarstvo i informatika za 4. razred gimnazije“.

SELECT DISTINCT naziv
FROM knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
WHERE id_autora IN (SELECT id_autora FROM
knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
WHERE naziv = 'Racunarstvo i informatika za 4. razred gimnazije')

SELECT DISTINCT naziv
FROM knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
WHERE id_autora = ANY (SELECT id_autora FROM
knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
WHERE naziv = 'Racunarstvo i informatika za 4. razred gimnazije')
../_images/slika_116m.jpg

Има смисла да у приказу резултата изоставимо уџбеник са називом „Racunarstvo i informatika za 4. razred gimnazije“ зато што нас вероватно интересују друге књиге које су написали аутори овог уџбеника. Проширићемо део WHERE са условом да се прикажу само уџбеници чији је назив различит од „Racunarstvo i informatika za 4. razred gimnazije“.

SELECT DISTINCT naziv
FROM knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
WHERE id_autora IN (SELECT id_autora FROM
knjige JOIN autori_knjige ON (autori_knjige.id_knjige=knjige.id_knjige)
WHERE naziv = 'Racunarstvo i informatika za 4. razred gimnazije')
AND naziv != 'Racunarstvo i informatika za 4. razred gimnazije'
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+