F PDF
F PDF
Data:
Obiectiv:
Introducere în SQL. De asemenea, proiectaț i tabele SQL pentru baza de date Client Master ș i Product Master.
ș i afiș aț i toate valorile.
Software Used:
Oracle 12c ș i DataGrip IDE
i) Client_master
columnname tip de date dimensiune
client_no varchar2 6
name varchar2 20
address1 varchar2 30
address2 varchar2 30
oraș varchar2 15
stat varchar2 15
pincode number 6
bal_due număr 10,2
ii) Product_master
Columnname tip de date size
Product_no varchar2
Description varchar2
Profit_percent număr
Unit_measure varchar2
Qty_on_hand număr
Numărul Reoder_lvl
Sell_price număr
Numărul de preț de cost
Q3:- Pe baza celor două tabele de mai sus, răspundeț i la următoarele chestionare:
Teorie ș i concepte:
Definiț ia vizualizării
DDL-ul SQL include comenzi pentru definirea vizualizărilor.
Controlul tranzacț iilor - SQL include specificarea începutului ș i sfârș itului tranzacț iilor.
SQL încorporat ș i SQL dinamic
SQL încorporat ș i dinamic definesc modul în care declaraț iile SQL pot fi încorporate într-un scop general.
limbajele de programare, precum C, C++, JAVA, COBOL, Pascal ș i Fortran.
Integritate
DDL-ul SQL include comenzi pentru specificarea constrângerilor de integritate pe care datele stocate în
baza de date trebuie să specifice. Actualizările care încalcă constrângerile de integritate sunt permise.
Authorization-
DDL-ul SQL include comenzi pentru specificarea drepturilor de acces la relaț ii ș i vizualizări.
DDL-ul SQL permite specificarea nu doar a unui set de relaț ii, ci ș i informaț ii despre fiecare.
relaț ie, inclusiv-
Schema pentru fiecare relaț ie
Domeniul valorilor asociat fiecărui atribut.
Condiț iile de integritate.
Setul de indici care trebuie menț inut pentru fiecare relaț ie.
Informaț iile de securitate ș i autorizare pentru fiecare relaț ie.
Structura fizică de stocare a fiecărei relaț ii pe disc.
Sintaxă
Creează tabelul nume_tabel
(numele_colului tip_date(dimensiune), numele_colului tip_date(dimensiune));
Crearea unei mese dintr-o masă
Sintaxă
CREAȚ I TABELUL NUME_TABEL
[(nume_columnă, nume_columnă, ………)]
AS SELECT columnname, columnname……..FROM tablename;
Inserarea datelor în tabele-
Sintaxă-
INSERARE ÎN tablename
[(numele coloanei, numele coloanei, ………)]
Valori(exprimaț ie, exprimaț ie);
Sintaxă-
INSERARE ÎN nume_tabel
SELECT nume_column, nume_column, …….
DIN numele_tabelei;
Sintaxă
INSERARE ÎN tabela
SELECT numelecolonnei, numelecolonnei……..
DE la numele_tabelei
WHERE columnname= expression;
Sintaxă
SELECT * DE LA numele_tabelului;
Sintaxă
SELECT numele_coloanei, numele_coloanei, …
DIN numele_tabelei;
Sintaxă
SELECT DISTINCT nume_coloană, nume_coloană
DIN numele_tabelului;
Output:
Interogare:
Result:
i. ii.
Interogare:
i. inserează în client_master (client_no, nume, oraș, cod poștal, stat, sold_de_plată) valori
('0001','Ivan','Bombay','400054','Maharashtra','15000');
insera în client_master (client_no, nume, oraș, cod_posta, stat, bal_due) valori
('0002','Vandana','Madras','780001','Tamilnadu','0');
inserare în client_master (client_no,nume,oraș,cod_postal,stat,suma_de_plată) valori
('0003','pramada','Bombay','400057','Maharashtra','5000');
inserați în client_master (client_no, nume, oraș, cod poștal, stat, sold_datorat) valori
('0004','Basu','Bombay','400056','Maharashtra','0');
inserați în client_master (client_no,nume,oraș,cod_posta,suma_due) valori ('0005','Ravi','Delhi','100001','2000');
inserează în client_master (client_no,nume,oraș,cod poștal,stat,balanț datorat) valori
('0006','Rukmani','Bombay','400050','Maharashtra','0');
Result:
i. client_master
ii. master_produs
Răspuns 3.
Result:
ii. Retrieve the list of names and cities of all the clients.
Result:
Result:
iv. Listaț i toț i clienț ii care se află în Bombay.
Result:
Result:
Result:
vii. Găse ș te toate produsele al căror pre ț de vânzare este mai mare de 5000.
Result:
viii.Găsiț i lista tuturor clienț ilor care stau în oraș ul 'Bombay' sau oraș ul 'Delhi' sau 'Madras'.
Result:
ix. Găsi ț i produsul a cărui pre ț de vânzare este mai mare de 2000 ș i mai mic sau egal cu 5000.
Query:select * from product_master where sell_price >2000 and sell_price <= 5000;
Result:
[Link] ț i numele, ora ș ul ș i statul clien ț ilor care nu se află în statul 'Maharashtra'.
Result:
Experimentul 2
Date:
Obiectiv:
Create the SQL queries for commands like update, alter, rename, delete and drop.
Software utilizat:
Oracle 12c ș i DataGrip IDE
Q1 Folosind tabela client master ș i tabela produs master, răspundeț i la următoarele întrebări.
Teorie ș i concepte:
Sintaxă:
Ș terge din numele tabelei :
+ Adunare Scădere
* înmulț ire exponenț iere
/ Divizare Operaț iune închisă
Renaming columns used with Expression Lists: - Numele coloanelor de ieș ire implicite pot fi redenumite
de către utilizator, dacă este necesar
Sintaxă:
Logical Operators:
Operatorii logici care pot fi utilizaț i în sentinț ele SQL sunt
ȘI toate trebuie să fie incluse
SAU orice poate fi inclus
NU niciunul dintre ele nu ar putea fi inclus
Pattern Searching:
Cea mai frecvent utilizată operaț ie pe ș iruri este potrivirea modelului folosind operaț ia 'like' pe care o
descrie modele folosind două caractere speciale.
Procent (%) ; caracterul % se potriveș te cu orice subș ir, luând în considerare următoarele exemple.
„Perry %” se potriveș te cu orice ș ir care începe cu perry
% idge % se potriveș te cu orice ș ir care conț ine 'idge' ca subș ir.
'- - -' se potriveș te cu orice ș ir exact de trei caractere.
‘- - - % matches any string of at least of three characters.
Funcț ii Oracle:
Funcț iile sunt folosite pentru a manipula elemente de date ș i a returna rezultate. Funcț ia urmează formatul funcț iei
_name (argument1, argument2 ..) .An arrangement is user defined variable or constant. The structure
a funcț iei este astfel încât acceptă zero sau mai multe argumente.
Exemple:
Medie returnaț i valoarea medie a n
Sintaxă:
Medie ([distinct/tot]n)
Min returnează valoarea minimă a expresiei.
Sintaxă:
MIN((distict/all )expr)
Numără Returnează numărul de rânduri în care expr nu este nul
Sintaxă:
Număraț i ([distinct/tot] expr)
Numără (*) Returnează numărul de rânduri din tabel, inclusiv duplicatele ș i cele cu valori nule.
Max Returnează valoarea maximă a expresiei
Sintaxă:
Max ([distinct/all]expr)
Sum Întoarce suma valorilor lui n
Sintaxă:
Suma ([distinct/toate]n)
Sortarea datelor în tabel
Sintaxă:
Selectaț i numele coloanei, numele coloanei
Din tabel
Ordonaț i după numele coloanei;
Output:
Result:
Result:
Result:
iv. Găsi ț i produsele a căror pre ț de vânzare este mai mare de 1500 ș i găsi ț i de asemenea noul
preț de vânzare ca preț de vânzare original * 15.
Întrebare:selectați descrierea din product_master unde prețul de vânzare este mai mare de 1500;
actualizează produs_master setare preț_vânzare=preț_vânzare*15;
selectați prețul_de_vânzare din produs_master;
Result:
v. Găsiț i clienț ii care locuiesc într-un oraș al cărui al doilea litera este a.
Result:
vi. Găsiț i numele tuturor clienț ilor care au 'a' ca a doua literă în numele lor.
Rezultat:
Result:
viii. Numără numărul total de comenzi
Result:
Result:
Result:
[Link] the maximum and minimum prices . Rename the tittle as ‘max_price’ and
preț _minim respectiv.
Result:
xii. Numără produsele care au un pre ț mai mare sau egal cu 1500.
Result:
xiii. Delete the record with client 0001 from the client master table.
Result:
Experimentul 3
Date:
Obiectiv:
Pentru a implementa restricț iile pe tabel.
Software Used:
Oracle 12c ș i DataGrip IDE
i. Sales_master
ii. Sales_order
iii. Sales_order_details
Introduceț i următoarele date în tabelele lor respective folosind instrucț iunea insert:
Teorie ș i concepte:
Constrângerile datelor: În afară de numele celulei, lungimea celulei ș i tipul de date al celulei, există ș i altele
parametrii, adică alte constrângeri de date care pot fi transmise DBA-ului la momentul creării verificării.
Contraintele pot fi plasate fie la nivel de coloană, fie la nivel de tabel.
Conceptul valorii nule:-în timp ce se creează tabele, dacă o linie blochează o valoare de date pentru un anumit
coloana care valoarea este spusă că este null. Coloana de orice tip de date poate conț ine valori null
cu excepț ia cazului în care coloana a fost definită ca ne-null atunci când tabelul a fost creat
Sintaxă:
Creează tabelul numetabel
(nume_coloană tip_date (dimensiune) nu_null ……)
Cheia primară: cheia primară este una sau mai multe coloane într-un tabel folosite pentru a identifica unic
fiecare rând în tabel. Valorile cheii primare nu trebuie să fie nule ș i trebuie să fie uni.
o multicolumnă. O cheie primară multicolumnă se numeș te cheie primară compusă.
Conceptul cheie al UniQuestion:-Un uniQuestion este similar cu o cheie primară, cu excepț ia faptului că
scopul unei chei uniQuestion este de a asigura că informaț iile din coloana pentru fiecare
înregistrarea este uniQuestion, la fel ca numerele de licenț ă pentru telefoane sau dispozitive. O masă poate avea
multe chei uniQuestion.
Conceptul de valoare implicită: La momentul creării celulei, o valoare implicita poate fi atribuită.
Când utilizatorul încarcă un record cu valori ș i lasă această celulă goală, DBA
va încărca automat această celulă cu valoarea implicită specificată. Tipul de date al
valoarea implicită ar trebui să se potrivească cu tipul de date al coloanei
Sintaxă:
Creează tabel nume_tabel
(numele coloanei tip de date (dimensiune) valoare implicită,....);
Sintaxă :
Creează tabel cu numele
(numele coloanei tip de date (dimensiune) face referire la numele unei alte tabele);
Verifică restricț iile de integritate: Foloseș te restricț iile de verificare atunci când trebuie să impui
reguli de integritate care pot fi evaluate pe baza unei expresii logice, iată câteva
exemple de constrângeri de verificare adecvate.
Un nume de constrângere de verificare a coloanei name din coient_master astfel încât numele să fie
INTRODUSE ÎN MAI MARE
O constrângere de verificare pe coloana client_no a client_master astfel încât să nu existe
valoarea client_no începe cu 'c'
Sintaxă:
Crează tabelul nume_tabel
(numele coloanei tip de date (dimensiune) CONSTRÂNGERE numele_constrângerii)
Verifică (expresie));
Output:
Răspuns1.
Query:
Result:
ii. Crea ț i tabelul de comenzi de vânzare.
Întrebare:
Result:
Interogare:
Result:
[Link] date in tabelul sales_master.
Interogare:
Result:
Interogare:
inserare în comanda_de_vânzare(s_order_no,s_order_date,număr_client,tip_livrare,
billed_yn,salesman_no,dely_date,order_status)values ('019001','12-jan-96',
'0001','f','n','s00001','20-jan-96','in process');
introduce în comanda_de_vânzare(s_ordine_nr,s_data_ordine,client_nr,tip_livrare,
billed_yn,salesman_no,dely_date,order_status)values ('019002','25-jan-96',
'0002','p','n','s00002','27-ian-96','anulat');
inserați în comanda_vânzări(s_număr_comandă,data_comenzii,număr_client,tip_livrare,
billed_yn,salesman_no,dely_date,order_status)values ('016865','18-feb-96',
'0003','f','y','s00003','20-feb-96','fulfilled');
inserați în sales_order(s_order_no,s_order_date,client_no,dely_type,
billed_yn,salesman_no,dely_date,order_status)values ('019003','03-apr-96',
'0004','f','y','s00001','7-apr-96','fulfilled');
inserați în sales_order(s_order_no,s_order_date,client_no,dely_type,
billed_yn,salesman_no,dely_date,order_status)values ('046866','20-may-96',
0005,p,n,s00002,22-mai-96,anulat
introduceți în comanda_de_vânzări(s_număr_comandă,s_data_comenzii,client_număr,tip_livrare,
billed_yn,salesman_no,dely_date,order_status)values ('010008','24-may-96',
'0006','f','n','s00004','26-mai-96','în proces');
Result:
Interogare:
introducere în detaliile comenzii de vânzare(s_număr_comandă,număr_produs,qty_comandat,
qty_display,product_rate)values ('019001','p00001','4','4','525');
inserare în detaliile comenzii de vânzări(s_order_no, product_no, qty_order,
qty_display,product_rate)values ('019001','P07965','2','1','8400');
introduceți în detaliile comenzii de vânzări(s_număr_comandă,număr_produs,cantitate_comandată,
qty_display,product_rate)values ('019001','P07885','2','1','5250');
introduce în detaliile comenzii de vânzare(s_order_no,product_no,qty_order,
qty_display,product_rate)values ('019002','p00001','10','0','525');
inserați în detaliile comenzilor de vânzare(s_order_no,product_no,qty_order,
qty_display,product_rate)values ('046865','P07868','3','3','3150');
inserare în detalii_comenzi_de_vânzări(s_numărul_comenzii, numărul_produsului, cantitate_comandată,
qty_display,product_rate)values ('046865','P07885','10','10','5250');
inserați în detaliile comenzii de vânzare(s_order_no,product_no,qty_order,
qty_display,product_rate)values ('019003','p00001','4','4','1050');
inserați în detaliile comenzilor_vânzare(s_număr_comandă,număr_produs,qty_comandă,
qty_display,product_rate)values ('019003','p03453','2','2','1050');
inserați în detaliile comenzii_vânzări(s_order_no, product_no, qty_order,
qty_display,product_rate)values ('046866','p06734','1','1','12000');
inserați în detaliile comenzii de vânzare(s_order_no,product_no,qty_order,
qty_display,product_rate)values ('046866','P07965','1','0','8400');
inserare în detaliile comenzii_vânzării(număr_comandă, număr_produs, cantitate_comandată,
qty_display,product_rate)values ('010008','P07975','1','0','1050');
inserați în detaliile comenzii_vânzării(s_order_no,număr_produs,qty_comandat,
qty_display,product_rate)values ('010008','p00001','10','5','525');
Result:
Relaț ia între tabele după referinț e.
Experimentul 4
Data:
Obiectiv:
Pentru a implementa structura tabelului
Software folosit:
Oracle 12c ș i DataGrip IDE
Challan_Header
Numele coloanei tip de date size Attributes
Challan_no varchar2 6 Cheie primară
s_order_no varchar2 6 Referinț ele cheii externe s_order_no de
tabelul comenzilor de vânzare
Challan_Details
Numele coloanei tip de date size Attributes
Challan_no varchar2 6 Cheie primară
Product_no varchar2 6 Referinț e de cheie străină la product_master
Qty_disp număr 4,2 nu nul
tabelul challan_details
Teorie ș i concepte:
Modificarea structurii tabelelor - Comanda alter table este utilizată pentru a schimba structura
al unui tabel. Folosind clauza alter table nu poț i efectua următoarele sarcini:
The following tasks you can perform through alter table command.
NOTE: Oracle nu permite restricț iile definite folosind alter table, dacă datele din tabelul
încalcă astfel de constrângeri.
Ș tergerea/Eliminarea Tabelului - Comanda următoare este utilizată pentru a ș terge sau elimina un tabel.
Sintaxă:
Ș tergeț i tabela tablename:
Puteț i de asemenea să definiț i constrângeri de integritate folosind clauza de constrângere în ALTER TABLE
comandă. Următoarele exemple arată definiț iile mai multor constrângeri de integritate.
Puteț i elimina o constrângere de integritate dacă regula pe care o impune nu mai este adevărată sau dacă
constrângerea nu mai este necesară. Renunț aț i la constrângere folosind comanda ALTER TABLE cu
clauza DROP. Următoarele exemple ilustrează eliminarea constrângerilor de integritate.
Output:
Răspuns 1
Interogare:
Interogare:
Result:
RĂSPUNS 2
Interogare:
Result:
ii. Introduceț i date în tabelul challan_details.
Interogare:
Result:
Răspuns 3
Interogare:
Interogare: :
Întrebare:
Result:(* attributes with circle in bottom right corner represents not null)
iv. Schimbaț i dimensiunea câmpului client_no din tabela client_master.
Interogare:
Result:
Interogare:
Result:
Experimentul 5
Dată:
Obiectiv:
Pentru a implementa conceptele de join-uri.
Software Used:
Oracle 12c ș i DataGrip IDE
Teorie:
Îmbinare a mai multor tabele (îmbinare echivalentă): Uneori, este necesar să tratăm mai mult de o tabelă ca ș i cum
manipulaț i datele din toate tabelele ca ș i cum tabelele nu ar fi obiecte separate, ci un singur obiect
entitate. Pentru a realiza acest lucru, trebuie să unim tabelele. Tabelele sunt unite pe coloana care are aceleaș i date.
tip ș i date în tabele.
Tabelele care trebuie să fie asociate sunt specificate în clauza FROM ș i asocierea
atribute în clauza WHERE.
1. CARTESIAN PRODUCT:-
Consideraț i două tabele, student ș i curs
Selectaț i B.*, P.*
DE la student B, curs P;
2. INNER JOIN:
Produs cartezian urmat de selecț ie
Selectaț i B.*, P.*
DE la student B, Curs P
UNDE [Link] # [Link] # ;
Exam:
Selectaț i B.*, P.*
Din student B JOIN drept curs P
[Link]# = P curs # ;
Chestionare:
Tabele:
i. Master produs
ii. Client master
Output:
Interogare:
SELECT PRODUCT_MASTER.DESCRIPTION
DIN PRODUS_MASTER
JOIN INTERIOR DETALII_COMENZI_PE ON PRODUS_MASTER.PRODUCT_NO =
SALES_ORDER_DETAILS.PRODUCT_NO
INNER JOIN SALES_ORDER ON SALES_ORDER_DETAILS.S_ORDER_NO = SALES_ORDER.S_ORDER_NO
INNER JOIN CLIENT_MASTER PE SALES_ORDER.CLIENT_NO = CLIENT_MASTER.CLIENT_NO UNDE
CLIENT_MASTER.NAME CA 'ivan';
Interogare:
Întrebare:
Interogare:
SELECT CLIENT_MASTER.NAME
DIN CLIENT_MASTER
INNER JOIN SALES_ORDER PE CLIENT_MASTER.CLIENT_NO = SALES_ORDER.CLIENT_NO
INNER JOIN SALES_ORDER_DETAILS S ON SALES_ORDER.S_ORDER_NO = S.S_ORDER_NO
INNER JOIN PRODUCT_MASTER MASTER2 PE S.PRODUCT_NO = MASTER2.PRODUCT_NO UNDE
[Link] CA 'CD_DRIVE';
5. Listează product_no ș i s_order_no al clien ț ilor care au cantitatea comandată mai mică
decât 5 din tabelul de detalii ale comenzii pentru produsul „dischete de 1,44”.
Interogare:
Interogare:
Query:
8. Găse ș te numărul comenzii, numărul clientului ș i numărul vânzătorului, unde un client a fost
primit de mai mulț i vânzători.
Interogare:
Query:
Interogare:
Obiectiv:
Pentru a implementa conceptele de grupare a datelor.
Software utilizat:
Oracle 12c & DataGrip IDE
Teorie:
Chestionare:
Q1.- Print the description and total quantity sold for each product.
Q2.- Găsiț i valoarea fiecărui produs vândut.
Q3.- Calculaț i cantitatea medie vândută pentru fiecare client care are o valoare maximă a comenzii de 15000.
Q4.- Aflaț i produsele care au fost vândute lui Ivan.
Q5.-Găsiț i numele clienț ilor care au 'Unitate CD'.
Q6.-Găsiț i produsele ș i cantităț ile acestora pentru comenzile plasate de 'Vandana' ș i 'Ivan'.
Q7.- Selectaț i product_no, total qty_ordered pentru fiecare produs.
Q8.- Selectaț i product_no, descrierea produsului ș i cantitatea comandată pentru fiecare produs.
Q9.- Afiș aț i numărul comenzii ș i ziua în care clienț ii au plasat comanda.
Q10.- Afiș aț i luna ș i data când comanda trebuie livrată.
Output:
Interogare:
Interogare:
Interogare:
Interogare:
SELECT PRODUCT_MASTER.DESCRIPTION
DIN PRODUS_MASTER
INNER JOIN DETALII_COMENZI_VÂNZĂRI ON PRODUS_MASTER.NUMAR_PRODUS =
SALES_ORDER_DETAILS.PRODUCT_NO
INNER JOIN SALES_ORDER ON SALES_ORDER_DETAILS.S_ORDER_NO = SALES_ORDER.S_ORDER_NO
INNER JOIN CLIENT_MASTER ON SALES_ORDER.CLIENT_NO = CLIENT_MASTER.CLIENT_NO UNDE
CLIENT_MASTER.NAME CA 'ivan';
v. Găsiț i numele clienț ilor care au 'CD Drive'.
Interogare:
SELECT CLIENT_MASTER.NAME
DIN DETALIILE COMENZII DE VÂNZARE
JOIN INTERIOR ÎN COMENZILE DE VÂNZARE PE SALES_ORDER_DETAILS.S_ORDER_NO = SALES_ORDER.S_ORDER_NO
INNER JOIN CLIENT_MASTER PE SALES_ORDER.CLIENT_NO = CLIENT_MASTER.CLIENT_NO
INNER JOIN PRODUCT_MASTER MASTER2 pe SALES_ORDER_DETAILS.PRODUCT_NO =
MASTER2.PRODUCT_NO UNDE
[Link] CA 'CD_drive';
găsiț i produsele ș i cantităț ile acestora pentru comenzile plasate de 'Vandana' ș i 'Ivan'.
Interogare:
Interogare:
viii. Selectaț i product_no, descrierea produsului ș i cantitatea comandată pentru fiecare produs.
Interogare:
Interogare:
SELECT TO_CHAR(SALES_ORDER.S_ORDER_DATE,'ZIUA'),SALES_ORDER.S_ORDER_NO
DIN COMANDA_DE_VÂNZARE;
Query:
SELECT TO_CHAR(SALES_ORDER.S_ORDER_DATE,'LUNĂ'),SALES_ORDER.DELY_DATE
DIN COMANDA_DE_VÂNZARE;
Experimentul 7
Dată:
Obiectiv:
Pentru a implementa conceptele de vizualizare ș i indexuri.
Software Used:
Oracle 12c ș i IDE DataGrip
Teorie:
Indexes:
Un index este o listă ordonată a conț inutului unei coloane sau a unui grup de coloane dintr-un tabel. Un index creat
pe coloana unică a tabelului se numeș te index simplu. Când mai multe coloane ale tabelului sunt
inclus în index este numit index compus.
Sintaxă (Simplă)
CREAȚ I INDEX index_name
PE numele_tabelei(numele coloanei);
Indice compus:-
CREAȚ I INDEX index_name
PE numele_tabelului(numele_colonelor,numele_colonelor);
Views:
Datele logice sunt modul în care dorim să vedem datele curente din baza noastră de date. Datele fizice sunt modul în care
aceaste date sunt de fapt plasate în baza noastră de date.
Vederile sunt măș ti plasate peste tabele. Acest lucru permite programatorului să dezvolte o metodă
prin care putem afiș a date predefinite utilizatorilor în conformitate cu dorinț a noastră.
Vizualizările pot fi create pentru următoarele motive:
1. DBA-ul stochează vederile doar ca definiț ie. Prin urmare, nu există duplicare de date.
2. Simplifică Chestionarele.
3. Can be Questionried as a base table itself.
4. Oferă securitatea datelor.
5. Evită redundanț a datelor.
Crearea de Vederi:-
Sintaxă:-
CREAȚ I VEDERE viewname CA
SELECT nume_coloană,nume_coloană
DIN numele_tabelei
UNDE numele_coloanei=lista_expr;
Sintaxă:-
CREAȚ I VIZUALIZAREA viewname AS
SELECT newcolumnname….
DIN nume_tabel
UNDE numele_colonne=lista_expresiilor;
Sintaxă:-
SELECT nume_coloană, nume_coloană
DIN viewname
UNDE condiț ia de căutare;
Destroying a view-
Sintaxă:-
DROP VIEW nume_vizualizare;
Chestionare:
Output:
Întrebare:
Query:
Întrebare:
Interogare:
Întrebare:
CREAȚI INDEX UNIC SYS_C0012063
PE SALES_MASTER (NUMĂR_VÂNZĂTOR);
Interogare:
vii. Creează o vedere pe salesman_master al cărei sal_amt este mai mic de 3500.
Interogare:
Interogare:
Interogare:
Întrebare:
Dată:
Obiectiv:
Pentru a implementa conceptele de uniune, intersecț ie ș i diferenț ă.
Software Used:
Oracle 12c ș i DataGrip IDE
Theory:
UNIUNE
Returnează o uniune a două instrucț iuni select. Returnează valori unice (distincte) de
ei.
UNION ALL
Similar cu UNION, doar că UNION ALL returnează ș i valorile duplicate.
Când folosiț i UNION ș i UNION ALL, coloanele din instrucț iunile SELECT trebuie să se potrivească.
Acest lucru ar returna o eroare:
MINUS
MINUS (cunoscut ș i sub numele de EXCEPT) returnează diferenț a între primul ș i al doilea
Declaraț ia SELECT. Este cea despre care trebuie să fim atenț i ce declaraț ie va fi
pune primul, deoarece vom obț ine doar rezultatele care sunt în prima instrucț iune SELECT
şi nu în al doilea.
INTERSECT
INTERSECT este opusul lui MINUS, deoarece ne returnează rezultatele care sunt ambele.
gasit în prima ș i a doua instrucț iune SELECT.
SELECT * FROM table1
INTERSECT
SELECT * FROM table2;
EXEMPLU
Există un exemplu interesant care foloseș te OPERATOARE DE SETURI pentru a compara dacă două
tabelele au valori identice, testând diferenț a simetrică. Dacă rezultatul întregii interogări
nu returnează niciun rând, va însemna că sunt identice.
ÎNTREBĂRI COMPUSE
Fiecare interogare într-o interogare compusă va proiecta propria sa listă de coloane selectate. Acestea
listele trebuie să aibă acelaș i număr de elemente, să fie nominalizate în aceeaș i succesiune,
ș i să fie de tipuri de date în mare parte similare. Nu trebuie să aibă aceleaș i denumiri (sau
aliasuri de coloană), nici nu trebuie să provină din aceleaș i tabele (sau subinterogări). Dacă
numele coloanelor (sau aliasurile) sunt diferite, setul de rezultate al interogării compuse
vor avea coloane numite exact ca în prima interogare.
Coloanele corespunzătoare din interogările care formează o interogare compusă trebuie să fie
al aceluiaș i grup de tip de date. Setul de rezultate al interogării compuse va avea
coloane cu un nivel mai ridicat de precizie.
UNION, MINUS ș i INTERSECT vor combina întotdeauna seturile de rezultate ale intrării
interogări, apoi sortează rezultatele pentru a elimina rândurile duplicate. Dacă ordinea de sortare (care este
Chestionare:
1. Selecta ț i distinct s_order_no din comenzile de vânzări ș i numărul comenzii de vânzări.
2. Selecta ț i toate s_order_no din comanda de vânzări ș i numărul comenzii de vânzări.
[Link] ț i numerele clien ț ilor doar pentru acei clien ț i care au o comandă de vânzare.
[Link] ț i numerele de clien ț i care nu au comenzi de vânzare.
Output:
i. Selectaț i numărul de comandă distinct s_order_no din comanda de vânzări ș i numărul comenzii de vânzări.
Întrebare:
Interogare:
iii. Selectaț i numerele clienț ilor doar pentru acei clienț i care au o comandă de vânzare.
Întrebare:
Query:
Dată:
Obiectiv:
Pentru a implementa baza PL/SQL.
Software Used:
Oracle 12c
Teorie:
mediu.
PL/SQL poate fi, de asemenea, apelat direct din interfaț a de linie de comandă SQL*Plus.
AvantajelePL/SQL
PL/SQL permite trimiterea unui întreg bloc de instrucț iuni către baza de date într-o singură
timp. Aceasta reduce traficul de reț ea ș i oferă performanț e ridicate pentru
aplicaț ii.
PL/SQL oferă o productivitate ridicată programatorilor, deoarece poate interoga, transforma ș i
actualizaț i datele într-o bază de date.
Fiecare instrucț iune PL/SQL se încheie cu un punct ș i virgulă (;). Blocurile PL/SQL pot fi învăluite în interiorul.
alte blocuri PL/SQL folosind BEGIN ș i END. Următoarea este structura de bază a unui
Bloc PL/SQL -
DECLARĂ
<secțiunea declarațiilor>
ÎNCEPE
<comandă executabilă>
EXCEPȚIE
<gestionarea excepțiilor>
SFÂRȘIT;
Chestionarele:
Output:
Interogare:
DECLARĂ
MESSAGE VARCHAR2(20):= 'HELLO, WORLD!';
ÎNCEPE
DBMS_OUTPUT.PUT_LINE(MESAJ);
SFÂRȘIT;
ii. Adăugaț i două numere ș i afiș aț i rezultatul.
Interogare:
DECLARA
A NUMBER:=5;
B NUMĂR:=6;
C INTEGER;
ÎNCEPE
C := A + B;
DBMS_OUTPUT.PUT_LINE('C: ' || C);
SFÂRȘ IT;
Interogare:
DECLAR
UN NUMĂR:=&A;
B NUMĂR:=&B;
C NUMĂR:=&C;
NUMĂR SM;
AV NUMBER;
ÎNCEPE
SM:=A+B+C;
AV:=SM/3;
DBMS_OUTPUT.PUT_LINE('SUMA = '||SM);
DBMS_OUTPUT.PUT_LINE('MEDIA = '||AV);
SFÂRȘIT;
iv. Scrieț i un bloc de cod PL/SQL pentru a găsi factorialul unui număr.
Interogare:
DECLARA
N NUMĂR;
NUMĂRUL I;
F NUMĂR:=1;
ÎNCEP
N:=&N;
PENTRU I ÎN 1..N
BUCLO
F:=F*I;
INCHIDE CICLUL;
DBMS_OUTPUT.PUT_LINE(N||'! = '||F);
SFÂRȘIT;
Interogare:
DECLARĂ
N NUMĂR:=10;
NUMĂRUL I;
SUM1 NUMBER:=0;
ÎNCEPE
PENTRU I ÎN 1..N
BUCLĂ
SUM1:=SUM1+I;
SFÂRȘIT CICLU;
DBMS_OUTPUT.PUT_LINE('SUMA PRIMELOR ZECE NUMERE NATURALE ESTE: ' || SUM1);
SFÂRȘIT;
vi. Print the name and salary of the employee John.
Interogare:
DECLARA
B [Link]%TIP;
C [Link]%TIP;
ÎNCEPE
SELECT NAME, SALARY ÎN B, C DIN EMP UNDE NAME = 'JOHN';
DBMS_OUTPUT.PUT_LINE(B || ' ' || C);
SFÂRȘIT;
Experimentul 10
Dată:
Obiectiv:
Pentru a implementa conceptul de cursoare.
Software Used:
Oracle 12c
Teorie:
Oracle creează o zonă de memorie, cunoscută sub numele de zonă de context, pentru procesarea unui SQL
declaraț ie, care conț ine toate informaț iile necesare pentru procesarea declaraț iei;
de exemplu, numărul de rânduri procesate, etc.
Acursoris este un pointer către această zonă de context. PL/SQL controlează zona de context printr-o
cursor. Un cursor păstrează rândurile (unu sau mai multe) returnate de o declaraț ie SQL. Setul
numărul de rânduri pe care cursorul le deț ine se numeș te setul activ.
Poț i numi un cursor astfel încât să poată fi referit într-un program pentru a obț ine ș i procesa
rândurile returnate de instrucț iunea SQL, câte unul pe rând. Există două tipuri de cursori
−
Cursori implici
Cursori explicaț i
ImplicitCursors
Cursurile implicite sunt create automat de Oracle ori de câte ori o instrucț iune SQL este
executat, când nu există un cursor explicit pentru afirmaț ie. Programatorii nu pot
controlează cursorele implicite ș i informaț iile din acestea.
Ori de câte ori este emis o declaraț ie DML (INSERT, UPDATE ș i DELETE), se creează o implicită
cursorul este asociat cu această declaraț ie. Pentru operaț iunile INSERT, cursorul deț ine
date care trebuie inserate. Pentru operaț iunile UPDATE ș i DELETE, cursorul
identifică rândurile care ar fi afectate.
În PL/SQL, poț i face referire la cel mai recent cursor implicit ca la cursorul SQL, care
întotdeauna are atribute precum %FOUND, %ISOPEN, %NOTFOUND,
şi%ROWCOUNT.
%GĂSIT
1
Returnează TRUE dacă o instrucț iune INSERT, UPDATE sau DELETE a afectat una sau mai multe rânduri sau o
Comanda SELECT INTO a returnat una sau mai multe rânduri. Altfel, returnează FALSE.
%NEGAȚI
2 Opusul logic al %FOUND. Returnează TRUE dacă o instrucț iune INSERT, UPDATE sau DELETE
nu au fost afectate nicio linie, sau o declaraț ie SELECT INTO nu a returnat nicio linie. Altfel, returnează FALSE.
%ISOPEN
3 Întotdeauna returnează FALSE pentru cursori impliciț i, deoarece Oracle închide automat cursorul SQL
după executarea declaraț iei SQL asociate.
%ROWCOUNT
4 Returnează numărul de rânduri afectate de o instrucț iune INSERT, UPDATE sau DELETE, sau returnat
printr-o declaraț ie SELECT INTO.
CursoriExpliciț i
Cursorii explici sunt cursori defini ț i de programator pentru a ob ț ine mai mult control asupra
zona de context. Un cursor explicit ar trebui să fie definit în secț iunea de declaraț ie a
Blocul PL/SQL. Este creat pe o instrucț iune SELECT care returnează mai mult de unul
rând.
Sintaxa pentru crearea unui cursor explicit este–
CURSOR cursor_name ESTE select_statement;
DeclarareaCursorului
Declaraț ia cursorului defineș te cursorul cu un nume ș i SELECT-ul asociat
declaraț ie. De exemplu -
CURSOR c_customers IS
Deschd
iereaCursoruu
li
Deschiderea cursorului alocă memoria pentru cursor ș i îl pregăteș te pentru
încărcarea rândurilor returnate de instrucț iunea SQL în ea. De exemplu, vom deschide
cursoul definit mai sus după cum urmează −
DESCHIDE c_customers;
RecuperareaCursorului
Obț inerea cursorului implică accesarea unei linii de fiecare dată. De exemplu, vom obț ine
rânduri din cursorul deschis anterior după cum urmează -
ClosingtheCursor
Închiderea cursorului înseamnă eliberarea memoriei alocate. De exemplu, vom închide
cursorul deschis mai sus după cum urmează −
ÎNCHIDE c_customers;
Chestionare:
Ieș ire:
Interogare:
DECLARA
A [Link]%TIP;
CURSOR C1 ESTE SELECT NAME DIN EMP;
ÎNCEPE
OPEN C1;
Bucle
FETCH C1 ÎN A;
IESI CÂND C1%NU_SE_GĂSEȘTE;
DBMS_OUTPUT.PUT_LINE('ANGAJAT' || ' ' || A);
FINALIZEAZĂ CICLUL;
ÎNCHIDE C1;
SFÂRȘIT;
II. Folosind cursorul implicit pentru a găsi înregistrări specifice ale angajatului alex.
Interogare:
DECLARĂ
EMPREC EMP%ROWTYPE;
ÎNCEPE
SELECT * ÎN EMPREC DIN EMP UNDE NAME = 'ALEX';
DBMS_OUTPUT.PUT_LINE(EMPREC.EMP_ID || ' ' || [Link] || ' ' || [Link]);
SFÂRȘIT;
iii. Validaț i intrarea folosind excepț ii.
Întrebare:
DECLARĂ
S NUMĂR:=&S;
EX EXCEPȚIE;
ÎNCEPE
IF (S<=10) THEN RAISE EX;
FINALIZEAZĂ;
EXCEPȚIE
CÂND EX ATUNCI DBMS_OUTPUT.PUT_LINE('ID TREBUIE SĂ FIE MAI MARE DECÂT 10');
SFÂRȘIT;
Când s < 10
Când s >10
iv. Actualizaț i salariul fiecărui angajat cu 500 folosind excepț ia.
Interogare:
DECLAR
TNO NUMĂR(3);
ÎNCEPUT
UPDATE EMP SET SALARY = SALARY + 500;
DACĂ SQL%NU A FOST GĂSIT
ATUNCI DBMS_OUTPUT.PUT_LINE('NU S-AU GĂSIT ÎNREGISTRĂRI');
SFÂRȘIT DACA;
DACĂ SQL%FOUND ATUNCI TNO:= SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE(TNO);
ÎNCHIDE Dacă;
SFÂRȘIT;
Înainte de actualizare:
După actualizare:
Experimentul 11
Dată:
Obiectiv:
Pentru a implementa conceptul de funcț ii ș i proceduri.
Software Used:
Oracle 12c
Teorie:
PROCEDURI:
Un subprogram este o unitate/modul de program care îndeplineș te o sarcină particulară. Acestea
subprogramele sunt combinate pentru a forma programe mai mari. Acest lucru se nume ș te practic
„Design modular”. Un subprogram poate fi invocat de un alt subprogram sau program
care se numeș te programul de apelare.
Un subprogram poate fi creat −
La nivelul schemei
În interiorul unui pachet
Proceduri− Aceste subprograme nu returnează o valoare direct; sunt folosite în principal pentru
efectuează o acț iune.
ParteaunuisubprogramPL/SQL
Fiecare subprogram PL/SQL are un nume ș i poate avea, de asemenea, o listă de parametri. Ca
blocuri PL/SQL anonime, blocurile denumite vor avea de asemenea următoarele trei părț i -
Partea declarativă
Este o parte opț ională. Cu toate acestea, partea declarativă pentru un subprogram face
1 nu începe cu cuvântul cheie DECLARE. Con ț ine declara ț ii de tipuri,
cursori, constante, variabile, excepț ii ș i subprograme înn svoite. Aceste
elementele sunt locale subprogramului ș i încetează să existe atunci când subprogramul
finalizează execuț ia.
Partea Executabilă
2 Aceasta este o parte obligatorie ș i con ț ine declara ț ii care execută
acț iune desemnată.
{SI|CA}
ÎNCEPE
<procedure_body>
ENDnumele_procedurii;
Unde,
numele-procedurii specifică numele procedurii.
[OR REPLACE] opț iunea permite modificarea unei proceduri existente.
Lista de parametri op ț ional con ț ine nume, mod ș i tipuri de
[Link]ă valoarea care va fi transmisă din exterior ș i OUT
reprezintă parametrul care va fi folosit pentru a returna o valoare în afara de
procedură.
corpul-procedurii conț ine partea executabilă.
Cuvântul cheie AS este folosit în locul cuvântului cheie IS pentru a crea un standalone.
procedură.
Executarea unei proceduri independente
O procedură autonomă poate fi apelată în două moduri -
Folosind cuvântul cheie EXECUTE
EXECUTARE procedură;
DeletingaStandaloneProcedure
O procedură independentă este ș tearsă cu instrucț iunea DROP PROCEDURE. Sintaxă
for deleting a procedure is
STERGE PROCEDURA nume-procedură;
Modurelideparametrun
îsubprogrameelPLS
/QL
ÎN
Un parametru IN vă permite să transmiteț i o valoare subprogramului. Este numai pentru citire.
1
parametru. În cadrul subprogramului, un parametru IN acț ionează ca o constantă. Acesta
nu poate fi atribuită o valoare. Poț i transmite un constant, literă, iniț ializată
variabilă sau expresie ca parametru IN. De asemenea, o poț i iniț ializa la un
valoare implicită; cu toate acestea, în acel caz, este omisă din subprogram
apel. Este modul implicit de transmitere a parametrilor. Parametrii sunt transmiș i
prin referinț ă.
IEȘ IRE
Un parametru OUT returnează o valoare programului apelant. În interiorul
2 subprogram, un parameter OUT acț ionează ca o variabilă. Îi poț i schimba valoarea
ș i faceț i referire la valoare după ce a fost atribuită. Parametrul efectiv trebuie să
variabilă ș i este transmisă prin valoare.
IN OUT
Un parametru IN OUT trece o valoare iniț ială către un subprogram ș i returnează
o valoare actualizată apelantului. Poate fi atribuită o valoare ș i valoarea poate
3 a fi citit.
MethodsforPassingParameters
Notatia pozitionala
În notaț ia poziț ională, poț i apela procedura ca
findMin(a, b, c, d);
În notaț ia poziț ională, primul parametru efectiv este înlocuit cu primul parametru formal.
parametru; al doilea parametru actual este înlocuit cu al doilea parametru formal
parametru, ș i aș a mai departe. Aș a că, a este înlocuit cu x, b este înlocuit cu y, c este înlocuit cu
forma substitută forzanddis.
Notare Numată
În notarea denumită, parametrul actual este asociat cu parametrul formal
utilizând simbolul săgeată ( => ). Apelul procedurii va fi ca următorul -
findMin(x => a, y => b, z => c, m => d);
Notare mixtă
În nota ț ie mixtă, po ț i combina ambele nota ț ii în apelul de procedură; cu toate acestea,
notaț ia poziț ională ar trebui să precede notaț ia denumită.
Funcț ie:
O funcț ie este la fel ca o procedură, cu excepț ia faptului că returnează o valoare. Prin urmare,
toate discuț iile din capitolul anterior sunt adevărate ș i pentru funcț ii.
CreareauneiFuncț i
O funcț ie independentă este creată folosind instrucț iunea CREATE FUNCTION.
sintaxa simplificată pentru declaraț ia CREATE OR REPLACE PROCEDURE este următoarea–
Unde,
Clauza RETURN specifică tipul de date pe care intenț ionaț i să-l returnaț i din
funcț ie.
corpul-funcț iei conț ine partea executabilă.
Cuvântul cheie AS este folosit în locul cuvântului cheie IS pentru a crea un standalone
funcț ie.
Apelareaunefiuncț i
În timp ce creezi o funcț ie, oferi o definiț ie a ceea ce trebuie să facă funcț ia. Pentru a folosi
o funcț ie, va trebui să apelati acea funcț ie pentru a efectua sarcina definită. Când un
programul apelează o funcț ie, controlul programului este transferat către funcț ia apelată.
O funcț ie apelată îndeplineș te sarcina definită ș i atunci când instruirea sa de returnare este executată
sau când se ajunge la ultima instrucț iune de final, returnează controlul programului înapoi la
programul principal.
Pentru a apela o funcț ie, trebuie pur ș i simplu să treci parametrii necesari împreună cu
numele funcț iei ș i dacă funcț ia returnează o valoare, atunci poț i stoca valoarea returnată
valoare.
Funcț iRecursivePL/SQL
Am văzut că un program sau subprogram poate apela un alt subprogram. Când un
apelul subprogramului la el însuș i este denumit apel recursiv ș i procesul este cunoscut
recursie
Chestionare:
Interogare:
Întrebare:
ÎNCEPE
INSERTUSER(&A,'&B');
RECORDURI INSERATE CU SUCCES
SFÂRȘIT;
iii. Scrie o funcț ie pentru a găsi minimum dintre două numere.
Interogare:
DECLARA
C NUMĂR(8);
ÎNCEPE
C:=F2(20,30);
DBMS_OUTPUT.PUT_LINE('IEȘIRE ' || C);
SFÂRȘIT;
Interogare:
DECLAR
UN NUMĂR;
ÎNCEPE
A:= 23;
SQUARENUM(A);
DBMS_OUTPUT.PUT_LINE(' PATRATUL LUI (23): ' || A);
SFÂRȘIT;
v. Scrieț i o funcț ie pentru a găsi factorialul unui număr.
Interogare:
ÎNTORCE(F);
ÎNCHEI FAPTUL;
DECLARA
F NUMĂR(3);
N NUMĂR(3):=&N;
ÎNCEPE
F:=FACT(N);
DBMS_OUTPUT.PUT_LINE('FACTORIAL= ' || F);
FINAL;
Experimentul 12
Date:
Obiectiv:
Pentru a implementa conceptul de declanș atoare.
Software Used:
Oracle 12c
Teorie:
Declanș atoarele sunt programe stocate, care sunt executate sau activate automat când anumite
evenimentele au loc. Declanș atoarele sunt, de fapt, scrise pentru a fi executate ca răspuns la oricare dintre
evenimentele următoare −
sau SHUTDOWN).
Declanș atoarele pot fi definite pe tabel, vedere, schemă sau bază de date cu care evenimentul.
este asociat.
Audit
Replicarea sincronă a tabelelor
Impunerea autorizaț iilor de securitate
Prevenirea tranzacț iilor invalide
CreareaDecalnșatoareolr
{ÎNAINTE|DUPĂ|ÎN LOCUL}
[OF col_name]
PE numele_tabelului
CÂND(condiție)
DECLAR
Declarații-statements
ÎNCEPE
Declarații executabile
EXCEPȚIE
SFÂRȘIT;
Unde,
CREAȚ I [SAU RECOMPENSAȚ I] TRIGGER nume_trigger − Creează sau înlocuieș te un existent
trigger cu numele_trigger.
{ÎNAINTE DE | DUPĂ | ÎN LOC DE} − Acest lucru specifică când va fi declanș atorul
executat. Clauza INSTEAD OF este folosită pentru a crea un trigger pe o vedere.
{INSERARE [SAU] | UPDATE [SAU] | Ș TERGERE} − Aceasta specifică operaț iunea DML.
CAND (condiț ie) - Aceasta oferă o condiț ie pentru rândurile pentru care declanș atorul
ar încălca. Această clauză este valabilă doar pentru declanș atoare la nivel de rând.
Example
Pentru început, vom folosi tabelul CUSTOMERS pe care l-am creat ș i utilizat în
capitolele anterioare −
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP 4500.00
+----+----------+-----+-----------+----------+
Următorul program creează un trigger la nivel de rând pentru tabelul clienț i care ar
declanș ează pentru operaț iunile INSERT sau UPDATE sau DELETE efectuate pe tabela CLIENTI.
Acest trigger va afiș a diferenț a de salariu între valorile vechi ș i valorile noi
CAND([Link]>0)
DECLARA
sal_diff number;
ÎNCEPE
SFÂRȘIT;
/
Când codul de mai sus este executat la promptul SQL, acesta produce următorul rezultat-
Declanșator creat.
Dacă doriț i să interogaț i tabela în acelaș i declanș ator, atunci ar trebui să folosiț i
după cuvântul cheie, deoarece declanș atoarele pot interoga tabela sau o pot schimba din nou doar
după ce modificările iniț iale sunt aplicate ș i tabelul este readus într-o stare consistentă.
Declanș atorul de mai sus a fost scris în aș a fel încât să se declanș eze înainte de orice
Ș tergeț i sau inseraț i sau actualizaț i operaț iunea pe tabel, dar puteț i scrie propriul dvs.
declanș ează pe o singură sau mai multe operaț iuni, de exemplu ÎNAINTE DE Ș TERGERE, care
se va declanș a de fiecare dată când un fiș ier va fi ș ters folosind operaț iunea DELETE pe
masă.
TriggeringaTrigger
Să efectuăm câteva operaț iuni DML pe tabela CUSTOMERS. Iată un INSERT
declaraț ie, care va crea un nou record în tabel −
VALUES(7,'Kriti',22,'HP',7500.00);
Old salary:
Salariul nou: 7500
Salary difference:
Pentru că acesta este un nou record, salariul vechi nu este disponibil ș i rezultatul de mai sus apare ca
nul. Să efectuăm acum o altă operaț iune DML pe tabela CLIENTI.
Declaraț ia UPDATE va actualiza un apel existent în tabel -
UPDATE clienți
SET salariu=salariu+500
UNDE id=2;
Când un înregistrare este actualizată în tabela CUMPĂRĂTORI, crea ț i mai sus
declanș atorul, display_salary_changes va fi activat ș i va afiș a următorul rezultat–
Date:10-10-2018
Obiectiv:
Pentru a optimiza interogările SQL în cel mai bun mod posibil, astfel încât să necesite
cantitatea minimă de operaț ii ș i, prin urmare, de spaț iu.
1. Select c_name din customerl unde cid în (Select c_id din depositor
INTERSECT select cid from borrower);
2.Selectc_nume din client1 unde cid in (Select cid din depunător unde cid
(Selectează cid din împrumutător);
*VH WHGDWD]LOHGXSGDW