Садржај
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 са спајањем табела

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

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

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

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

../_images/slika_124a.jpg

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

../_images/slika_122d.jpg

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

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

../_images/slika_122c.jpg
  1. Разматра се могућност да се уведу одређена ограничења члановима библиотеке који нередовно враћају књиге. Једна од мера би можда била да се њима не издају ретке књиге које су често тражене, а драстичнија мера би могла да подразумева и укидање чланства. Да би се на добар начин донела одлука, библиотека је одлучила да пажљиво проучи списак чланова који касне са враћањем књига и због тога плаћају казне да би се видело колико има таквих чланова и да ли има неких међу њима који се баш истичу.

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

Подаци који су нам потребни се налазе у табелама clanovi и kazne. Заједничко за ове табеле је колона broj_clanske_karte по којој можемо да их повежемо.

Када у табелама које спајамо постоји само једна колона са неким називом, није неопходно да додајемо назив табеле испред назива колоне. Међутим, када у табелама које спајамо имамо колоне са истим називом, као што су, у овом случају, колоне са називом broj_clanske_karte у табелама clanovi и kazne, неопходно је да додамо назив табеле испред назива одговарајуће колоне на сваком месту на којем користимо број чланске карте.

SELECT ime, prezime, datum, iznos
FROM kazne JOIN clanovi
ON (kazne.broj_clanske_karte=clanovi.broj_clanske_karte)
ORDER BY clanovi.broj_clanske_karte
  1. У току месеца маја је акција и библиотека поклања по једну књигу својим верним члановима који тог месеца дођу да позајме књиге. Тренутно је у библиотеку дошла Милица Зорановић и библиотекар жели да провери како изгледа њена историја чланства, тј. да ли је већ дужи низ година члан библиотеке.

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

../_images/slika_124b.jpg

Име и презиме члана се налази у табели clanovi, а година када је плаћена чланарина се налази у табели clanarine. Заједничко за ове табеле је колона broj_clanske_karte по којој можемо да их повежемо.

SELECT god
FROM clanarine JOIN clanovi
ON (clanarine.broj_clanske_karte=clanovi.broj_clanske_karte)
WHERE ime='Milica' AND prezime='Zoranovic'

Да претрага не буде осетљива на велика и мала слова, може да се употреби једна од функција UPPER или LOWER.

SELECT god
FROM clanarine JOIN clanovi
ON (clanarine.broj_clanske_karte=clanovi.broj_clanske_karte)
WHERE UPPER(ime)='MILICA' AND UPPER(prezime)='ZORANOVIC'
  1. Библиотека разматра да наручи још књига Завода за уџбенике. Да би донели ту одлуку, потребно је да се види колико су књиге овог издавача тражене.

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

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

SELECT datum_uzimanja, knjige.naziv
FROM pozajmice JOIN primerci ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
JOIN knjige ON (primerci.id_knjige=knjige.id_knjige)
JOIN izdavaci ON (knjige.id_izdavaca=izdavaci.id)
WHERE izdavaci.naziv='Zavod za udzbenike'
  1. Члан библиотеке Милица Зорановић је дошла у библиотеку да позајми књигу, али нема идеју шта би следеће читала. Библиотекар је предложио да крену од списка аутора чије је књиге већ позајмљивала, па да виде да ли би Милица читала још неку од књига тих аутора.

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

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

SELECT DISTINCT autori.ime, autori.prezime
FROM pozajmice JOIN clanovi ON (pozajmice.broj_clanske_karte=clanovi.broj_clanske_karte)
JOIN primerci ON (pozajmice.inventarski_broj=primerci.inventarski_broj)
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 clanovi.ime='Milica' AND clanovi.prezime='Zoranovic'

Ради краћег записа упита можемо да користимо кратке називе за табеле. Ти кратки називи могу да буду једно или неколико слова. Овај кратак назив се наведе након размака после пуног назива табеле.

SELECT DISTINCT a.ime, a.prezime
FROM pozajmice po JOIN clanovi c ON (po.broj_clanske_karte=c.broj_clanske_karte)
JOIN primerci pr ON (po.inventarski_broj=pr.inventarski_broj)
JOIN knjige k ON (pr.id_knjige=k.id_knjige)
JOIN autori_knjige ak ON (ak.id_knjige=k.id_knjige)
JOIN autori a ON (ak.id_autora=a.id_autora)
WHERE c.ime='Milica' AND c.prezime='Zoranovic'
  1. Библиотека организује прославу за своје запослене и позивнице планира да пошаље имејлом, али са различитим текстом за различите тимове. Ради слања позивница потребан је списак имејл адреса по тимовима.

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

Ови подаци, имејл адреса менаџера и имејл адреса запосленог, налазе се у истој табели која има страни кључ id_manadzera, који показује на примарни кључ исте табеле id.

../_images/slika_124c.jpg

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

SELECT z.mejl "Zaposleni", m.mejl "Menadzer"
FROM zaposleni z JOIN zaposleni m ON (z.id_menadzera=m.id)
ORDER BY m.mejl, z.mejl
../_images/slika_124d.jpg

Како постоји запослени који нема менаџера, он неће бити приказан на овом списку. Уколико нам треба и његова имејл адреса, потребно је да укључимо спољно спајање. Када имамо спољно спајање, приказују се и подаци из једне од табела који немају свог пара у другој табели. Табела са подацима о запосленом је са леве стране у односу на реч JOIN па је потребно лево спољно спајање да бисмо добили и запослене без менаџера. Постоје и десно и пуно спољно спајање, RIGHT OUTER и FULL OUTER, па и они могу по потреби да се користе у другим задацима.

SELECT z.mejl "Zaposleni", m.mejl "Menadzer"
FROM zaposleni z LEFT OUTER JOIN zaposleni m ON (z.id_menadzera=m.id)
ORDER BY m.mejl, z.mejl
../_images/slika_124e.jpg
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+