Download as pdf or txt
Download as pdf or txt
You are on page 1of 35

Zavod za industrijsko inženjerstvo INFORMACIJSKI SUSTAVI

Katedra za upravljanje proizvodnjom

T-SQL

Nositelj kolegija: Prof. dr. sc. Dragutin Lisjak


Asistenti: Dr.sc. Davor Kolar
ver. 1.0
Sažetak
 Cilj vježbi: usvojiti osnove strukturnog jezika za upite T-SQL,
tipove često korištenih tipova upita i način stvaranja
uskladištenih procedura
 Sažetak:
 Uvod
 Tipovi naredbi unutar T-SQL-a
 DQL – Data Query Language
 DDLS – Data Definition Language Statements
 DCLS – Data Control Language Statements
 DMLS – Data Manipulation Language Statements
 Spojevi tablica
 Uskladištene procedure
 Transakcije
 Pogledi i okidači
2 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje
Zavod za industrijsko inženjerstvo
1. Uvod

 SQL (eng. Structured Query Language) – zajednički jezik


koji se nalazi u svim relacijskim bazama podataka, to je
zapravo deklarativan jezik, tj. jezik koji se koristi za
opisivanje onog što želimo
 SQL vs. T-SQL (eng. Transact Structured Query Language)
– Microsoftova verzija SQL-a → temelji se na SQL-u, no
ima neke proširene mogućnosti (slično kao što i Oracle
baze koriste PL/SQL )

3 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
1. Uvod

 T-SQL omogućava stvaranje i definiranje strukture baze


podataka, uređivanje prava korisnika za pristup te
upravljanje sadržajem baze
 case-insensitive jezik (SELECT = select, INSERT = insert,…)
 imena objekata u T-SQL-u se formiraju iz slova, znaka [ _ ] (eng.
underscore) i brojeva
 ispravni naziv objekata: BROJ_RN, BrojRN, Broj01
 neispravni naziv objekata: _BrojRN, 1Broj, Broj-RN

4 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2. Tipovi naredbi unutar T-SQL-a

 DQL – Data Query Language


 Upiti za prikazivanje podataka relacijske baze
 DDLS – Data Definition Language Statements
 Upiti za definiciju objekata relacijske baze
 DCLS – Data Control Language Statements
 Upiti za upravljanje objektima relacijske baze
 DMLS – Data Manipulation Language Statements
 Upiti za upravljanje podacima relacijske baze

5 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
Naredba Opis
SELECT Dohvaća jedan ili više zapis iz jedne ili više tablica

 struktura SELECT naredbe:


SELECT <ImeAtributa>
FROM <ImeTablice>
(Right Outer/Left Outer/Inner/Full) JOIN <ImeTablice2>
ON <ImeTablice.NazivAtributa> = <ImeTablice2.NazivAtributa>
WHERE <Uvjet>
GROUP BY <ImeAtributa>
HAVING <Uvjet>
ORDER BY <ImeAtributa>

6 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language

 minimalni oblik SELECT naredbe sadržava SELECT Clause i


FROM Clause
 SELECT Clause sadržava opcionalni kvalifikator ALL ili DISTINCT
te listu atributa ili izraza čije se vrijednosti trebaju pojaviti u
izlaznoj listi rezultata
 u FROM Clause se navodi ime tablice (relacije) iz koje se
dohvaćaju rezultati

SELECT PREZIME, IME FROM T_MPO

7 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
➢!Napomena: Ispred imena atributa (stupca) uvijek se
može navoditi ime relacije (tablice), ali se ime relacije
mora navoditi ispred imena atributa jedino u slučajevima
kada ime atributa nije jednoznačno određeno unutar
liste za selekciju → to se može pojaviti tek u slučajevima
kada se podaci dohvaćaju iz više relacija (eng. join)
➢u sljedećem primjeru navođenje imena relacije je
suvišno, ali ne i pogrešno (ne će uzrokovati pogrešku):

SELECT T_MPO.PREZIME, T_MPO.IME FROM T_MPO

8 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
 SELECT Clause može sadržavati i oznaku "*" ili
imeRelacije. * → to znači da će se u izlaznoj listi pojaviti
vrijednosti svih atributa relacije

SELECT * FROM T_MPO

SELECT T_MPO.* FROM T_MPO

9 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
 ukoliko se navede kvalifikator DISTINCT, u izlaznoj listi rezultata
neće biti višestrukih pojava vrijednosti zapisa koji se nalaze u
nekoj tablici
 npr. ukoliko izlazna lista treba sadržavati sve međusobno
različite poštanske brojeve iz relacije T_MPO, koristiti će se
sljedeći upit:

SELECT DISTINCT PB FROM T_MPO

 !Napomena: kvalifikator ALL ima suprotno značenje od


DISTINCT → može se ispustiti, jer ukoliko se ne navede
kvalifikator DISTINCT, kvalifikator ALL primjenjuje se po
definiciji (by default)

10 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
 uz svaki atribut moguće je navesti i tzv. alias ime, koje će
se u izlaznoj relaciji pojaviti kao naziv atributa (kolone)
 ukoliko se alias ime ne navede, naziv kolone određuje se
prema nazivu atributa u bazi podataka
 alias ime služi isključivo kao "naziv atributa" u rezultantnoj
relaciji te se ne može koristiti unutar upita osim u ORDER BY
Clause

SELECT IME AS [Ime osobe], PREZIME AS [Prezime osobe] FROM T_MPO


SELECT IME + ' '+ PREZIME AS [Puni naziv osobe] FROM T_MPO

razmak

11 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
 WHERE Clause omogućuje postavljanje uvjeta za odabrani
set podataka
 Primjeri:

SELECT * FROM T_RN WHERE BROJ_RN > 1,

SELECT BROJ_RN, NAZIV_RN, DATUM_OTVARANJA_RN FROM T_RN WHERE


DATUM_OTVARANJA_RN BETWEEN '1.1.2013' AND '1.3.2015'

SELECT PREZIME AS [Prezime osobe] FROM T_MPO WHERE PREZIME LIKE 'PR%'

12 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
 neki operatori koji se mogu koristiti uz WHERE Clause:
 = , >, <, >=, <=, <>, !=, !>, !<
 AND, OR, NOT
 BETWEEN
 LIKE
 IN
 ALL, ANY, SOME
 EXISTS

13 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.1. DQL – Data Query Language
 ORDER BY Clause služi za sortiranje podataka po
određenom atributu
 Primjer:

SELECT PREZIME, SIFRA_OSOBE FROM T_MPO ORDER BY PREZIME

SELECT PREZIME, SIFRA_OSOBE FROM T_MPO WHERE PREZIME BETWEEN 'I'


AND 'Z' AND SIFRA_OSOBE > 2 ORDER BY SIFRA_OSOBE, PREZIME DESC

14 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.2. DDLS – Data Definition Language Statements
Naredba Opis
CREATE ime_objekta Stvara (kreira) novu tablicu, pogled na tablicu ili neki drugi objekt u bazi
ALTER ime_objekta Modificira (mijenja) postojeći objekt u bazi
DROP ime_objekta Briše (ispušta) cijelu tablicu, pogled na tablicu ili neki drugi objekt u bazi

USE [ISOS]
GO
....
CREATE TABLE [dbo].[T_NADZO](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TVORNICKI_BR_OP] [nchar](13) NULL,
[KATALOSKI_BR_RDM] [nchar](13) NULL,
[DATUM_NADZORA] [date] NULL,
[SIFRA_OSOBE] [nchar](13) NULL,
[RMS] [float] NULL,
CONSTRAINT [PK_T_NADZO] PRIMARY KEY CLUSTERED
([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
[PRIMARY]
) ON [PRIMARY]
GO

15 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.3. DCLS – Data Control Language Statements
 postavljanje ili mijenjanje dozvola
Naredba Opis
GRANT Daje ovlasti korisnicima
DENY Zabranjuje ovlasti korisnicima
REVOKE Oduzima ovlasti korisnicima

USE ISOS
GRANT/DENY/REVOKE SELECT ON T_MPO TO public

16 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
2.4. DMLS – Data Manipulation Language Statements
Naredba Opis
INSERT Služi za stvaranje zapisa
UPDATE Služi za izmjenu zapisa
DELETE Služi za brisanje zapisa

INSERT INTO [ISOS].[dbo].[T_MPO]


([SIFRA_OSOBE],[PREZIME],[IME],[ADRESA],[PB],[MJESTO],[TELEFON])
VALUES
('5','PREZIME5','IME5','ADRESA5','PB1','MJESTO1','989')
GO

UPDATE T_MPO
SET IME = 'IME6', PREZIME = 'PREZIME6'
WHERE (SIFRA_OSOBE = '2')

DELETE FROM T_MPO


WHERE (SIFRA_OSOBE='5')

17 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
3. SPOJEVI TABLICA (eng. JOINS)
 normalizirana baza je ona u kojoj su podatci "razbijeni" na
više malih tablica, sve s namjenom eliminacije
ponavljajućih podataka, uštede prostora, poboljšanja
performansi i povećanja integriteta podataka → ovo
također podrazumijeva da se podatci nalaze "posvuda"
 za dohvaćanje podataka iz više tablice koristi se JOIN
Clause
 dvije osnovne vrste JOIN Clause-ova:
 INNER JOIN
 OUTER JOIN (LEFT/RIGHT/FULL)

18 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
3.1. INNER JOIN
 unutarnji spojevi (eng. inner joins) su spojevi koji se
najčešće koriste → ti spojevi povezuju dvije tablice na
temelju vrijednosti u kojima se podudaraju

SELECT T_PO.ID, T_PDOB.SIFRA_DOB,


T_PDOB.NAZIV_DOB, T_PO.TVORNICKI_BR_OP,
T_PO.KATALOSKI_BR_OP, T_PO.NAZIV_OP,
T_PO.CIJENA
FROM T_PO
INNER JOIN T_PDOB ON T_PO.SIFRA_DOB =
T_PDOB.SIFRA_DOB

19 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
3.2. OUTER JOIN
 vanjski spojevi (eng. outer joins) su spojevi koji su zapravo
isti kao i unutarnji, samo što oni uvrštavaju i preostale
retke iz jedne od tablica
 a.) desno vanjsko spajanje (eng. RIGHT OUTER JOIN) –
dodaju se oni elementi tablice s desne strane koji ne
sudjeluju u vezi
 Primjer: Tablica1 Tablica2

Rezultat

20 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
3.2. OUTER JOIN
 b.) lijevo vanjsko spajanje (eng. LEFT OUTER JOIN) – dodaju se
oni elementi tablice s lijeve strane koji ne sudjeluju u vezi
 Primjer:
Tablica1 Tablica2

Rezultat

21 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
3.2. OUTER JOIN
 c.) potpuno vanjsko spajanje (eng. FULL OUTER JOIN) – unija
lijevog i desnog vanjskog spajanja
 Primjer:
Tablica1 Tablica2

Rezultat

22 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
4. Uskladištene procedure (eng. Stored Procedures)
 uskladištene procedure su blokovi SQL koda koji mogu izvršiti
neku aktivnost na serveru
 pisanje procedure započinje s naredbom:
CREATE PROCEDURE <ime_procedure>
AS programski_kod
 pozivanje procedure se obavlja s naredbom EXEC
<ime_procedure>
 procedura može sadržavati ulazne parametre naredbe za
kontrolu toka programa (IF, FOR, WHILE…), kao i naredbe za
rukovanje iznimkama (eng. exception handling)
 osnovni cilj:
 povećanje brzine prijenosa podataka unutar mreže
 prevođenje upita – povezivanje tabela
LINK

23 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
4. Uskladištene procedure (eng. Stored Procedures)
 izrada uskladištenih procedura:
 K1: otvorimo SSMS
 K2: odaberemo bazu ISOS → modul Programmability → Stored
Procedures (SP)
 K3: desnom tipkom miša označimo modul Stored Procedures i
odaberemo New Stored Procedure

24 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
4. Uskladištene procedure (eng. Stored Procedures)
 objašnjenje sintakse
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Dodavanje parametara uskladištene procedure (ukoliko su potrebni)
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- za svako izvršavanje naredbi (SELECT, INSERT, UPDATE, DELETE) unutar uskladištene procedure
-- vraća se vrijednost koliko je redova zahvaćeno (eng. affected rows)
-- kada se procedura izvršava, obično nema potreba za tom informacijom te aktiviranjem SET
NOCOUNT ON onemogućujemo da se taj podatak vraća na mjesto odakle se poziva procedura
(aplikacija)
SET NOCOUNT ON;

-- U ovom dijelu se upisuju SQL naredbe SELECT, INSERT, DELETE, UPDATE


SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO

25 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
4. Uskladištene procedure (eng. Stored Procedures)
 a.) Uskladištene procedure bez ulaznih parametara
 nema prosljeđivanja parametara

CREATE PROCEDURE [dbo].[SP_Maticni_Podaci_Dobavljaci_Select]


AS
SELECT SIFRA_DOB, NAZIV_DOB, ZEMLJA_DOB, MJESTO, PB, TELEFON,
KONTAKT_OSOBA, ID
FROM T_PDOB
RETURN

26 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
4. Uskladištene procedure (eng. Stored Procedures)
 b.) Uskladištene procedure s ulaznim parametrima

 potrebno je definirati jedan ili više ulazni parametar


 deklariranje parametara zahtijeva sljedeće informacije:
 ime parametra (započinje sa znakom @ )
 tip podataka (int, nvarchar, datetime…)
 zadanu vrijednost (eng. default value) – ako je potrebno
 smjer (input ili output) – ako je input vrijednost, ona se
ne treba se naznačiti pored parametra, no za output
vrijednost obavezno se treba naznačiti OUT

27 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
4. Uskladištene procedure (eng. Stored Procedures)
 b.) Uskladištene procedure s ulaznim parametrima

CREATE PROCEDURE [dbo].[SP_Nadzor_Stanja_Opreme_Ispis]


@RMS float
AS

SELECT T_NADZO.TVORNICKI_BR_OP, T_PO.NAZIV_OP, T_NADZO.KATALOSKI_BR_RDM,


T_PRDM.NAZIV_RDM, T_NADZO.DATUM_NADZORA, T_NADZO.SIFRA_OSOBE, T_MPO.PREZIME,
T_NADZO.RMS
FROM T_NADZO INNER JOIN T_MPO ON T_NADZO.SIFRA_OSOBE = T_MPO.SIFRA_OSOBE
INNER JOIN T_PO ON T_NADZO.TVORNICKI_BR_OP = T_PO.TVORNICKI_BR_OP
INNER JOIN T_PRDM ON T_NADZO.KATALOSKI_BR_RDM = T_PRDM.KATALOSKI_BR_RDM
WHERE (T_NADZO.RMS >= @RMS)

RETURN

28 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
5. TRANSAKCIJE
 su programski moduli pisani u prilagođenom jeziku koji
može sadržavati više međusobno povezanih SQL naredbi:
 DBMS ih tretira kao cjelovitu jedinicu posla
 osiguravaju integritet podataka bez obzira na veličinu i trajanje
posla koji izvršavaju nad podatcima
 transakcija predstavlja logičku cjelinu rada nad bazom
podataka, pri čemu se:
 transakcija izvršava u cijelosti – sve posljedice transakcije
ostaju trajno u bazi podataka, ILI
 transakcija poništava – sve posljedice transakcije nestaju

29 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
5. TRANSAKCIJE
 nije moguće sve zahvate na bazi podataka izvršiti pomoću
jednostavnih SQL naredbi, a da se pritom u potpunosti očuva
konzistencija baze podataka
 potrebne su naredbe za spajanje više pojedinačnih
naredbi u logičku cjelinu rada, npr.:

BEGIN TRANSACTION; -- prenesi iz T1 u T2


INSERT ....;
DELETE ....;
IF --obje SQL operacije izvršene bez greške
THEN COMMIT ;
ELSE ROLLBACK;
END IF

30 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
5. TRANSAKCIJE
 transakcija započinje s naredbom:
 BEGIN TRANSACTION
 …. Slijedi niz naredbi koje treba izvršiti (tvore
transakciju)
 transakcija završava s jednom od dvije naredbe:
 COMMIT – izvršena se transakcija potvrđuje i postaje
trajna
 ROLLBACK – prekida se izvršenje i vraća se stanje baze
podataka u stanje prije započinjanja promjena, sve
promjene su poništene i svedene na stanje prije
BEGIN…
 prije nego što se izvrši COMMIT, rezultat transakcije nije
vidljiv korisnicima baze podataka

31 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
5. TRANSAKCIJE
 T-SQL podržava i dvije sistemske varijable:
 @@TRANCOUNT – broj ugniježdenih transakcija koje
su započete (LINK)
 @@ERROR – broj greške koja je nastala izvršenjem
posljednjeg T-SQL izraza, ako greške nije bilo vrijednost
joj je nula (LINK)

32 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
5. TRANSAKCIJE

BEGIN TRAN -- POCETAK TRANSAKCIJE

-- 1. Brisanje Radnog naloga @BROJ_RN iz tablice T_RN


DELETE FROM T_RN
WHERE (BROJ_RN = @BROJ_RN)

-- 2. Brisanje Radnog naloga @BROJ_RN iz tablice T_RN_STAVKE


DELETE FROM T_RN_STAVKE
WHERE (BROJ_RN = @BROJ_RN)

-- 3. Spremanje podataka u tablicu T_RN


INSERT INTO
T_RN(BROJ_RN,NAZIV_RN,DATUM_OTVARANJA_RN,SIFRA_OSOBE_OTVARANJA_RN,DATUM_ZATVARANJA_RN,SIFRA_OSOBE_ZATVARANJA_RN)
VALUES
(@BROJ_RN,@NAZIV_RN,@DATUM_OTVARANJA_RN,@SIFRA_OSOBE_OTVARANJA_RN,@DATUM_ZATVARANJA_RN,@SIFRA_OSOBE_ZATVARANJA_RN)

-- 4. Spremanje podataka u tablicu T_RN_STAVKE


INSERT INTO T_RN_STAVKE(BROJ_RN,TVORNICKI_BR_OP,OPIS_RADOVA,TRAJANJE_MIN,NAZIV_LOKACIJE)
VALUES (@BROJ_RN,@TVORNICKI_BR_OP,@OPIS_RADOVA,@TRAJANJE_MIN,@NAZIV_LOKACIJE)

-- Provjera da li je doslo do greske prilikom spremanja podataka


IF @@ERROR <> 0 -- Ako je broj breske <> 0 transakcija spremanja podataka nije uspjela.
BEGIN ROLLBACK TRAN -- Rollback -> Baza se vraća u prvotno stanje.
SELECT @GRESKA = @@ERROR
RETURN @GRESKA
END

COMMIT TRAN -- KRAJ TRANSAKCIJE


SELECT @GRESKA = @@ERROR
RETURN @GRESKA -- Ako je transakcija spremanja podatak uspjela GRESKA=0.

33 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
6. Pogledi (eng. Views) i Okidači (eng. Triggers)
 pogledi (eng. views) – postoje samo kao definicije upita
nad jednom ili više tablica → ne čuvaju podatke u sebi
(prividne relacije bez vlastitih podataka)
 omogućavaju prilagodbu logičkog modela podataka specifičnim
potrebama korisnika
 stvaraju se pomoću naredbe CREATE VIEW
 okidači (eng. triggers) – uskladištene procedure koje se
ne pozivaju naredbom EXEC nego se automatski aktiviraju
kod izvršavanja određenih akcija od strane korisnika (npr.
unos datuma servisa stroja u bazu podataka → treba biti
svaka 2 mjeseca)

34 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo
7. Tipovi podataka
 https://www.w3schools.com/sql/sql_datatypes.asp
 Brojčani (numerički)
 Cjelobrojni
 Int, bigint, smallint,tinyint,bit
 Numerički
 Decimal / Numeric
 Float
 Real
 Datum i vrijeme
 Datetime
 smalldatetime
 Tekstualni
 char
 nchar
 varchar
 text
 ntext
 Ostali
 novac
 timestamp

35 / 34 Informacijski sustavi Fakultet strojarstva i brodogradnje


Zavod za industrijsko inženjerstvo

You might also like