You are on page 1of 56

SQL e avancuar

SQL e Avancuar

Tipet e te dhenave SQL dhe Skemat


Kushtet e Integritetit
Autorizimi
SQL-te Embedded
SQL Dinamike
Konstruktet funksionale dhe procedurale
Query-t rekursive
Karakteristikat e SQL-se se avancuar
Tipet e te dhenave te ndertuara ne SQL

date: Datat, permbajne nje vit (format me 4 digits), muaj, dite


Shembull: date 2005-7-27
time: Orari i dites ne ore, minuta, dhe sekonda.
Shembull: time 09:00:30 time 09:00:30.75
timestamp: data plus ora
Shembull: timestamp 2005-7-27 09:00:30.75

interval: periudhe kohore


Shembull: interval 1 dite

Zbritja e nje date/ore/timestamp nga nje tjeter jep nje interval kohor

Vlera intervali mund ti shtohen nje vlere date/kohe/timestamp


Tipet e te dhenave te ndertuara ne SQL

Mund te nxirren vlera nga fusha te vecanta nga


data/koha/timestamp
Shembull: extract (year from r.starttime)

Mund te behen cast tipat string ne date/time/timestamp


Shembull: cast <string-valued-expression> as date
Shembull: cast <string-valued-expression> as time
Tipet e definuara nga Useri

create type c nderton ne SQL tipe te definuara nga useri

create type Dollars as numeric (12,2) final

create domain nderton ne SQL-92 tipe domaini te definuara nga


useri

create domain person_name char(20) not null

Tipet dhe domainet jane te ngjashme. Domainet mund te kene kushte,


si psh not null, te specifikuar mbi to.
Kushtet e domainit

Jane format me elementare te integritetit te kushteve. Ato


testojne vlerat e vendosura ne database.
Domainet e reja mund te krijohen duke u mbeshtetur mbi data type
ekzistuese.
Shembull: create domain Dollars numeric(12, 2)
create domain Pounds numeric(12,2)
Nuk mund te asenjojme ose krahasojme vlera te shprehura ne Dollare
nga ato te shprehura ne Pound.
Mund te perdorim konstruktin e konvertimit

(cast r.A as Pounds)


(Ose mund te shumezojme me kursin e kembimit dollar-pound)
Tipet Large-Object

Objekte me medha (foto, video, etj) ruhen si objekte te medha (large objects):
blob: binary large object objekti eshte nje koleksion I madh I te dhenash
binare jo te interpretuara( interpretimi behet nga aplikime jashte sistemit
database)
clob: character large object objekti eshte nje koleksion I madh I te
dhenave te tipit karakter
Kur si rezultat i query-t eshte nje objekt I madh, ne fakt nuk kthehet vete
objekti por nje shenjues (pointer).
Kushtet e Integritetit

Kushtet e integritetit kujdesen ndaj demtimeve aksidentale


te database, duke siguruar qe ndryshimet e autorizuara te
databaset nuk cojne ne humbje te konsistences se databaset.
Nje llogari kursimi duhet te kete nje balance me te madhe

se $10,000.00
Rroga e nje punonjesi banke nuk mund te jete me e vogel
se $4.00/ora
Nje klient duhet te kete nje nr. telefoni not-null.
Kushtet mbi nje Relacion te vetem

not null
primary key
unique
check (P ), ku P eshte nje predikat
Kushti Not Null

Deklaro branch_name per branch te jete not null


branch_name char(15) not null

Deklaro domainin Dollars qe te jete not null

create domain Dollars numeric(12,2) not null


Kushti Unique

unique ( A1, A2, , Am)


Specifikimi unique pohon qe atributet
A1, A2, Am
formojne nje celes kandidat.
Celesat kandidate mund te jene edhe null (ndryshe nga celesat primare).
Klauzola check

check (P ), ku P eshte nje predikat

Shembull: Deklaro branch_name si celes primar per


degen dhe sigurohu qe vlerat e aseteve te mos jene
negative.
create table branch
(branch_name char(15),
branch_city char(30),
assets integer,
primary key (branch_name),
check (assets >= 0))
Klauzola check (Vazhd.)

Klauzola check ne SQL-92 ben te mundur kufizimin e domaineve:


Perdor klauzolen check per te siguruar qe nje domain hourly_wage te
permbaje nje vlere me te madhe se nje vlere e caktuar.

create domain hourly_wage numeric(5,2)


constraint value_test check(value > = 4.00)
Integriteti Referencial

Ben te mundur qe nje vlere qe shfaqet ne nje relacion per nje bashkesi
atributesh te shfaqet edhe ne nje relacion tjeter.
Shembull: Nqs Perryridge eshte emri I bankes qe shfaqet ne nje nga
tuplat ne relacionin account,atehere ekziston nje tupel ne relacionin
branch per degen Perryridge.
Celesat Primare, Kandidate dhe ato te Jashtem mund te specifikohen si
pjese e statement create table:
Klauzola primary key liston atributet qe perbejne celesin primar.

Klauzola unique key liston atributet qe perbejne celesin kandidat.

Klauzola foreign key liston atributet qe perbejne celesin e jashtem si


dhe emrin e relacionit te referuar nga celesi I jashtem. Per default, nje
celes I jashtem I referohet celesit primar te tabeles reference.
Integriteti referencial ne SQL Shembull

create table customer


(customer_name char(20),
customer_street char(30),
customer_city char(30),
primary key (customer_name ))
create table branch
(branch_name char(15),
branch_city char(30),
assets numeric(12,2),
primary key (branch_name ))
Integriteti referencial ne SQL Shembull

create table account


(account_number char(10),
branch_name char(15),
balance integer,
primary key (account_number),
foreign key (branch_name) references branch )
create table depositor
(customer_name char(20),
account_number char(10),
primary key (customer_name, account_number),
foreign key (account_number ) references account,
foreign key (customer_name ) references customer )
Assertions

Nje assertion eshte nje predikat qe shpreh nje kusht i cili duhet te
permbushet gjithmone nga nje database.

Nje assertion ne SQL ka formen


create assertion <emri i assertion> check <predikati>

Kur behet nje assertion, sistemi teston per validitetin e tij, dhe e teston
ate per cdo update qe mund te shkele assertion-in.
Ky testim mund te coje ne ngarkim te sistemit; prandaj duhet te
perdoren me kujdes.
Shembull

Cdo kredi ka te pakten nje huamarres I cili mban nje llogari me nje minimum
balance ose $1000.00
create assertion balance_constraint check
(not exists (
select *
from loan
where not exists (
select *
from borrower, depositor, account
where loan.loan_number = borrower.loan_number
and borrower.customer_name = depositor.customer_name
and depositor.account_number = account.account_number
and account.balance >= 1000)))
Shembull i nje Assertion

Shuma e te gjitha kredive per cdo dege duhet te jete me e vogel se


shuma e te gjitha balancave te llogarive ne dege.
create assertion sum_constraint check
(not exists (select *
from branch
where (select sum(amount )
from loan
where loan.branch_name =
branch.branch_name )
>= (select sum (amount )
from account
where loan.branch_name =
branch.branch_name )))
Autorizimi

Forma te ndryshme autorizimi ne pjese te ndryshme te databazes:

Read lejon leximin, por jo modifikimin e te dhenave.


Insert lejon futjen e te dhenave te reja, pa modifikuar ato ekzistueset.
Update lejon modifikimin, por jo fshirjen e te dhenave.
Delete lejon fshirjen e te dhenave.

Forma autorizimi per modifikime ne skemen e databazes:


Index lejon krijimin dhe fshirjen e indekseve.
Resources lejon krijimin e relacioneve te reja.
Alteration lejon shtimin dhe fshirjen e atribueteve ne nje relacion.
Drop lejon fshirjen e relacioneve.
Autorizimi i Specifikimeve ne SQL

Shprehja grant perdoret per te dhene autorizime:


grant <privilege list>
on <relation name or view name> to <user list>
<user list> eshte:
Nje user-id

public, lejon te gjithe userave privilegjet e caktuara.

Nje rol

Grant-i i nje privilegji ne nje view nuk nenkupton grant ne ndonjeren


nga relacionet mbi te cilat mbeshtetet view-ja.
Ai qe grant privilegjet duhet te kete privilegje mbi njesine e caktuar
(ose duhet te jete administrator database).
Privilegje ne SQL

select: lejon akses read (lexim) ne relacion, ose aftesine


per te query mbi view-te.
Psh: grant users U1, U2, dhe U3 autorizim select ne relacionin

branch:
grant select on branch to U1, U2, U3
insert: aftesia per te shtuar tupla
update: aftesia per te updatuar
delete: aftesia per te fshire tupla
all privileges: perdoret si nje forme e shkurtuar per te lejuar te
gjithe llojet e privilegjeve.
Nderprerja (Revoke) e Autorizimit ne SQL

Shprehja revoke perdoret per te nderprere autorizimin.


revoke <privilege list>
on <relation name or view name> from <user list>
Shembull:
revoke select on branch from U1, U2, U3
Revokohen te gjithe privilegjet qe varen nga privilegji i revokuar .
<privilege-list> mund te jene te all per te revokuar qe revokuesi
mund te kete.
Nqs I njejti privilegj I eshte dhene userit nga dy usera te ndryshem, pas
revoke mund te mbahet njeri nga privilegjet.
Embedded SQL

SQL-ja standart percakton perfshirjen e SQL-se ne nje varietet gjuhesh


programimi si C, Java, dhe Cobol.
Nje gjuhe te cilat permbajne query SQL quhen host language.
Shprehja EXEC SQL perdoret per te identifikuar kerkesa embedded SQL
per preprocesorin
EXEC SQL <embedded SQL statement > END_EXEC
Kjo ndryshon nga gjuha ne gjuhe (psh, ne Java perdoret
# SQL { . }; )
Shembull
Nga brendesia e nje host language, gjeni emrat dhe qytetet e
klienteve qe kane me shume variabla ammount ne llogari.

Specifiko querin ne ne SQL dhe deklaro nje curson per te:


EXEC SQL
declare c cursor for
select depositor.customer_name, customer_city
from depositor, customer, account
where depositor.customer_name = customer.customer_name
and depositor account_number = account.account_number
and account.balance > :amount
END_EXEC
Embedded SQL (Vazhd.)

Shprehja open ben qe query te vleresohet


EXEC SQL open c END_EXEC
Shprehja fetch ben qe vlerat e nje tuple ne rezulatatin e queryt te
vendosen ne variablat e nje host language.
EXEC SQL fetch c into :cn, :cc END_EXEC
Thirrjet (calls) te vazhdueshme te fetch marrin tuplat ne vijim te
rezultatit te queryt
Nje variabel e quajtur SQLSTATE merr vleren 02000 per te treguar
qe nuk ka me te dhena te disponueshme.
Shprehja close ben qe database te fshije relacionin e perkohshem qe
mban rezultatin e queryt.
EXEC SQL close c END_EXEC
Shenim: detajet e mesiperme ndryshojne ne varesi te gjuhes se
programimit. Psh, JAVA percakton iterators per te pershkuar
rezultatet e queryt.
Updated permes Kursoreve

Mund te updatojne tupla fetched nga kursore nepermjet deklarimit qe te


kursori do perdoret per update.
declare c cursor for
select *
from account
where branch_name = Perryridge
for update
Per te update tuplat ne location aktual te kursorit c
update account
set balance = balance + 100
where current of c
SQL dinamike

Lejon qe programet te ndertojne dhe te ekzekutojne query ne run time.


Shembull i perdorimit te SQL-se dinamike nga brendesia e nje programi
ne C.

char * sqlprog = update account


set balance = balance * 1.05
where account_number = ?
EXEC SQL prepare dynprog from :sqlprog;
char account [10] = A-101;
EXEC SQL execute dynprog using :account;
Programi me SQL dinamike permban nje ?, qe sherben si ruajtes
pozicioni (place holder) per vleren qe rezulton nga ekzekutimi I queryt.
ODBC dhe JDBC

API (application-program interface) qe nje program te nderveproje me nje


server database
Aplikimi ben thirrje per te :
Per tu lidhur me nje server database

Per ti derguar database serverit komanda SQL

I assenjon tuplat e rezultateve te query-t variablave te nje programi.

ODBC (Open Database Connectivity) punon me C, C++, C#, dhe Visual Basic
JDBC (Java Database Connectivity) punon me Java
ODBC
Open DataBase Connectivity(ODBC) standard
Standarte per aplikimet qe duan te komunikojne me nje database.
application program interface (API) per te

Hapur nje lidhje me nje database,


Dergon query dhe update,
Merr mbrapa rezultatet.
Aplikime si GUI, spreadsheets, etj mund te perdorin ODBC
ODBC (Vazhd.)
Cdo sistem database qe suporton ODBC ve ne dispozicion nje librari
driver e cila duhet te lidhet me klientin e programit.
Kur nje program client ben nje thirrje APA ODBC , kodi ne librari
komunikon me serverin per te derguar veprimin e kerkuar, dhe fetch
rezultatet.
Programi ODBC fillimisht alokon nje ambient SQL, pastaj kujdeset per
lidhjen me database.
Hap lidhjen me databasen nepermjet SQLConnect(). Parametrat per
SQLConnect:
Manaxhuesi I lidhjes,
Serveri me te cilet do lidhet
User-in te cilin do e perdor per tu lidhur,
Password-in
Duhet te specifikoje edhe tipet e argumentave:
SQL_NTS tregon qe argumenti paraardhes eshte nje stringe jo boshe
Kodi ODBC

int ODBCexample()
{
RETCODE error;
HENV env; /* ambienti */
HDBC conn; /* lidhja me databazen*/
SQLAllocEnv(&env);
SQLAllocConnect(env, &conn);
SQLConnect(conn, "aura.bell-labs.com", SQL_NTS, "avi",
SQL_NTS, "avipasswd", SQL_NTS);
{ . Kryen veprimet qe i nevojiten }

SQLDisconnect(conn);
SQLFreeConnect(conn);
SQLFreeEnv(env);
}
Kodi ODBC (Vazhd.)
Programi dergon komanda drejt databazes permes SQLExecDirect
Tuplat e rezulti merren permes SQLFetch()
SQLBindCol() lidh variablat e gjuhes C me atributetet e rezultatit te query
Kur kthehet nje tuple, atributet e saj automatikisht ruhen ne variablat
korrespondues ne C.
Argumentet e SQLBindCol()
Variabla ODBC stmt, atribute pozicioni ne rezultatin e queryt
Tipi I konvertimit nga SQL ne C.
Adresen e variablit.
Per tipet e variablave te gjata, si psh array karakteresh:
Gjatesia Maksimale e variablit

Vendi (location) ku ruhet gjatesia e variablit kur kthehet tupla.

Shenim: Nje vlere negative e kthyer per fushen e gjatesise tregon nje vlere
null
Kodi ODBC (Vazhd.)
Trupi i nje programi
char branchname[80];
float balance;
int lenOut1, lenOut2;
HSTMT stmt;
SQLAllocStmt(conn, &stmt);
char * sqlquery = "select branch_name, sum (balance)
from account
group by branch_name";
error = SQLExecDirect(stmt, sqlquery, SQL_NTS);
if (error == SQL_SUCCESS) {
SQLBindCol(stmt, 1, SQL_C_CHAR, branchname , 80,
&lenOut1);
SQLBindCol(stmt, 2, SQL_C_FLOAT, &balance, 0,
&lenOut2);
while (SQLFetch(stmt) >= SQL_SUCCESS) {
printf (" %s %g\n", branchname, balance);
}
}
SQLFreeStmt(stmt, SQL_DROP);
Karakteristika te tjera te ODBC

Statement e Parapregatitura
Statement SQL I parapregatitur: kompiluar ne database
Mund te kete ruajtes-vendi: psh. insert into account values(?,?,?)

Ekzekutohet ne menyre te perseritur me vlera aktuale per placeholder-at

Karakteristikat e Metadatave
Mbajne te gjitha lidhjet ne database

Mbajne emrat dhe tipet e kolonave e nje rezultati te nje query ose nje

relacion ne db.
Per default, cdo statement SQL trajtohet si nje transaksion I vecuar qe
ekzekutohet automatikisht.
Nuk mund te nderpritet ekzekutimi automatik ne nje lidhje

SQLSetConnectOption(conn, SQL_AUTOCOMMIT, 0)}


Transaksione duhet te ekzekutohen ose te kthehen mbrapsht ne menyre
eksplicite nga
SQLTransact(conn, SQL_COMMIT) ose
SQLTransact(conn, SQL_ROLLBACK)
JDBC

JDBC eshte nje JAVA API per te kominikuar me sistemin database me


suportin e SQL
JDBC suporton nje varietet karakteristikash per query dhe per update te
te dhenave, si dhe per terheqjen e rezultateve te queryt.
JDBC suporton terheqjen e metadatave, si psh query ne lidhje me
relacionet ne db si dhe emrat dhe tipet e atributeve te relacioneve.
Modeli per komunikimin me database:
Hap nje lidhje me database

Krijo objektin statement

Ekzekuto query duke perdorur objektin Statement per te derguar


query dhe per te marre rezultatet.
Ekzistojne mekanizma perjashtimesh per manaxhimin e gabimeve.
Kodi JDBC

public static void JDBCexample(String dbid, String userid, String passwd)


{
try {
Class.forName ("oracle.jdbc.driver.OracleDriver");
Connection conn =
DriverManager.getConnection( "jdbc:oracle:thin:@aura.bell-
labs.com:2000:bankdb", userid, passwd);
Statement stmt = conn.createStatement();
Kryen veprimet.
stmt.close();
conn.close();
}
catch (SQLException sqle) {
System.out.println("SQLException : " + sqle);
}
}
Kodi JDBC (Vazhd.)

Update databazen
try {
stmt.executeUpdate( "insert into account values
('A-9732', 'Perryridge', 1200)");
} catch (SQLException sqle) {
System.out.println("Could not insert tuple. " + sqle);
}
Execute query and fetch and print results
ResultSet rset = stmt.executeQuery( "select branch_name,
avg(balance)
from account
group by branch_name");
while (rset.next()) {
System.out.println(
rset.getString("branch_name") + " " +
rset.getFloat(2));
}
Detajet e kodit JDBC

Fushat per te marre rezultatet:


rs.getString(branchname) dhe rs.getString(1) equivalent
ekuivalent sikur branchname te ishte argumenti I pare I
rezulatatit select.
Manaxhimi me vlerat Null
int a = rs.getInt(a);
if (rs.wasNull()) Systems.out.println(Got null value);
Zgjatjet Procedurale dhe Stored Procedures

SQL ve ne dispozicion nje gjuhe modulare


Lejon percaktimin e procedurave ne SQL, me statement if-then-else ,
cikle for dhe while, etj.
Stored Procedures
Mund te ruajne procedura ne database

Pastaj i ekzekuton permes statement call

Lejon aplikimeve te jashtme per te operuar me nje database pa patur


njohuri me detajet e brendshme te databazes.
Funksionet dhe Procedurat

SQL:1999 suporton funksionet dhe procedurat


Funksionet/Procedurat mund te shkruhen ne SQL, ose ne nje gjuhe te
jashtme programimi
Funksionet jane te perdorshme me tipet e te dhenave si psh. imazhet
dhe objektet gjeometrike.
Shembull: funksion per te kontrolluar nese poligonet mbivendosen,
ose per te krahasuar ngjashmerite e imazheve.
Disa sisteme database suportojne funksione table-valued, te cilet
mund te kthejne si rezultat nje relacion.
SQL: suporton kontrukte ciklesh si psh:
Cikle, if-then-else, etj
Funksionet SQL

Percaktoni nje funksion qe, dhene emri I nje klienti, kthen numrin
llogarive qe ka nje klient.
create function account_count (customer_name varchar(20))
returns integer
begin
declare a_count integer;
select count (* ) into a_count
from depositor
where depositor.customer_name = customer_name
return a_count;
end
Gjeni emrin dhe adresen e cdo klienti qe ka me shume se nje llogari.
select customer_name, customer_street, customer_city
from customer
where account_count (customer_name ) > 1
Funksionet Tabela

SQL:2003 suportojne funksione qe kthejne nje relacion si rezultat


Shembull: Kthe te gjithe llogarite qe ka nje klient I dhene
create function accounts_of (customer_name char(20)
returns table ( account_number char(10),
branch_name char(15)
balance numeric(12,2))
return table
(select account_number, branch_name, balance
from account A
where exists (
select *
from depositor D
where D.customer_name = accounts_of.customer_name
and D.account_number = A.account_number ))
Funksionet tabela (vazhd.)

Perdorimi
select *
from table (accounts_of (Smith))
Procedurat SQL

Funksioni author_count mund te shkruhet ndryshe si nje procedure:


create procedure account_count_proc (in title varchar(20),
out a_count integer)
begin
select count(author) into a_count
from depositor
where depositor.customer_name =
account_count_proc.customer_name
end
Procedurat mund te thirren ose nga nje procedure SQL, ose nepermjet
embedded SQL, permest statement call.
declare a_count integer;
call account_count_proc( Smith, a_count);
Procedurat ose funksione mund te invokohen edhe nga SQL dinamike.
SQL:1999 lejon te kemi me shume se 1 funksion/procedure me te njejtin
emer (quhet overloading), per sa kohe qe numri I argumentave
ndryshon, ose te pakten tipet e argumentave ndryshojne.
Konstrukte procedurale
Statement e perbere: begin end,
Mund te permbajne statement SQL mes begin dhe end.
Variablat lokale qe mund te deklarohen brenda nje statementi te

perbere
While dhe repeat statements:
declare n integer default 0;
while n < 10 do
set n = n + 1
end while
repeat
set n = n 1
until n = 0
end repeat
Konstruktet procedurale(Vazhd.)
Cikli loop:

Lejon pershkimin mbi rezultatet e query-t


Shembull: gjeni totalin e te gjitha balancave ne degen
Perryridge

declare n integer default 0;


for r as
select balance from account
where branch_name = Perryridge
do
set n = n + r.balance
end for
Konstruktet Procedurale (vazhd.)
Statement e kushtezuara (if-then-else)
Psh. Gjeni shumen e balances per secilen nga 3 kategorite e llogarive (me
balance <1000, >=1000 dhe <5000, >= 5000)
if r.balance < 1000
then set l = l + r.balance
elseif r.balance < 5000
then set m = m + r.balance
else set h = h + r.balance
end if
SQL:1999 suporton edhe statement case te ngjashem me ate ne C
Sinjalizimi e kushteve te perjashtimeve dhe manaxhimin e tyre
declare out_of_stock condition
declare exit handler for out_of_stock
begin

.. signal out-of-stock
end
Konstrukti exit ben qe te dilet nga cikli begin..end
Funksione/Procedura te jashtme

SQL:1999 lejon perdorimin e funksioneve dhe procedurave te shkruhen ne


gjuhe te tjera si C ose C++
Deklarimi I funksioneve dhe procedurave te jashtme

create procedure account_count_proc(in customer_name


varchar(20),
out count integer)
language C
external name /usr/avi/bin/account_count_proc

create function account_count(customer_name varchar(20))


returns integer
language C
external name /usr/avi/bin/author_count
Rutinate jashtme (Vazhd.)

Benefitet e procedurave dhe funksioneve te jashtme:


Jane me eficiente per shume veprime, dhe kane me shume aftesi
shprehese
Dizavantazhet
Kodi I implementuar duhet te ngarkohet ne database system dhe te
ekzekutohet atje
Rreziku i korruptimit te struktures se databazes
Rreziku ne lidhje me sigurine: userat mund te aksesojne te dhena ne
menyre te pauatorizuar
Siguria me Rutinat e jashtme

Kujdeset me problemet e sigurise


Perdor teknika sandbox
ky eshte perdorimi I gjuheve te sigurta si Java, e cila nuk mund te
perdoret per te aksesuar dhe demtuar pjese te kodit te databazes.
Ose ekzekutohen funksione/procedura ne procese te vecanta, pa
akses ne memorien proceseve te databazes
Rekursioni ne SQL

SQL:1999 lejon perkufizimin e view-ve rekursive


Psh: gjeni gjithe ciftet punonjes-manaxher, kur punonjesi raporton
direkt ose indirekt tek punonjesi (dmth manaxheri I manaxherit,
manaxheri I manaxherit te manaxherit etj)

with recursive empl (employee_name, manager_name ) as (


select employee_name, manager_name
from manager
union
select manager.employee_name, empl.manager_name
from manager, empl
where manager.manager_name = empl.employe_name)
select *
from empl
Ne kete shembull view, empl, quhen mbyllje tranzitive e lidhjes
manaxher
Fuqia e rekursionit

Viewte rekursive lejojne te shkruhen query, si psh query transaksionale


te mbyllura, te cilat nuk mund te shkruhen pa rekursion.
Intuite: pa rekursion, nje program jo-interativ mund te kryeje vetem
nje numer te caktuar join-esh te manaxherit me veten e tij.

View-te rekursive duhet te jene mono-tone. Kjo do te thote qe, nese


shtojme tupla view-se se manaxherit, ajo do permbaje te gjithe tuplat qe
permbante me perpara, plus te tjera.
Shembull
Karakteristika te avancuara te SQL

Krijo nje tabele me te njejten skeme si nje tabele ekzistuese:


create table temp_account like account

SQL:2003 lejon sub-query ne klauzolen from te aksesojne atributetet te


relacioneve te tjera ne klauzolen from duke perdorur konstruktin
lateral :
select C.customer_name, num_accounts
from customer C,
lateral (select count(*)
from account A
where A.customer_name = C.customer_name )
as this_customer (num_accounts )
Karakteristikat e avancuara SQL

Konstrukti Merge lejon procesimin e updateve masive (batch).


Shembull: relacioni funds_received (account_number, amount ) ka nje seri
depozitash per tu shtuar ne llogarine perkatese ne relacionin account
merge into account as A
using (select *
from funds_received as F )
on (A.account_number = F.account_number )
when matched then
update set balance = balance + F.amount

You might also like