80
АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Базе података, SQL, MariaDB др Милован Миливојевић 1 Predmet: Baze podatka, SQL, MySQL (2+2) dr Milovan Milivojević Elementi teorije / DATABASE - Osnovi Client/Server arhitekture Izvor: https://mariadb.com/kb Izvor: https://mariadb.com/kb/en/database-theory/ БЛОК 1. / (15:00 - 18:30) What is a database? Exploring Early Database Models Before the advent of databases, the only way to store data was from unrelated files. Programmers had to go to great lengths to extract the data, and their programs had to perform complex parsing and relating. Without a standard way to access data, systems are: more prone to errors, are slower to develop, and are more difficult to maintain. Data redundancy (where data is duplicated unnecessarily) and Poor data integrity (where data is not changed in all locations, leading to wrong or outdated data being supplied) are frequent consequences of the file access method of data storage.

Predmet: Baze podatka, SQL, MySQL (2+2) dr Milovan Milivojevićvpts.edu.rs/nastavni-materijali/milovanmilivojevic/Baze... · 2020. 3. 10. · Normalizacija baze podataka je tehnika

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    1

    Predmet: Baze podatka, SQL, MySQL (2+2)

    dr Milovan Milivojević

    Elementi teorije / DATABASE - Osnovi Client/Server arhitekture

    Izvor: https://mariadb.com/kb

    Izvor: https://mariadb.com/kb/en/database-theory/

    БЛОК 1. / (15:00 - 18:30)

    What is a database?

    Exploring Early Database Models

    Before the advent of databases, the only way to store data was from unrelated files.

    Programmers had to go to great lengths to extract the data, and their programs had to perform complex parsing and relating.

    Without a standard way to access data, systems are:

    • more prone to errors,

    • are slower to develop, and

    • are more difficult to maintain.

    ❖ Data redundancy (where data is duplicated unnecessarily) and

    ❖ Poor data integrity (where data is not changed in all locations, leading to wrong or outdated data being supplied)

    are frequent consequences of the file access method of data storage.

    https://mariadb.com/kbhttps://mariadb.com/kb/en/database-theory/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    2

    For these reasons, database management systems (DBMSs) were developed to provide a:

    ✓ standard and

    ✓ reliable way to access and update data.

    They provide an intermediary layer between the application and the data, and the programmer is able to concentrate on developing the application, rather than worrying about data access issues.

    A database model is a logical model concerned with how the data is represented.

    Instead of database designers worrying about the physical storage of data, the database model allows them to look at a higher, more conceptual level, reducing the gap between the real-world problem for which the application is being developed and the technical implementation.

    There are a number of database models.

    The next three common models are;

    the hierarchical database model

    the network database model and

    the relational database model (MariaDB, along with most modern DBMSs).

    Understanding the Hierarchical Database Model

    The earliest model was the hierarchical database model, resembling an

    upside-down tree.

    Files are related in a parent-child manner, with each parent capable of

    relating to more than one child, but each child only being related to

    one parent.

    https://mariadb.com/kb/en/understanding-the-hierarchical-database-model/https://mariadb.com/kb/en/understanding-the-network-database-model/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    3

    This model, although being a vast improvement on dealing with

    unrelated files, has some serious disadvantages.

    It represents one-to-many relationships well (one parent has many

    children; for example, one company branch has many employees), but

    it has problems with many-to-many relationships.

    Relationships such as that between a product file and an orders file

    are difficult to implement in a hierarchical model.

    Also, the hierarchal model is not flexible because adding new

    relationships can result in wholesale changes to the existing

    structure, which in turn means all existing applications need to change

    as well.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    4

    This is not fun when someone has forgotten a table and wants it

    added to the system shortly before the project is due to launch!

    And developing the applications is complex because the

    programmer needs to know the data structure well in order to

    traverse the model to access the needed data.

    When accessing data from two related tables, you only need to know the

    fields you require from those two tables.

    In the hierarchical model, you’d need to know the entire chain between the

    two. For example, to relate data from A1 and D4, you’d need to take the

    route: A1, B1, C3 and D4.

    Understanding the Network Database Model

    The network database model was a progression from the hierarchical

    database model and was designed to solve some of that model's problems,

    specifically the lack of flexibility.

    Instead of only allowing each child to have one parent, this model allows

    each child to have multiple parents (it calls the children members and

    the parents owners).

    It addresses the need to model more complex relationships such as the

    orders/parts many-to-many relationship mentioned in the hierarchical

    article.

    https://mariadb.com/kb/en/understanding-the-hierarchical-database-model/https://mariadb.com/kb/en/understanding-the-hierarchical-database-model/https://mariadb.com/kb/en/understanding-the-hierarchical-database-model/https://mariadb.com/kb/en/understanding-the-hierarchical-database-model/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    5

    As you can see in the figure below, A1 has two

    members, B1 and B2. B1. is the owner of C1, C2, C3 and C4. However, in

    this model, C4 has two owners, B1 and B2.

    Of course, this model has its problems.

    It is more difficult to implement and maintain, and, although more

    flexible than the hierarchical model, it still has flexibility problems,

    Not all relations can be satisfied by assigning another owner, and the

    programmer still has to understand the data structure well in order to

    make the model efficient.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    6

    Osnovno o relacionim bazama

    Most databases today are relational databases, named such because they deal

    with tables of data related by a common field. For example, Table 1 below shows

    the product table, and Table 2 shows the invoice table. As you can see, the

    relation between the two tables is based on the common field product_code.

    SQL (Structured Query Language) is a powerful way to search for records or

    make changes.

    Almost all DBMS’s use SQL, although many have added their own

    enhancements to it.

    This means that when you learn SQL while using MariaDB, almost all of it is

    not specific to MariaDB and can be used with other relational databases as

    well, such as PostgreSQL, MySQL, Oracle and SQL Server. MariaDB was

    originally-created as a drop-in replacement to MySQL, so MariaDB and

    MySQL are particularly close.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    7

    Database Normalization Overview

    Normalizacija baze podataka je tehnika koja pomaže da se izbegnu

    anomalije podataka i različiti problemi upravljanja podacima.

    Razvijena je 1970-te godine od strane E.F. Cood-a i danas predstavlja

    uobičajeni zahtev za savremene relacione DBMS.

    Edgar Frank "Ted" Codd (19 August 1923 – 18 April 2003) was an English computer scientist who, while working for IBM, invented the relational model for database management, the theoretical basis for relational databases and relational database management systems. He made other valuable contributions to computer science, but the relational model, a very influential general theory of data management, remains his most mentioned, analyzed and celebrated achievement.

    Initially, IBM refused to implement the relational model to preserve revenue from IMS/DB[citation needed]. Codd then showed IBM customers the potential of the implementation of its model, and they in turn pressured IBM. Then IBM included in its Future Systems project a System R subproject – but put in charge of it developers who were not thoroughly familiar with Codd's ideas, and isolated the team from Codd.[citation needed] As a result, they did not use Codd's own Alpha language but created a non-relational one, SEQUEL. Even so, SEQUEL was so superior to pre-relational systems that it was copied, in 1979, based on pre-launch papers presented at conferences, by Larry Ellison, of Relational Software Inc, in his Oracle Database, which actually reached market before SQL/DS – because of the then-already proprietary status of the original name, SEQUEL had been renamed SQL.

    Codd continued to develop and extend his relational model, sometimes in collaboration with Christopher J. Date. One of the normalised forms, the Boyce–Codd normal form, is named after

    him.

    Normalizacija predstavlja transformaciju tabele kroz različite forme:

    ✓ Prva normalna forma,

    ✓ Druga normalna forma,

    ✓ Treća normalna forma itd...

    https://en.wikipedia.org/wiki/Computer_sciencehttps://en.wikipedia.org/wiki/International_Business_Machineshttps://en.wikipedia.org/wiki/Relational_modelhttps://en.wikipedia.org/wiki/Relational_modelhttps://en.wikipedia.org/wiki/Databasehttps://en.wikipedia.org/wiki/Relational_databasehttps://en.wikipedia.org/wiki/Relational_database_management_systemhttps://en.wikipedia.org/wiki/Relational_database_management_systemhttps://en.wikipedia.org/wiki/Computer_sciencehttps://en.wikipedia.org/wiki/IMS/DBhttps://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttps://en.wikipedia.org/wiki/IBM_Future_Systems_projecthttps://en.wikipedia.org/wiki/IBM_System_Rhttps://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttps://en.wikipedia.org/wiki/Alpha_(language)https://en.wikipedia.org/wiki/Larry_Ellisonhttps://en.wikipedia.org/wiki/Oracle_Databasehttps://en.wikipedia.org/wiki/IBM_SQL/DShttps://en.wikipedia.org/wiki/SQLhttps://en.wikipedia.org/wiki/Christopher_J._Datehttps://en.wikipedia.org/wiki/Database_normalizationhttps://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    8

    Cilj normalizacije tabela:

    • Izbegavanje redudanse podataka (i time posledično prostora koji u

    memoriju zauzimaju);

    • Lakša izmena podataka i i zbegavanje anomalija;

    • Lakše odršavanje referencijalnog integriteta;

    • Stvaranje lako razumljive strukture podataka koja jako podseća na

    ono što podaci uistinu predstavljaju;

    • Stvaranje podloge za lakše proširenje baze podataka.

    Navodi se primer, najpre bez normalizacije da bi se razumeli problemi i

    potreba za normalizacijom a potom postupak vođenja tabela kroz faze

    normalizacije.

    Priemer: BAZA PODATAKA - podaci o biljkama, lokaciji i tlu

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    9

    Podaci pretvoreni u tabelarni formart imaju oblik:

    Kako ove podatke unetu u tabele baze podataka? Tabelarni prikaz iznad

    morao bi se pretvoriti u tabelu ispod (NULL označava vrednosti gde ne

    postoje podaci:

    Prethodna tabela nije previše korisna. Na primer, za biljku Erica, na osnovu tabele

    iznad ne može se odrediti na kojoj je lokaciji se nalazi.

    Takođe nijedna od kolona (polja) ne može biti primarni ključ (potrebno je da

    primarni ključ jednoznačno identifikuje zapis).

    Dakle, zapis (record), ne može pripadati grupi, već se mora posmatrati

    samostalno, pojedinačno. Ovo vodi ka sledećem obliku:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    10

    Polje Location code, ne može biti primarni ključ ali kombinacija polja Location

    code/ Plant Code, može jer na jedinstven način identifikuje zapise (redove).

    Kada je neki tip biljke identifikovan na nekoj lokaciji, takvu infomaciju kao podatke

    dovoljno je uneti samo jednom. Ako bi bilo potrebno dodati broj biljaka na toj

    lokaciji dodavalo bi se polje količina (quantity).

    Prethodna tabela jeste u tabelarnom formatu i može se definisati primarni ključ,

    ali ona još uvek ima problema! Na primer: Kod 11, koji referencira na

    Kirstenbosch Garden javlja se tri puta! Pored gubitka prostora, javljaju se i drugi

    ozbiljni problemi! (Pogledati pažljivo tabelu ispod)

    U drugom redu umesto Kirstenbosch Garden piše Kirstenbosc Garden.

    Kako to primetiti ako tabela ima hiljade redova? Sa porastom tabele drastično

    raste šansa ka anomalijama podataka.

    Potrebno je pokušati UKLONITI DUPLIKATE!

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    11

    Kako?

    Potrebno je uočiti polja koja predstavljaju primarni ključ.

    A potom kreirati nove tabele u kojima su polja koja se odnose na delove

    primarnog ključa:

    • Prva tabela, koja sadrži polja koja su vezana za Location code deo iy

    primarnog ključa

    • Druga tabela, koja sadrži polja koja su vezana za PlantCode deo iz

    primarnog ključa

    Koja su poboljšanja?

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    12

    • Nazivi lokacija se pojavljuju samo jednom (Kirstenbosch Garden), pa je

    monogo veća šansa da se uoče potencijalne greške (na primer, sintaksne!);

    • Smanjuje se zauzeće memorije jer se ne ponavlja memorisanje

    Kirstenbosch Garden više puta;

    • Vidi se da se polja Location code i Plant Code ponavljaju u dve tabele. Ova

    polja obezbedjuju da se može uspostaviti relacija među tabelama, odnosno

    da grupišete različite biljke na različitim lokacijama. Očigledno je da se ne

    može izbeći ponavaljanje ovih polja a da se ne izgubi mogućnost

    uspostavljanja relacija. Ali ovo je mnogo efikasniji način. Lakše je ponoviti i

    memorisati male kodove nego čitave sentence veliki broj puta. Efikasnije je!

    Ipak prethodne tri tabele isu idealne!

    ✓ U polju Soil description (tabela biljaka) ponovo se javlja redudansa

    (sandstone/limestone):

    Takođe se krije još potencijalnih mogućnosti za anomalije!

    ✓ Moguće je da korisnik u polju Soil descrition za kategoriju B, umesto

    Sandstone/limestone unese za biljku Restio samo Sandstone:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    13

    ***

    Ponovo je rešenje izdvajanje podataka u posebnu tabelu.

    Ono što je u stvari urađeno je da se tragalo za tranzitivnim vezama u kojima

    su polja, koja nisu u primarnom ključu u vezi sa drugim poljima, koja takođe

    nisu u primarnom ključu.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    14

    Soil description zavisi (u nekom smislu) od Plant code ako se gleda tabela ***, ali

    Soil description prvenstvenono zavisi od Soil category, tako da se Soil

    description može izdvojiti u posebnu tabelu.

    Prethodnim konceptom ponovo se smanjuje šansa da se za kategoriju zemljišta B,

    stavlja jednom Sandstone/limestone a drugi put samo Sandstone i sl.

    Podatak o opisu zemljišta se unosi samo jednom u posebnoj tabeli i time se

    povećava šansa da podaci budu tačni.

    Kada se dizajniraju baze, često test podaci često nisu kompletirani, ali i ne moraju

    biti ako se razumeju dobro odnosi medju podacima.

    Prethodni tekst imao je za cilj da ukaže na probleme skladištenja podataka u

    tabele koje nisu normalizovane ali i da ukaže na relacije među poljima. To je

    razlog i osnova procesa normalizacije.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    15

    Database Normalization: 1st Normal Form

    Primer: BAZA PODATAKA - podaci o biljkama, lokaciji i tlu

    NULTA NORMALNA FORMA

    Struktura podataka je:

    • Location code

    • Location name

    • 1-n plant numbers (1-n is a shorthand for saying there are many occurrences of this field. In other words, it is a repeating group).

    • 1-n plant names

    • 1-n soil categories

    • 1-n soil descriptions

    Pretvaranje u tabelarni format

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    16

    Nema ključeva, postojanje grupa ...

    Tables are in 1st normal form if they follow these rules:

    • There are no repeating groups.

    • All the key attributes are defined.

    • All attributes are dependent on the primary key.

    Podaci transformisani iz NULTE noramalne forme u tabelu u

    PRVOJ NORMALNOJ FORMI

    • Definisati primarni ključ (u ovom primeru Location code/ Plant code)

    • Poštovati princip atomičnosti podataka (the principle of atomicity) /

    primer: umesto polja-ImePrezima, kreirati posebno polje-Ime i polje-

    Prezime.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    17

    Konačni oblik strukture Tabele u PRVOJ NORMALNOJ FORMI.

    ###

    Polja koja čine primarni ključ su italic.

    Database Normalization: 2nd Normal Form A table is in 2nd normal form if:

    • it is in 1st normal form

    • it includes no partial dependencies (where an attribute is only dependent

    on part of a primary key)

    Ako se primarni ključ tabele koja je u PRVOJ NORMALNOJ FORMI, sastoji samo od

    JEDNOG polja onda je ta tabela AUTOAMTSKI i u DRUGOJ NORMALNOJ FORMI

    Tabela kod koje se primarni ključ sastoji od više polja, je u PRVOJ NORMALNOJ

    FORMI sadrži atrubute koji zavise od dela PRIMARNOG ključa (parcijalna

    zavisnost) (###).

    Zbog toga se tabele iz PRVE NORMALNE FORME prevode u oblik više tabela

    DRUGE NORMALNE FORME, koje ne sadrže parcijalnu zavisnost.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    18

    Primer za bazu BILJAKA:

    Rezultujuće tabele su u DRUGOJ NORMALNOJ FORMI.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    19

    Database Normalization: 3rd Normal Form

    Skup tabela u DRUGOJ NORMALNOJ FORMI

    A table is in 3rd normal form if:

    • it is in 2nd normal form

    • it contains no transitive dependencies (where a non-key attribute is

    dependent on the primary key through another non-key attribute)

    Ako tabela sadži samo jedna ne-ključi atribut, onda oa ne može imati tranzitivnu

    zavisnost. U takvim slučajevima tabela koja je u DRUGOJ NORMALNOJ FORMI je

    automatski i u TREĆOJ NORMALNOJ FORMI.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    20

    Dalje ...

    Plant name is not dependent on either soil category or soil description. Nor is soil

    category dependent on either soil description or plant name.

    However, soil description is dependent on soil category.

    Tako da se postupa kao ranije ….polja se razdvajaju u dve tabele …

    Plant table with soil description removed

    Plant location table remains unchanged

    The new soil table

    Location table remains unchanged

    Ovo bi važilo za sve tabele u bazi. U Tekućem primeru tabele Plantt Location table

    i Location table su već u TREĆOJ NORMALNOJ FORMI.

    Sada su sve tabele na prethodnoj slici u TREĆOJ NORMALNOJ FORMI.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    21

    Treća ormalna forma je uobičajeno dovoljna za najveći broj tabela sa kojima se

    operiše u bazama podataka, jer se kroz ovu formu izbegava največi broj

    anaomalija koji se mogu sresti kod podataka.

    Dakle, predalže se da se pre implementacije tabela u procesu razvoja baza

    podataka većina tabela predive u TREĆU NORMALNU FORMU, jer se time u

    velikom obimu ostvaruju ciljevi NORMALIZACIJE.

    Normalne forme izvan ovih, kao što su Boyce-Codd-ova normalna forma i

    ČETVRTA NORMALNA FORMA, retko su korisne za poslovne aplikacije.

    U većini slučajeva Tabele u 3. normalnom obliku ionako su već u tim normalnim

    oblicima. Ali svaki vešti projektant baze podataka trebao bi znati izuzetke i po

    potrebi biti u mogućnosti normalizovati tabele na više nivoe.

    Database Normalization: Boyce-Codd Normal Form

    Database Normalization: 4th Normal Form

    Database Normalization: 5th Normal Form and Beyond

    Understanding Denormalization

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    22

    MariaDB 10.4.

    Instalacija

    There are several packages types, including the source code:

    • Windows MSI packages

    • Linux YUM packages

    • Linux APT packages

    • Linux and Windows binaries

    • Source code

    https://downloads.mariadb.org/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    23

    After the installation

    mysql -u root -p

    The following is the location for MariaDB 10.0:

    C:\Program Files\MariaDB 10.0\

    The MariaDB configuration file

    C:\WINDOWS\my.ini

    C:\WINDOWS\my.cnf

    C:\my.ini

    C:\my.cnf

    MariaDB Security

    MariaDB User Account Management

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    24

    User privileges

    The privileges or rights that we can grant to users are many and varied. They

    break down into three main categories:

    • Global administrative privileges

    • Database, table, and column privileges

    • Miscellaneous privileges

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    25

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    26

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    27

    Using MariaDB

    Running the mysql command-line client.

    mysql [-u ] [-p] [-h ] []

    Using a database

    MariaDB [(none)]> USE test;

    Database changed

    MariaDB [test]>

    Listing all databases on a server

    MariaDB [(none)]> SHOW DATABASES;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    28

    Creating and dropping databases

    Creating a database

    CREATE DATABASE ;

    Primer:

    MariaDB [kamenica]> create database mona;

    Query OK, 1 row affected (0.182 sec)

    MariaDB [kamenica]> use mona

    Database changed

    MariaDB [mona]>

    Dropping a database

    DROP DATABASE ;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    29

    Primer:

    DROP DATABASE mona;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    30

    Creating, altering, and dropping tables

    Creating a table

    Datatypes include things such as:

    • numbers,

    • text, and

    • dates.

    For example, if we are creating an employee table, we might decide to store an

    employee ID number (number), last name (text), given names (text), preferred name

    (text), birthdate (date), and so on.

    We might also want to store the e-mail addresses, phone numbers, and home

    addresses of the employees, but we don't want to store duplicate data, or define extra

    columns that are hardly ever used, so we should put those in separate tables and then

    link the records back to the appropriate employee. We do this because people often

    have multiple phone numbers and e-mail addresses, and sometimes even extra home

    addresses and we might want to store all of them.

    The process by which we refine our table definitions is called normalization.

    https://mariadb.com/kb/en/recap-the-relational-model.

    dalje

    https://mariadb.com/kb/en/training-tutorials/

    https://mariadb.com/kb/en/training-tutorials/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    31

    The basic syntax of the CREATE TABLE command is as follows:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    32

    CREATE TABLE table_name ();

    Primer:

    MariaDB [mona]> create table zaposleni(

    -> zaposleniID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

    -> prezime varchar(100),

    -> ime varchar(80)

    -> );

    Query OK, 0 rows affected (1.441 sec)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    33

    Exploring the structure of a table

    Altering a table / Menjanje, dopune, preuredjivanje tabele

    The basic syntax for the ALTER TABLE command is as follows:

    ALTER TABLE table_name [, alter_definition] ...;

    Adding a column

    An attribute of an ALTER TABLE command is used to add a

    column has the following pattern:

    ADD [FIRST | AFTER ]

    Primer:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    34

    Modifying a column

    An alter definition of an ALTER TABLE command to modify a column has the

    following pattern:

    MODIFY

    Primer:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    35

    Dropping a column

    Dropping a table

    DROP TABLE

    Primer:

    DROP TABLE zaposleni;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    36

    Selecting, inserting, updating, and deleting data

    Inserting data

    Primer:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    37

    Primer:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    38

    Updating data

    Primer1:

    MariaDB [mona]> UPDATE zaposleni SET

    -> nadimak="Micana",datumRodjenja="2000-10-23"

    -> WHERE ime="Milica" AND prezime="Kojic";

    Query OK, 1 row affected (0.561 sec)

    Rows matched: 1 Changed: 1 Warnings: 0

    Primer2:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    39

    Dodavanje dva zapisa u tabelu zaposleni;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    40

    Deleting data

    Primer:

    Reading data

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    41

    A common condition is to grab everything. This is done using an asterisk

    (*) as follows:

    Primer1:

    Primer2:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    42

    Primer3:

    Primer4:

    Primer5:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    43

    We learned some basic commands which are useful when using MariaDB and

    connecting with the mysql command-line client program.

    We've also become familiar with the basic SQL database Create, Read, Update,

    and Delete (CRUD) operations that will be part of nearly all of our interactions in

    MariaDB.

    Napomena> prethodna materija obradjena za 180 min (4 x 45 min.)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    44

    СЛЕДИ БЛОК 2. / (8:15 - 10:00')

    PRIMER ZA VEZBU

    MariaDB [(none)]> create database if not exists biblioteka; #kreiranje baze

    Query OK, 1 row affected (0.002 sec)

    MariaDB [(none)]> use biblioteka; #konekcija na bazu

    Database changed

    MariaDB [biblioteka]>

    Kreiranje tabela: knjige, autori i serije:

    Polja serijaID i autorID su polja primarnog ključa u tabelama serije i autori,

    respektivno.

    Ova polja su polja spoljnjeg ključa u tabeli knjige.

    Unos podataka u tabelu knjige, pregled structure tabele i podataka u tabeli:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    45

    Dodavanje novog zapisa na kraj tabele:

    MariaDB [biblioteka]> insert into knjige (naslovKnjige,serijaID, autorId)

    -> value("Kad su cvetale tikve",2,4);

    Query OK, 1 row affected (0.101 sec)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    46

    Azuriranje podataka – primer:

    Prikaz dela podataka iz tabele knjige - primer

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    47

    Dodavanje kolona u tabelu – primer:

    Sada je struktura tabele:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    48

    Napomena: Varijable koje opisiju podatke iz familije tekstualnih podataka imaju

    sledece znacenje:

    • CHAR(4) - alfanumerički (tekstualni) podatak fiksne dužine od 4

    karaktera

    • VARCHAR(100) - alfanumerički (tekstualni) podatak maksimalne dužine

    do 100 znakova

    • TEXT - duzi znakovni podatak do max. 65535 znakova (bajta)

    Primer: Dodavanje kolone opis u tabelu autori:

    MariaDB [biblioteka]> ALTER TABLE autori add opis text after autorID;

    Query OK, 0 rows affected (0.178 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    Primer: Uklanjanje kolone opis iz tabele autori:

    MariaDB [biblioteka]> alter table autori drop opis;

    Query OK, 0 rows affected (0.161 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    Dodavanje polja (kolona) u tabelu autori:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    49

    Napomene:

    • As a basic convention, reserved words are printed in all capital letters.

    • This isn't necessary, though. MariaDB is case-insensitive with regards to

    reserved words.

    • Database and table names, however, are case-sensitive on Linux. This is

    because they reference the related directories and files on the filesystem.

    • Column names aren't case sensitive since they're not affected by the

    filesystem, per se.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    50

    Unosenje podataka o autorima – primer:

    Ažuriranje podataka u tabeli KNJIGE:

    MariaDB [biblioteka]> UPDATE knjige SET

    -> izdavacID=1,godIzd=1987,opis="Roman o ljubavi, politici, intelektualna

    vrteska, revoluciji u Pragu"

    -> WHERE knjigaID=1;

    Query OK, 1 row affected (0.051 sec)

    MariaDB [biblioteka]> UPDATE knjige SET

    -> izdavacID=2,godIzd=2009,opis="Srbija u srednjem veku"

    -> WHERE knjigaID=3;

    Query OK, 1 row affected (0.072 sec)

    Rows matched: 1 Changed: 1 Warnings: 0

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    51

    Aktuelni sadržaj tabele knjige:

    IZDVAJANJE PODATAKA - SELECT … dodatne opcije

    Prosireni oblik naredbe SELECT glasi:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    52

    Izvor za prethodnu stranu : ***

    Primer: Izdvajanje dela podataka iz tabele (sa pocetka baze)>

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    53

    Primer: Izdvajanje dela podataka iz tabele (iz proizvoljnog dela)>

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    54

    Primer: Izdvajanje dela podataka iz tabele uz rastuce SORTIRANJE>

    Primer: Izdvajanje dela podataka iz tabele uz OPADAJUCE SORTIRANJE>

    Primer: Izdvajanje dela podataka pod uslovom.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    55

    Tekuce stanje u tabeli autori:

    Primer: Upit sa uslovom i klauzulom IN

    Primer: Upit sa uslovom i klauzulom NOT IN

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    56

    Primer: Upit sa LOGICKIM uslovom OR u klauzuli WHERE

    Primer: Upit sa uslovom BETWEEN u klauzuli WHERE

    Izvor za prethodni pasus:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    57

    Primer: Upit sa uslovom LIKE u klauzuli WHERE

    Odredba GROUP BY

    Izvor: ***

    Opsti primer

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    58

    Za dalji rad detaljno prouciti funkcije i njihovu upotrebu (strane 64-92) iz reference ***:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    59

    SLEDI generalna sintaksa naredbe SELECT

    SELECT

    [ALL | DISTINCT | DISTINCTROW]

    [HIGH_PRIORITY]

    [STRAIGHT_JOIN]

    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

    select_expr [, select_expr ...]

    [ FROM table_references

    [WHERE where_condition]

    [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]

    [HAVING where_condition]

    [ORDER BY {col_name | expr | position} [ASC | DESC], ...]

    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

    procedure|[PROCEDURE procedure_name(argument_list)]

    [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] [export_options]

    INTO DUMPFILE 'file_name' INTO var_name [, var_name] ]

    [[FOR UPDATE | LOCK IN SHARE MODE] [WAIT n | NOWAIT] ] ]

    export_options:

    [{FIELDS | COLUMNS}

    [TERMINATED BY 'string']

    [[OPTIONALLY] ENCLOSED BY 'char']

    [ESCAPED BY 'char']

    ]

    [LINES

    [STARTING BY 'string']

    [TERMINATED BY 'string']

    ]

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    60

    БЛОК 3. / (15:00 - 18:30)

    SPAJANJE TABELA: JOIN

    Joining Tables with JOIN Clauses

    Here is a simple example of three basic JOIN types, which you can experiment

    with in order to see what the different joins accomplish:

    CREATE TABLE mi1 ( a INT );

    CREATE TABLE mi2 ( b INT );

    INSERT INTO mi1 VALUES (1), (2), (3);

    INSERT INTO mi2 VALUES (2), (4);

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    61

    SELECT * FROM mi1 INNER JOIN mi2 ON mi1.a = mi2.b;

    (INNER) JOIN: Returns records that have matching values in both tables

    SELECT * FROM mi1 CROSS JOIN mi2;

    A CROSS JOIN produces a result set in which every row in each table is joined to

    every row in the other table; this is also called a cartesian product.

    In MariaDB the CROSS keyword can be omitted, as it does nothing. Any JOIN

    without an ON clause is a CROSS JOIN.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    62

    SELECT * FROM mi1 LEFT JOIN mi2 ON mi1.a = mi2.b;

    The LEFT JOIN is an outer join, which produces a result set with all rows from the

    table on the "left" (t1); the values for the columns in the other table (t2) depend on

    whether or not a match was found.

    If no match is found, all columns from that table are set to NULL for that row.

    SELECT * FROM mi2 LEFT JOIN mi1 ON mi1.a = mi2.b;

    The RIGHT JOIN is similar to the LEFT JOIN, though its resultset contains all rows

    from the right table, and the left table's columns will be filled with NULLs when

    needed..

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    63

    NAPOMENA: Ako ne postiji u tabeli knjige roman DOROTEJ (izdanje 2017.)

    dodati zapis za izdanje romana Dorotej iz 2017.

    MariaDB [biblioteka]> INSERT INTO knjige(naslovKnjige,serijaID,autorID,godIzd)

    -> VALUE

    -> ("Dorotej",2,3,"2017");

    Query OK, 1 row affected (0.737 sec)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    64

    Tekuće stanje u tabelama autori i knjige:

    NAPOMENA!!!: Ako tekuće stanje u tabelama nije kao u tabelama

    iznad, ažurirati tabele knjige i autori po uzoru na sledeće naredbe.

    INSERT INTO autori(imeAutora, prezimeAutora, porekloAutora)

    -> VALUE

    -> ("Dobrica","Cosic","Srbija");

    ili

    UPDATE knjige SET

    -> izdavacID=1,godIzd=1987,opis=" Prag, ljubav, politika..."

    -> WHERE knjigaID=1;

    ili

    MariaDB [biblioteka]> INSERT INTO knjige(naslovKnjige, godIzd)

    -> VALUE

    -> ("Kad su cvetale tikve",1987);

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    65

    Da bi mogli navesti spisak knjiga (nasloveKnjiga) po autorima, mora tablica knjiga

    SPOJITI sa tablicom autora. To se moze realizovati pomocu JOIN klauzule:

    Notice that the primary table from which we're drawing data is given in

    the FROM clause. The table to which we're joining is given in the JOIN clause along with the commonly named column (i.e., autorID) that we're using for the join.

    U prethodnom primeru prikazani su svi autori.

    Ako je potrebno prikazati samo dela Milana Kundere onda je postupak sledeci:

    This statement will list the titles of Kundera books stored in the database.

    Notice that we've added the AS parameter next to the column name naslovKnjige to change the

    column heading in the results set to Kunderine knjige. This is known as an alias.

    https://mariadb.com/kb/en/join-syntax/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    66

    Primer sa kompletnijim JOIN izrazom:

    There are a few possible ways to construct a join.

    This method works if you're using a newer version of MariaDB and if both tables

    contain a column of the same name and value.

    Otherwise you'll have to redo the JOIN clause to look something like this:

    ...

    JOIN autori ON autorID = rowID

    ...

    This excerpt is based on the assumption that the key field in the autori table is not

    called autorID, but rowID instead.

    There's much more that can be said about joins, but that would make for a much

    longer text.

    U izrazu WHERE često se, radi fleksibilnosti, koriste džoker znaci:

    WHERE name_last LIKE 'Dostoevsk%'

    https://mariadb.com/kb/en/join-syntax/

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    67

    PARAMETRI u naredbi SELECT

    Kao što je dato u opštem prikazu, izrazi i ključna reč SELECT imaju veliki broj

    parametara. Navode se neki, koji mogu biti od koristi:

    DISTINCT

    KLJUČNA reč DISTINCT, se koristi kada želimo da izbegnemo duplicate u prikazu.

    Na primer, ako u bazi postoji više naslova SMESNE LUBAVI od Milana Kundere ali

    sa razlicitim ID brojevima (jer su različite godine i/ili izdavači), a potrebno je da se

    prikaze samo spisak naslova (nezavisno od izdavača i godine izdavanja onda se

    može koristiti DISTINCT.

    Ako je potrebno kreirati listing sa prikazima naslova D. Nenadica, onda je sintaksa

    sledeca:

    Ali ako je potrebno kreirati listing sa prikazima naslova D. Nenadica, ALI BEY

    PONAVLJANJA onda je sintaksa sledeca:

    SELECT DISTINCT naslovKnjige,

    CONCAT(imeAutora,” “,prezimeAutora) AS pisac

    FROM knjige

    JOIN autori USING (autorID)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    68

    WHERE prezimeAutora = “Nenadic”

    HIGH PRIORITY

    Koristi se kod baza koje su veoma opterecene UPITIMA.

    SELECT DISTINCT HIGH PRIORITY naslovKnjige,

    CONCAT(imeAutora,” “,prezimeAutora) AS pisac

    FROM knjige

    JOIN autori USING (autorID)

    WHERE prezimeAutora = “Nenadic”

    ORDER BY naslovKnjige;

    SQL_CALC_FOUND_ROWS

    Prebrajanje broja zapisa koju su u rezultatu upita - primer

    SELECT DISTINCT SQL_CALC_FOUND_ROWS naslovKnjige,

    CONCAT(imeAutora,” “,prezimeAutora) AS pisac

    FROM knjige

    JOIN autori USING (autorID)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    69

    WHERE prezimeAutora = “Nenadic”

    ORDER BY naslovKnjige;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    70

    Primer UPITA:

    MariaDB [biblioteka]> SELECT knjigaID, naslovKnjige,imeAutora,

    prezimeAutora

    -> FROM knjige

    -> RIGHT JOIN autori ON knjige.autorID = autori.autorID

    -> ORDER BY autori.autorID;

    The RIGHT JOIN keyword returns all records from the right

    table (autori), even if there are no matches in the left table

    (knjige).

    (Pitanje: Zasto u rezultatu upita ne postoji knjiga „Kad su cvetale

    tikve“?)

    Primer UPITA ver1:

    MariaDB [biblioteka]> SELECT knjigaID, naslovKnjige,imeAutora,

    prezimeAutora

    -> FROM knjige

    -> LEFT JOIN autori ON knjige.autorID = autori.autorID

    -> ORDER BY autori.autorID;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    71

    The LEFT JOIN keyword returns all records from the left table

    (knjige), even if there are no matches in the right table (autori).

    Primer UPITA ver2:

    SELECT knjigaID, naslovKnjige,imeAutora, prezimeAutora

    -> FROM autori

    -> LEFT JOIN knjige ON knjige.autorID = autori.autorID

    -> ORDER BY autori.autorID;

    OBRATITI PAZNJU: LEVI I DESNI UPIT MOGU IMATI iste REZULTATE (u zavisnosti od

    rasporeda tabela LEVO/DESNO u odnosu na kljucnu rec JOIN)!

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    72

    BRISANJE ZAPISA:

    Primer: brisanje knjiga …

    DELETE FROM knjige

    WHERE navesti uslov;

    Podaci se generalno, prema tipu, mogu podeliti u sledeće grupe:

    • Numerički podaci

    • Tekstualni podaci (alfanumerički podaci)

    • Podaci o datumu i vremenu

    • Logički podaci

    • Ostalo ...

    БЛОК 4. / (08:00 - 10:00)

    Nastavak .... Vežbe - SPOJEVI

    UNUTRAŠNJI SPOJ - INNER JOIN ***

    Primer:

    INNER JOIN ima isto dejstvo kao JOIN.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    73

    ILI umesto INNER JOIN pomocu naredbe WHERE

    SELECT knjigaID, naslovKnjige, godIzd, imeAutora, prezimeAutora

    -> FROM knjige, autori

    -> WHERE knjige.autorID=autori.autorID;

    Dodavanje TABELE izdavaci

    MariaDB [biblioteka]> create table izdavaci(

    -> izdavacID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

    -> nazivIzdavaca varchar(100),

    -> adresaIzdavaca varchar(50),

    -> lokacijaIzdavaca varchar(50));

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    74

    Struktura tabele izdavaci:

    Dodavanje dva polja u tabelu izdavaci:

    INSERT INTO izdavaci(izdavacID, nazivIzdavaca, adresaIzdavaca,lokacijaIzdavaca)

    -> VALUES

    -> (1, "Laguna","Krunska 34", "Beograd"),

    -> (2, "Matica Srpska","Dositejev trg 77", "Novi Sad");

    PRIMER: Spajanje 3 tabele

    IZDAVAC ---→KNJIGA

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    75

    ILI umesto INNER JOIN pomocu naredbe WHERE

    Primer:

    Primer: Dodavanje izdvaca ramanu “Na zapadu nista novo”

    UPDATE knjige SET

    -> izdavacID=1,

    -> WHERE inaslovKnjige="Na zapadu nista novo";

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    76

    Primer: Pregled broja knjiga po izdavacima, za izdavace koji su izdali

    JEDNU i VISE knjiga

    MariaDB [biblioteka]> SELECT

    izdavaci.nazivIzdavaca,COUNT(knjige.autorID) AS brojKnjiga

    -> FROM izdavaci,knjige

    -> WHERE izdavaci.izdavacID=knjige.izdavacID

    -> GROUP BY izdavaci.nazivIzdavaca

    -> HAVING COUNT(knjige.autorID)>=1;

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    77

    Primer: ALIASI za tabele / skracena imena za tabele

    Dalje obnavljanje OUTER JOIN

    Izvor : *** (strana 98)

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    78

    Teorijski primer:

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    79

    Izvor : *** (strana 102) / teorisjki primer

    Rad u GUI client-u.

  • АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА

    Базе података, SQL, MariaDB др Милован Миливојевић

    80

    Za ucenje i treniranje:

    https://www.w3schools.com/sql/

    https://www.tutorialspoint.com/mariadb/mariadb_useful_resources.htm

    https://www.tecmint.com/learn-mysql-mariadb-for-beginners/

    https://www.w3schools.com/sql/https://www.tutorialspoint.com/mariadb/mariadb_useful_resources.htmhttps://www.tecmint.com/learn-mysql-mariadb-for-beginners/