Садржај
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 са групним фукнцијама и подупитима - задаци

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

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

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

../_images/slika_114a.jpg

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

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

../_images/slika_114b.jpg

Књиге издавача СЕТ са идентификационим бројем 2 су веома тражене и библиотека жели да провери да ли има довољно наслова овог издавача у понуди.

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

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

SELECT naziv
FROM knjige
WHERE id_izdavaca = 2
../_images/slika_114c.jpg

Овакав пример упита смо већ анализирали и он спада у једноставније упите из једне табеле. Можемо да приметимо у резултату да постоје две књиге овог издавача: „Veb-programiranje“ и „PROGRAMIRANJE – klase i objekti“.

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

У овом решењу ћемо употребити групну функцију. Групне функције враћају један резултат за више редова. Поред функције COUNT, која пребројава редове, неке од најчешће коришћених групних функција су: MIN, MAX, SUM и AVG. Функција за рачунање суме SUM и функција за рачунање просека AVG раде само са бројевима. Функције MIN и MAX раде са свим типовима података чије вредности могу да се упоређују.

SELECT COUNT(naziv)
FROM knjige
WHERE id_izdavaca = 2
../_images/slika_114d.jpg

Као што смо у претходној верзији задатка видели када смо покренули упит без позива групне функције, постоје две књиге овог издавача: „Veb-programiranje“ и „PROGRAMIRANJE – klase i objekti“.

Могла је и да се употреби звездица (*) са истим резултатом. Када употребимо звездицу, пребројавање се обавља по колони која је примарни кључ у табели и враћа број редова.

SELECT COUNT(*)
FROM knjige
WHERE id_izdavaca = 2

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

Када се реши овај упит, може да се види и број књига издавача са идентификационим бројем 2, али и да се тај број упореди са бројем књига које имамо од других издавача. Том анализом можемо већ да проценимо да ли имамо одговарајуће већи број књига траженог издавача и у којој мери тај број можемо да повећамо.

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

SELECT id_izdavaca, COUNT(id_knjige)
FROM knjige
GROUP BY id_izdavaca
../_images/slika_114e.jpg

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

../_images/slika_114f.jpg

Уколико желимо да после резултата рачунања групне функције урадимо неку селекцију, неопходно је да додамо део HAVING. Након HAVING следи услов којим се врши селекција група које се приказују. За избор група могу се навести услови са групним функцијама, као и услови који користе колоне наведене у делу GROUP BY. У овом случају би имало смисла да препознамо оне издавача за које имамо мање од три наслова. Након додавања дела HAVING, била би приказана три издавача од укупно четири.

SELECT id_izdavaca, COUNT(id_knjige)
FROM knjige
GROUP BY id_izdavaca
HAVING COUNT(id_knjige) < 3

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

SELECT inventarski_broj
FROM primerci
WHERE id_knjige IN
(SELECT id_knjige
FROM knjige WHERE id_izdavaca = 2)

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

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

SELECT id_knjige
FROM knjige WHERE id_izdavaca = 2

Спољни упит узима тај списак и помоћу оператора IN проверава да ли је појединачни примерак управо примерак неке од књига на овом списку.

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

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

SELECT id_knjige, COUNT(inventarski_broj)
FROM primerci
WHERE id_knjige IN
(SELECT id_knjige
FROM knjige WHERE id_izdavaca = 2)
GROUP BY id_knjige
../_images/slika_114g.jpg

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

SELECT id_knjige, inventarski_broj
FROM primerci
WHERE id_knjige IN
(SELECT id_knjige
FROM knjige WHERE id_izdavaca = 2)
ORDER BY id_knjige

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

../_images/slika_114h.jpg

Овај задатак може да се реши и помоћу спајања табела, што ће бити приказано у неким од примера који следе.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+