0% au considerat acest document util (0 voturi)
6 vizualizări143 pagini

Curs SQL

Documentul oferă o introducere detaliată în limbajul SQL, explicând structura și funcțiile acestuia. Acesta include obiectivele cursului, definiția SQL, tipurile de date, crearea și manipularea tabelelor, precum și constrângerile de integritate. De asemenea, documentul abordează conceptele de viziuni, sinonime, indici și secvențe în gestionarea bazelor de date.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
6 vizualizări143 pagini

Curs SQL

Documentul oferă o introducere detaliată în limbajul SQL, explicând structura și funcțiile acestuia. Acesta include obiectivele cursului, definiția SQL, tipurile de date, crearea și manipularea tabelelor, precum și constrângerile de integritate. De asemenea, documentul abordează conceptele de viziuni, sinonime, indici și secvențe în gestionarea bazelor de date.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Realizat de: dna YEKKEN Sabrine

Versiune: 2012 -2013


2

Introducere generală.

Pentru a interoga o bază de date, trebuie să foloseș ti un limbaj.


SQL este limbajul cel mai complet pentru a interacț iona cu o bază de date.
4

Obiectivele cursului (1/2)

Introducerea în limbajul SQL


1èmeParte: Prezentarea limbajului LDD
1. Definirea „LDD”
2. Tipurile de date

2èmeParte: Crearea unei tabele/a constrângerilor de integritate


1. Creează o masă / masă dintr-o alta
2. Adăugaț i o constrângere cheie primară, cheie străină

3. Adăugaț i o constrângere (On delete cascade, on delete set null)


4. Alte constrângeri (not null, check, unique)
5. Activare / dezactivare o constrângere
5

Obiectivele cursului (2/2)

3èmeParte: Manipularea structurii tabelului


1. Adăuga, modifică, ș terge o coloană/constraintă
2. Ș tergeț i un tabel
3. Reîntitularea unei tabele

4èmesParte: Alte Obiecte


1. Definiț ie ș i creare de:
i. viziuni

ii. Sinonime

iii. Index

iv. Secvenț e
6

Introducerea în limbajul SQL

Objectifs de la partie :

Introducere ș i definire a limbajului SQL.


7

Definiț ia SQL.

SQL (LimbajStructuratDeInterogare), în limba română limbaj de interogare

structurată, este compusă dintr-un ansamblu de sub-limbaje:

un limbaj de definire a datelor (LDD),


un limbaj de manipulare a datelor (LMD),
un limbaj de interogare a datelor (LID),
un limbaj de control al datelor (LCD),

pentru bazele de date relaț ionale.


8

1eraPartie :
Prezentarea limbajului LDD

Obiectivele părț ii:

Defini ț ie ș i prezentare a limbajului


de definiț ie a datelor, precum ș i
tipuri diferite de date.
9

LDD.

Limbajul de definiț ie a datelor este un limbaj care


permi ț ând definirea ș i manipularea structurilor de

datele ș i nu datele.

Structură de date: orice obiect din BD destinat la


a conț ine date: Exemplu: TABEL.
10

Tipurile de date.
Types de données Description
INT Întreg

CHAR [(dimensiune [BYTE | CHAR])] Dimensiune fixă cuprinsă între 1 ș i 2000

VARCHAR2 (dimensiune) Dimensiune variabilă între 1 ș i 4000

NUMĂR [ ( t , d ) ] Real de t cifre, dintre care d sunt zecimale.

LUNG Date caracter cu o dimensiune <= 2GO

DATE Date cuprinse între 1/1/4712 î.Hr. ș i 31/12/999 [Link].

TIMESTAMP An, lună, zi, oră, minut ș i secundă, fracț iune de secundă

INTERVAL AN(an_precizie) Stochează o perioadă de timp în ani ș i luni, unde year_precision


PE LUNĂ este cuprins între 0 ș i 9. Valoarea implicită este 2
11

2èmeet 3èmeParte :
Crearea unei tabele/constraintelor de integritate -
Manipularea structurii unei mese

Objectifs de la partie :

Cum să creezi o tabelă ș i să defineș ti


constrângerile integrităț ii.
Cum să adăuga ț i, să modifica ț i sau
ș terge coloane sau
constrângerile...
12

Creează o masă. Sintaxă

Sintaxă :
CREAȚ I TABELA <numele_tabelei>
(<nume_coloana1> <tip_coloana1>,
<nume_coloană2> <tip_coloană2>, …
<nom_colonne’> <type_colonne’>
);
Observa ț ie: Pentru a crea o masă, trebuie să ave ț i:
•Privilegiul CREATE TABLE
•Un spațiu de stocare
13

Creează un tabel. Exemple

. CREAȚI TABELUL Studenț i


(Număr de Netudiant,
Nom varchar2(10),
Prenom varchar2(10)
);

. DESCRIE(ou DESC) Studenț i ;--pentru a vedea descrierea tabelului


14

Crează o masă. Tabel dintr-un alt tabel

. CREAȚI TABELA EtudAS SELECT * Din Etudiants ;

tabelul Etud va avea aceeaș i structură ca tabelul Studenț i cu toate


înregistrările din tabel.

tabelul Etud va avea aceeaș i structură cu tabelul Studenț i cu toate


înregistrări din tabel.

. CREAȚI TABELEtudASSELECT * DIN Etudiants UNDE(0=1);

tabela Etud va avea aceeaș i structură ca tabela Etudiantssansles


înregistrări din tabel.

. DESCRIE(ou DESC) Etud ;--pentru a vedea descrierea tabelului


15

Adăugaț i o restricț ie de cheie primară-Sintaxă(1/3)


1ercas : cheie primară simplă

Sintaxă 1: la crearea tabelului:

1ereMetodă: Constrângere nivel COLUMNĂ

CREAȚ I TABELA <numele_tabelei>

( <nom_col1 > <type_col1>CONSTRAINT <nom_contrainte> CHEIE PRIMARĂ,

<nom_col2 > <type_col2>, …

<nom_coln > <type_coln>


);
16

Adăugaț i o constrângere cheie primară - Sintaxă (2/3)

Sintaxă 1: la crearea tabelului:

2èmeMetodă: Constrângere nivel TABEL

CREAŢI TABEL <nom_de_la_table>

( <nom_col1 > <type_col1>,

<nom_col2 > <type_col2>, …

<nom_coln > <type_coln> ,

CONSTRÂNGERE <nom_contrainte> CHEIE PRIMARĂ,


);
17

Adăugaț i o constrângere de cheie primară - Sintaxă (3/3)


2èmecas : cheie primară compusă

Sintaxa 1: la crearea tabelului:

CREAȚ I TABELA <nom_de_la_table>

( <nom_col1 > <type_col1>,


<nom_col2> <type_col2>,

<nom_coln> <type_coln>,
Constrângere <nom_contrainte> Cheie primară (nomCol1, nomCol2...));

Contrainte nivel Tabel

Sintaxă 2: după crearea tabelului:

ALTER TABLE <numele_tabelei> ADĂUGA constrângere <numele_contr> Cheie primară


(nomCol1,nomcol2…)
18

Adăugaț i o constrângere de cheie principală -Exemple

Sintaxă :
ALTER TABLE <numele_tabelului> ADĂUGA Constrângere <numele_constrângerii>

CHEIE PRIMARĂ(nom_colonne(s))

MODIFICĂ TABELA Etudiants ADĂUGAȚ I Restricț ia pk_nom_prenom CHEIE PRIMARĂ

(nom,prenom) ;
19

Eliminarea unei constrângeri de cheie primară.

Sintaxă :
ALTER TABLE <numele_tabelei> DROP CONSTRAINT
<nom_contrainte>;

ALTER TABLE Etudiants DROP CONSTRAINT pk_nom_prenom;


20

Adăugaț i o constrângere de cheie străină.

Sintaxă :
MODIFICĂ TABELA <nom_de_la_table> ADAUGĂ constrângere

CHEIE STRĂINĂ (<nom_cols>) se referă la

<table_référencée>(nume_cols) ;

Creează tabelul Etud ca selectare * din Etudianti;


Modifică tabelul Etud ADĂUGĂ constrângerea pk_nom_prenom CHEIE PRIMARĂ (nom,

prenume);

ALTER TABLE Etud ADDA constrângere fk_etud_etudiants CHEIE EXTERNĂ

(nume, prenume)referinț eStudenț i (nume, prenume) ;


21

Adăugaț i o restricț ie de cheie externă. Opț iuni

Constrângere<nom_constrainte>Cheie străină(<colonne(s)>)
Referinț e<TableReferite>(<coloană(e)>)
LA Ș TERGERE CASCADĂ | SETEAZĂ NULL

. Clauza ON DELETE CASCADE permite eliminarea


automat valorile unei chei externe dependente de o
cheie primară ș i o valoare a acesteia tocmai a fost ș tearsă.
. Clauza ON DELETE SET NULL permite setarea la Zero
automat valorile unei chei străine dependente de o
cheie primară ș i o valoare a acesteia tocmai a fost ș tearsă.
22

Adăugaț i o constrângere <NOT NULL>.

Această constrângere este definită:

- Fie la crearea tabelului, sintaxă :

<nume_coloană> <tip_coloană> constrângere<nume_constrângere>NU NULL

- Deci, după crearea tabelului, sintaxa :


Modifică tabela <nom_tab> pentru a schimba <nom_col> constrângerea <nom_contrainte> NOT NULL

Constrângerea NOT NULL nu poate fi definită decât la nivelul


coloane, nu la nivelul mesei
23

Adăugaț i o constrângere <UNIQUE>


- Defini ț ie

Integritatea neîngrădită de tip cheie unică necesită ca fiecare valoare

într-o coloană sau într-un set de coloane constituind


o cheie să fie unică.

Remarcă: O constrângere unică permite valoarea NULL la


mai puț in decât aț i defini constrângeri NOT NULL
24

Adăugaț i o constrângere <UNIQUE>


- Sintaxă

Această constrângere este definită:

- Fie la crearea tabelului, sintaxă :

<nume_coloană> <tip_coloană> constrângere<nume_constrângere>UNIQUE

- Deci, după crearea tabelului, sintaxă :

Alter table <nom_table> adaugă constrângerea <nom_de_contrainte> UNIC

(<nom_colonne>)
25

Adăugaț i o constrângere <CHECK>.


Constrângerea Check defineș te o condiț ie pe care fiecare linie trebuie să o verifice.

Această constrângere este definită:

Fie la crearea tabelului, sintaxă:

<nume_coloană> <tip_col> CONSTRÂNGERE<nume_de_contr>VERIFICARE(condi ț ie)

- Deci după crearea tabelului, sintaxă :

Modifică tabelul <nom_table> ADĂUGAȚ I CONSTRAINT <nom_de_contr> VERIFICARE (condiț ie)


26

Gestionarea coloanelor ș i/sau a constrângerilor


- Sintaxe

Sintaxă generală :

MODIFICĂ TABELA<nom_table>+ ADĂUGA_CONSTRAINT


<Def _Contrainte>
+ ÎNLĂTURA RESTRICȚ IA

+ ACTIVARE | <Nom contrainte>


DEZACTIVEAZĂRESTRICȚ IA

+ ADĂUGA
<Def _Colonne>
+ MODIFY
+ Ș TERGE <nom colonne>
27

Adăugaț i o/mai multe coloană(e).


Exemple

Adăugaț i 2 coloane la tabela „Studenț i”

ALTER TABLE Etudiants ADĂUGA (telefon număr, email varchar2(50));


28

Modifică o coloană. Exemple

Sintaxă :
ALTER TABLE<nume_tabel>MODIFICĂ<noua definiț ie a coloanei>

MODIFICĂ TABLEEtudiants(CONVERTIM( email varchar2(100) ));


29

Ș terge o coloană. Exemple

Sintaxă :
ALTER TABLE <numele_tabelului> DROP <coloanele>

ALTER TABLE Etudiants DROP ( email, telefon);


30

Activare/Dezactivare o constrângere.

Sintaxă :

ALTER TABLE <numele_tabelei>

ACTIVARE | DEZVOLTARE CONSTRAINTE<nom_de_la_contrainte>;


31

Ș terge o tabelă. DROP / TRUNCATE

Sintaxă :

DROP TABLE <numele_tabelei>;

Remarcă:
Avem comanda „TRUNCATE” care permite golirea tabelului.

ADĂUGA Ț I MASA <numel_mesei>;


32

Renommer une table.

Sintaxă :

RENUME<ancien_nume>LA<nou_nume>;

Exemple:
RENAMEEtudiantsTOEtudiants1;
33

4èmePartie:
Alte Obiecte

Obiectivele părț ii:

Prezentarea viziunilor, sinonimelor,


indici, ș i secvenț ele
34

Ce este o vedere?

O vedere este o tabelă virtuală, în care este posibil să


adunarea informaț iilor din mai multe tabele.
Se vorbeș te despre "viziune" deoarece este pur ș i simplu o reprezentare a
date în scopul unei exploatări vizuale.
Les données présentes dans une vue sont définies grâce à une
clauzaSELECT.

Observaț ie:
Vizualizările există ca obiecte în baza de date. Schimbările aduse la
structura tabelului de bază nu este reflectată în vedere. Pentru a include coloane
pentru a adăuga suplimentare într-o vedere, trebuie să redefiniț i vederea.
35

Interesulviziunilor.

Vizu se află într-o stare intermediară între baza de date ș i


utilizatorul.
O vedere permite astfel:
–O selec ț ie a datelor de afi ș at,
–Restric ț ionare a accesului la tabel pentru utilizator, deci o
sécurité des données
– O prezentare a datelor sub mai multe forme
36

Tipuri de vedere.
Vedere Simplă :
. utilizează o singură masă
. nu conț ine nici funcț ie, nici grup de date
. permite executarea operaț iunilor LMD
Viziune Complexă :
. utilizează mai multe mese
. conț ine funcț ii sau grupuri de date
. nu permite întotdeauna operaț iuni ale LMD
37

Crearea vederilor.
CREAȚI VIZIUNE
(<colonneA>, <colonneB>, <colonneC>, <colonneD>…)

SELECT(<colonne1>, <colonne2>, <colonne3>,<colonne4>)


DE<Nom_table(s)>
UNDE (<condiț ie(s)>)
CU NUMAI CITIRE | CU OPȚ IUNE DE VERIFICARE

. Opț iunea CU LEGĂTURĂ NUMAI indică faptul că nu este posibil să se efectueze actualizări la

zi pe vedere.
. Opț iunea WITH CHECK OPTION împiedică utilizatorul să adauge sau
modifică într-o vizualizare liniile neconforme cu definiț ia vizualizării.
38

Suprimarea viziunilor.

O vedere poate fi distrusă prin comanda:

DROP VIEW <numele viziunii>

Lister les vues :

SELECT * FROM USER_VIEWS


39

Exemple de vederi.

Creaț i vizualizări care permit afiș area:


[Link] angaja ț ilor din departamentul 50,
[Link] ț ii care au fost angaja ț i înainte de anul 2000,
[Link] angaja ț ilor din departamentul 10

1:CREA Ț I SAU ÎNLOCUI Ț I VIZIUNEA vue1 (nume, prenume) AS

SELECT nume_de_familie, prenume din angajaț i


UNDE department_id = 50
40

Ce este un SINONIM?

. C'est unAliassur un objet de la base de données, soit un


scurtături.
. Obiectul poate fi o Tabelă, o Viziune, o Secven ț ă, o
Procédure, une Fonction, un Package.
. SYNONIMUL poate fi Public sau Privat.

Public: va fi accesibil din toate schemele


sau utilizatori.
Privat: va fi accesibil doar din schema
în care a fost creat.
41

Interesele unui SINONIM.

. Mascaț i adevăratul nume al obiectelor ș i localizările acestora.

. Simplificarea numelui obiectelor.


. Evitaț i prefixarea în cereri cu numele său
proprietar.
( exemple : HR. Employees )
Exemple:
42

Crearea unui sinonim.

În primul rând, trebuie să aveț i privilegiul


. Crează un SYNONYM pentru a crea un SYNONYM privat în
schema dumneavoastră,

. Creează orice sinonim pentru a crea un sinonim privat


în orice schemă,
. Crează un SYNONIM PUBLIC pentru a crea un SYNONIM
Public.

CREA Ț I [PUBLIC | ORICE] SYNONIM <sinonim> PENTRU <obiect>

Ș TERGE SYNONIM<synonym>
43

Ce este un Index?

Un index este un obiect al bazei de date care permite accelerarea


căutarea liniilor.
Un index poate fi creat automat sau manual.

. Un index unic este creat automat în timpul


definiț ia unei constrângeri cheie primare

Vizualizarea USER_INDEXES conț ine numele indicilor ș i

Vederea USER_IND_COLUMNS conț ine numele indexurilor, tabelelor


ș i coloane
44

Manipularea unui index.


Crearea unui index :
CREAȚ I [UNIQUE] INDEX <Nom_index> PE tabel (col1, col2, …)

Exemple:
CREA Ț I INDEX idx_employees_lastname PE angaja ț i
(last_name)

Suspendarea unui index :


DROP INDEX <Nom_index>
Exemple:
DROP INDEX idx_angajati_nume
45

Ce este o secvenț ă?

. O secven ț ă este un obiect de bază de date Oracle, la


acelaș i titlu ca o tabelă, o vedere, etc...
. O secven ț ă permite generarea automată de
numere unice
. Este partajabilă între mai mul ț i utilizatori ș i între
mai multe mese

Ea permite crearea unei valori de cheie primară


46

Crearea unei secvenț e.

CREA ȚI SEQUEN ȚĂ
[CREȘ TE CU n]
[ÎNCEPEȚ I CU]
[ {MAXVALUEn |NOMAXVALUE} ]
[ {MINVALUEn |NOMINVALUE} ]
[ {CYCLE|NOCYCLE} ] [ {CACHEn |NOCACHE} ]

. INCREMENTARE CU n: defineș te intervalul dintre numere


. îNCEPE CU: primul număr al secvenț ei
. {MAXVALUEn |NOMAXVALUE} : valeur maximale
. {MINVALUEn |NOMINVALUE} : valeur minimale
. {CYCLE|NOCYCLE} : la séquence peut continuer à générer ou non des
valori
. {CACHEn |NOCACHE} : numărul de valori pre-alocate ș i
conservate în memorie.
47

Interogarea unei Secvenț e.


Interogarea unei secvenț e se face prin utilizarea „pseudo-
coloanele" CURRVAL ș i NEXTVAL. Se vorbeș te despre pseudo-coloană

că se manipulează un pic ca o coloană de tabel, dar acest


nu este o coloană de tabel.

. Pseudo-coloana CURRVAL returnează valoarea curentă a secvenț ei.


. La pseudo-coloană NEXTVAL incrementează secvenț a ș i returnează noul
valoare.

. Putem modifica sau ș terge o secvenț ă.


MODIFICA SECVENȚ A <nom_sequence>…
Ș TERGE SEQUENȚ Ă<nom_sequence>
49

Obiectivele cursului

[Link] limbajului „LMD”


2. Inserarea datelor
[Link] datelor
4. Suprimarea datelor
50

Definirea limbajului LMD


LMD: Limbaj de Manipulare a Datelor (DML, Date)
Limbaj de manipulare

Permite manipularea tabelelor, adică inserarea,


actualizarea ș i ș tergerea datelor.
Este compus din 3 Cereri :
ACTUALIZARE, INSERARE, Ș TERGERE.
51

Inserarea datelor – Sintaxă IMPLICITĂ (1/2)

1erinserare în toate coloanele

INSERARE ÎN <nom_de_la_table> VALORI

(<valoare_coloană1>,
<valeur_colonne2>,…
<valeur_colonne’>

);

Remarcă: numărul valorilor coloanelor trebuie să fie egal cu numărul de


coloană a tabelului ș i conform tipurilor lor
52

Inserarea datelor – Sintaxa EXPLICITĂ (2/2)

2èmecas:Introducere în câteva coloane

INSEREAZĂ ÎN <numele_tabelei>

( <colonne1>,

<colonne2>,

<colonne3> )

VALUES
( <valoare_coloană1>,

<valeur_colonne2>

<valeur_colonne3> );
53

Inserarea datelor – Exerciț iu - Enun ț (1/2)

Iată schema relaț ională următoare :


CLIENTS (CodeClient, NomClient, AdrClient, TelClient)
COMMANDES (NumCommande, Date, CodeClient#)

Întrebări:

[Link]ă cele 2 tabele cu constrângerile de integritate (chei


primare ș i străine)
54

Inserarea datelor – Exerciț iu - Enun ț (2/2)

[Link] ț i liniile sale:

CLIENTS
CodeClient NomClient AdrClient TelClient
C01 Bensalem Ali 3 rue tunis 2080 tunis 71123800
C02 Toumi salma - 71129870

COMMANDES
NumCommande Date CodeClient
110 03/04/2011 C01
111 09/07/2011 C02
55

Actualizare a datelor
Sintaxă:

UPDATE <nom_table> SET <colonne_a_modifié> = <nouvelle_valeur>

UND(<condiț ie_de_actualizare>);

Exemple:
Clientul Bensalem Ali tocmai ș i-a schimbat adresa ș i locuieș te cu clientul
Toumi Salma la "15 rue Basra Bizerte 7000", vă rugăm să actualizaț i
două adrese.
56

Supresia datelor
Sintaxă:

Ș TERGE DIN <nom_table> UNDIF(<condition>);

Exemple:
1. Ș tergeț i comenzile clientului „Toumi salma”
2. Goli ț i tabelul client
58

Objectifs du cours.

[Link] LID
2. A ș ti să formulezi cereri simple „SELECT”
3. Distinguer func ț iile pe o singură linie / pe mai multe linii

[Link] Îmbinărilor, Operatorilor de ansamblu ș i


sub-interogări
59

1ereParte :
Cereri simple „clauza SELECT“

Obiectivele părț ii:

Definirea „LID”, ș tiind să selectezi


colonne cu sau fără duplicat, cu sau fără
condi ț ii de cunoa ș tere a expresiilor
aritmetice, valoarea "NULL", aliasurile
de coloană, operatorii logici ș i cei de
comparatie.
60

LID. (1/2)

Limbajul LID permite, aș a cum sugerează numele său, să interoghezi


o bază de date. Serveș te pentru a căuta, extrage, sorta, a pune în formă

date etcalculerd'autres date din date


existente.

Structura unei interogări este formată din cele 3 clauze


următoarele :

SELECT*|<lista câmp(uri)> DIN <nume_tabel>


UNDEN<condi ț ie(s)> ;
61

LID. (2/2)

. Clauza SELECT: indică coloanele de recuperat. (sau


încă câmpuri proiectate).
. Clauza FROM indică numele tabelului sau tabelelor
implicată(e) în interogare.
. Clauza WHERE corespunde condiț iilor de selecț ie
câmpurile.
. Fiecare nume de câmp sau de tabel este separat printr-o
virgulă.
62

Selecț ia coloanelor. Toate coloanele

SELECT* Afiș aț i toate câmpurile


de la masă
DIN angaja ț i;

Rezultatul:
63

Selectarea coloanelor. Une/mai multe coloane

Afiș ează câmpurile :


SELECT nume_prenume, nume_familie
« last_name » et
DE la angaja ț i; « first_name »

Rezultat:
64

Expresii aritmetice. Definiț ie

i.O expresie con ț ine date de tip NUMBER,


DATE ș i operatori aritmetici.

Operator Description
+ Adăugare
- Scădere
* Înmulț ire
/ Diviziune
65

Expresii aritmetice. Exemple 1

SELECT min_salary + max_salary, min_salary - max_salary,


salariu_minim * salariu_maxim, salariu_minim / salariu_maxim

DELa locuri de muncă;

Résultat:
66

Expresii aritmetice. Exemple 2

Scrie ț i interogarea care permite afi ș area numelui, prenumelui de

to ț i angaja ț ii, precum ș i salariul lor anual cu o


augmentare de 50 de dinari pe lună.
67

Valoare „NULL”. Definiț ie

. NULL este o valoare care nu este disponibilă, neatribuită sau necunoscută.


. NULL este diferit de zero, spa ț iu sau ș ir gol

Exemple 1:

SELECT employee_id, commission_pct


DE la angajaț i ;

Résultat:
68

Valoare „NULL”. În expresiile aritmetice.

Exemple 2:

SELECT Employee_id, (1+comision_pct)*salariu


DE la angajaț i;

Rezultat:
69

Alias de coloană. (1/2)

. Reîntitulează un antet de coloană


. Urmează numele coloanei
. Poate folosi cuvântul cheie „ca”
. Trebuie să fie inclus între ghilimele dacă
conț ine spaț ii, caractere speciale sau dacă există
des majuscules et des minuscules
70

Alias de coloană. Exemple (2/2)

SELECT first_name as nume, last_name prenume

DE la angajaț i;

Résultat:

SELECT first_name as "nume al angajatului", last_name as "prenume al angajatului"

DE la angajaț i;

Rezultat:
71

Operator de concatenare.

. Concatenarea coloanelor ș i/sau a ș irurilor de caractere


. Este reprezentat de simbolul ||
Exemple:

SELECT ' numele este ' || first_name || ', prenumele este ' || last_name as "nume ș i prenume"

prenomde l’employe"
DE la angajaț i;

Résultat:
72

Elimină duplicatele

. cuvântul cheie DISTINCT elimină duplicatele.

Exemple:

SELECT DISTINCT (commission_pct)


DE la angajaț i;

Rezultat:
73

Restricț ie cu clauza „WHERE”

Sintaxă :
SELECT<nomul coloanelor>DIN<nomul tabelului>
UNDE<condiț ii>;

Exemple: lista angajaț ilor din departamentul 20

SELECT nume_de_familie, prenume DIN angajaț i


UNDdepartment_id=20;

Résultat:
74

Operatori de comparaț ie. (1/2)

OPERATOR DESCRIPTION
= Egal la
< Inferior la
<= Inferior sau egal
> Superior la
>= Mai mare sau egal cu
<> sau != Diferenț iat
ÎNTRE val1 Ș I val2 val1 <= val <= val2

În (liste de valori) Valoarea listei


ÎMI PLACE Ca
( _ :un caracter, %=mai multe caractere)

ESTE NULL Corespunde unei valori NULL


75

Operatori logici. (2/2)

OPERATOR DESCRIPTION

ȘI Returnează TRUE dacă ambele condiț ii sunt ADEVĂRATE

Retourne TRUE dacă cel puț in una dintre condiț ii este


SAU
ADEVĂRAT
Inversează valoarea condiț iei
NU ADEVARAT si când condiț ia este FALSĂ
FALS ș i condiț ia este ADEVĂRATĂ
76

Ordonează cu „ORDER by”.Definiț ie

Sorta ț i liniile conform unei ordini bine stabilite cu clauza


ORDER BY:

. ASC :oridinecrescătoare (implicit)


. DESC :ordredécroissant

Observaț ie: Clauza ORDER BY vine ultima în


instrucț iunea SELECT
77

Sortează cu « ORDER by ».Exemple

SELECT nume_de_familie, ID_loc_de_muncă, ID_departament, data_angajării

DE la angajaț i
ORDONARE DUPĂ hire_date DESC;

Résultat:
78

Exerciț ii de aplicaț ii. (1/2)

( vom folosi tabela « employees » din schema HR )

. Afiș aț i lista tuturor angajaț ilor.


. Afisează numele, prenumele, data angajării tuturor angajaț ilor ș i
renommer les colonnes comme suit: « nom del’employe », « prenom de
l’employe » et « date dembauche »
. Afiș aț i numele ș i prenumele angajaț ilor ordonaț i după data angajării.
. Afiș aț i angajaț ii care au fost angajaț i în cursul anului 1990.
. Afiș aț i lista angajaț ilor al căror salariu este > 2800.
. Afiș aț i lista angajaț ilor din departamentele 10, 30 ș i 50.
79

Exerciț ii de aplicaț ie. (2/2)

. Afisa ț i lista angaja ț ilor al căror salariu este între 4000 ș i 6000.
departamentul 20
. Afiș aț i lista angajaț ilor al căror commission_pct este NULL.
. Afiș aț i lista angajaț ilor al căror nume începe cu litera ‘A’
. Afiș aț i lista angajaț ilor al căror prenume conț ine litera 's'
. Afiș aț i lista angajaț ilor al căror al doilea caracter din nume este 'i'
. Afiș aț i lista angajaț ilor angajaț i în anii între 1986
et 1990
. Afiș aț i lista angajaț ilor al căror loc de muncă este diferit de 'CLERK' sau
MANAGER
2emePartie : Funcț iile pe o linie

Obiectivele părț ii:

Definiț i ș i ș tiț i să utilizaț i:


i. Funcț ii de caractere
ii. Funcț ii de manipulare a caracterelor
iii. Funcț ii de manipulare a datelor
iv. Funcț ii numerice
v. Funcț ii de conversie
vi. Alte funcț ii
81

Funcț ii de caractere. Conversie Minuscule/Majuscule (1/2)

Există trei funcț ii principale:

. convertiț i caracterele „M” în „m”


. CONVERTIȚ I CARACTERELE „m” ÎN „M”
. INITCAP: converti ini ț iala fiecărui cuvânt în „M” ș i
caracterele următoare în „m”

. Observa ț ie: O func ț ie pe o singură linie este o func ț ie care se aplică


înregistrare prin înregistrare.
82

Funcț ii de caractere. Conversie minusculă/majuscule (2/2)

SELECTLOWER(numele_de_familie)as "prénom" FROM angajaț i;

SELECT UPPER(numele_de_familie) AS "prénom" FROM angajaț i;

SELECTINITCAP(numele_de_familie)as "prenume" DIN angajaț i;


83

Funcț ii de manipulare a [Link]ț ii (1/2)

. CONCAT(chaine1,chaine2):concatenează 2 ș iruri = ||
. SUBSTR(chaine, pos, taille) : extrage o subș ir dintr-un altă
lanț
. LUNGIME(ch): lungimea unui ș ir de caractere
. INSTR(ch,sch): poziț ia unui ș ir de caractere într-o
autre chaîne
. TRIM(ch): elimină spaț iile din stânga ș i din dreapta
. LTRIM(ch): elimină spaț iile din stânga
. RTRIM(ch): elimină spaț iile din dreapta
HPH3DUWLH)XQF LLOH
SHR OLQLH

2ELHFWLYHOH
SU LL
85

Funcț ii de manipulare a caracterelor. Exemple

SELECT 'station' ch1, 'agil' ch2,


Concat('staț ia 1','agil') "la staț ie"
Substr('station 1',9,1) "numéro station",
Lungime('agil') "lungime ch1"
Instr('agil','i') "poziț ia lui i"
Lungime (Trim(' agil ')) "trim",
Lungime (Rtrim(' agil ')) "Rtrim"
Lungime (Ltrim(' agil ')) "Ltrim"
Rpad('agil',8,'*') "RPAD", Lpad('agil',8,'-') "LPAD",
ASCII('test') " cod ascii " ,CHR(75)
DIN Dual;
86

Funcț ii numerice.
Prezentare

. ROUND(x, n): Rotunjeș te valoarea lui x la precizia specificată n


. TRUNC(x, n): Trunchiaț i valoarea lui x la precizia specificată n
. FLOOR(x): dacă n<x<n+1 atunci FLOOR(x)=n
. CEIL(x): dacă n<x<n+1 atunci CEIL(x)=n+1
. MOD(x, y): restul împărț irii lui x la y
. REMAINDER(m, n): restul unei împărț iri calculat astfel:
m-(n*q) cu q egal cu partea întreagă a câtului
87

Funcț ii numerice.
Rotund (1/2)

SELECTround(123.646,0) "0 chiffres" ,round(123.646,1) "1 chiffres",


round(123.646,2) "2 chiffres",round(123.646,3) "3 chiffres"
DE Dual;

Résultat:
88

Funcț ii numerice.
Rotund (2/2)

SELECTround(123.646,-1) "1 chiffres" ,round(123.646,-2) "2 chiffres",


rotund(123.646,-3) "3 cifre"
DE Dual;

Résultat:
89

Funcț ii numerice.
TRUNC

SELECT TRUNC(123.646,0) "n=0",TRUNC(123.646,1) "n=1",


TRUNC(123.646,2) "n=2",TRUNC(123.646,3) "n=3",TRUNC(123.636,-1)
"n=-1",TRUNC(123.646,-2) "n=-2",TRUNC(123.646,-3) "n=-3"
DIN Dual;

Résultat:
90

Funcț ii numerice.
FLOOR/ CEIL

SELECTfloor(-2.56),floor(-2.02),floor(-2.8),
ceil(-2.56),ceil(-2.02),ceil(-2.8)
DIN dual;

Résultat:

SELECT podea(2.56), podea(2.02), podea(2.8)


ceil(2.56),ceil(2.02),ceil(2.8)
DE la dual;

Résultat:
91

Funcț ii numerice.
MOD/REST

SELECTMOD(12, 4),MOD(16, 6)
DIN Dual;

Rezultat:

SELECTrestul(15, 6), restul(15, 5)


remainder(15, 4), remainder(-15,4)
DIN Dual;

["15-(2*6) = 3","15-(3*5) = 0","15-(4*4) = -1","-15-(-4*4) = 1"]

Résultat:
92

Funcț ii de manipulare a datelor.


(1/3)

. MONTHS_BETWEEN(data1,data2):numărul de luni între două date


. ADD_MONTHS(date, nb_mois):Ajoute des mois calendaires à une date
. NEXT_DAY(data, zi): ziua următoare
. ULTIMA_ZI(data): ultima zi a lunii
. ROTUNDEAZĂ(data, precizie): rotunjeș te o dată
. TRUNC(data, precizie): trunchiază o dată
. EXTRACT(zile/luni/ani/ori/minute/secunde din dată): extragere din
jour, mois, année, heure, minute et seconde
93

Funcț ii de manipulare a datelor.


(2/3)

SELECT sysdate "data zilei"


sysdate+2"Data jr plus 2jrs"
data ('10/09/2012','zz/ll/aaaa')-10"data de astăzi minus 10"
Trunchierează (sysdate - a_date('01/05/2012','zz/ll/aaaa'),0)

tronca o dată
DIN dual ;

Résultat:
94

Funcț ii de manipulare a datelor.


(3/3)

SELECT
Trunc (luni_dintre(to_date ('2012/01/01', 'yyyy/mm/dd'), to_date
('2012/03/15', 'yyyy/mm/dd') ),2) "nbr de luni"
next_day(to_date ('2012/03/01', 'yyyy/mm/dd'), 'Monday') "lundi suivant",
last_day(to_date ('2012/03/01', 'yyyy/mm/dd')) "dernier jr du mois mars12" ,
adaugă_luni(to_date ('2012/03/01', 'yyyy/mm/dd'),3) "adaugă 3 luni"
DE la Dual;

Rezultat:
95

Funcț ii de conversie.

. TO_DATE : Convertiț i un ș ir în format dată


. TO_NUMBER :Converti un ș ir în format numeric
. TO_CHAR: Convertirea unei date /un număr într-un ș ir
96

Funcț ii de conversie. Opț iuni cu To_char

OPȚIUNE DESCRIPTION
yyyy anul (patru cifre)
lună numele complet al lunii cu litere mici

mon abrevierea numelui lunii în litere mici (trei caractere)


zi nume complet al zilei cu litere mici
DD ziua lunii (01-31)
D ziua săptămânii (de la 1 la 7, duminica fiind 1)
dy abrevierea numelui zilei cu litere mici (3 caractere)
ddd ziua anului (001-366)
q trimestru
w numărul săptămânii din lună (de la 1 la 5) (prima săptămână începe
prima zi a lunii.)
ww numărul săptămânii în an (de la 1 la 53) (prima săptămână
începe în prima zi a anului.
97

AlteFuncț ii. (1/5). definiț ie1

. NVL (nom_col, valeur) :înlocuieș te o valoare nulă

. NVL2 (expr,val1,val2) : dacă expr nu este nul, atunci este înlocuită


par val1 sinon par val2.

. NULLIF (val1,val2) : dacă val1 = val2, valoarea NULL este returnată, altfel
val1

. Caz: evaluează o listă de condiț ii ș i returnează un rezultat dintre cazuri


posibile
98

AlteFuncț ii. (2/5). Exerciț ii1

. Scrieţi interogările SELECT care permit:


. Înlocui ț i „commission_pct” cu 0 la nivelul tabelului
« angajaț i » ș i dacă este null
. Înlocui ț i « commission_pct » cu 0 la nivelul tabelului
« angajaț i » ș i dacă este null altfel prin 1
. Afi ș aț i lista angaja ț ilor adăugând o coloană
« nom_departement » qui affiche :
. Si department_id=10 , nom_departement=‘depart_10’
. Si department_id=20 , nom_departement=‘depart_20’
. Si department_id=30 , nom_departement=‘depart_30’
.…
99

AlteFuncț ii. (3/5). Definiț ii2

. ROW_NUMBER :returnează numărul secven ț ial al unei linii dintr-o


partiț ia unui set de rezultate, începând cu 1 pentru primul
linie de fiecare partitie. Nu lua in considerare duplicatul

. RANK: returnează rangul fiecărei linii în cadrul partajului unui


ansamblu de rezultate. Contorizează doublonii, dar lasă goluri

. DENSE_RANK : returnează rangul liniilor în cadrul partitiei


un set de rezultate, fără niciun gol în clasament.
Contorizează duplicatele, dar nu lăsa goluri.
100

AlteFuncț ii. (4/5). Sintaxă

SELECT
Număr_pe_rând() peste (partiț ionaț i după <col x> ordonaț i după <col_y>
DESC/ASC),Col1,…colN
DIN <nom_table> ;

A reț ine:
- Clauza <order by> este obligatorie.
- Clauza <partition by> este facultativă, este utilizată pentru a face un ordin pe
ansamblu de linii conform <colx>.
- Clasifica etdense_rankont aceea ș i sintaxă.
101

AlteFuncț ii. (5/5). Exercices2

Scrieț i interogările SELECT care permit:

. Afiș aț i lista angajaț ilor numerotaț i după „department_id”.


. Afiș aț i lista angajaț ilor numerotaț i pe departamente ș i conform
salairedécroissant:
. Utilizaț i « row_number »
. Utilizaț i « rang »
. Utilizaț i „dense_rank”
3èmePartie :
Funcț iile Multi linii (sau funcț iile de grup)

Obiectivul cursului :

A defini clauza „GROUP BY”,


clauza « HAVING »
103

Funcț ii Multi [Link]ț ii


(1/3)

O func ț ie mono linie este o func ț ie care se aplică înregistrării prin


înregistrare.
O func ț ie multi linie sau func ț ie de grup se aplică pe un grup
de înregistrări ș i oferă un rezultat pe grup.

. Clauza GROUP BY: Define ș te criteriul de grupare pentru func ț ia


. Clauza HAVING: Permite stabilirea de condi ț ii asupra grupurilor
de înregistrări
104

Funcț ii Multi [Link]ț ii


(2/3)

. COUNT: Numărul de linii,


. SUMĂ: Sumă a valorilor,
. AVG: Medie a valorilor
. MIN: Minimum,
. MAX: Maximum,
. STDDEV: Ecart type,
. VARIANCE: Variance
105

Funcț ii pe mai multe [Link]ț ii


(3/3)

. COUNT: Nombre de lignes,


. SUMA: Sumă a valorilor,
. AVG: Media valorilor
. MIN: Minimum,
. MAX: Maxim
. STDDEV: Ecart tip,
. VARIANCE: Variance
106

Funcț iiMulti linii.Exemplu1

SELECT COUNT(salar) as count,


Trunc (SUM(salariu),2) ca sum,
MIN(salariu) ca minim,
MAX(salariu) ca max,
Trunc (AVG(salaru),2) ca medie,
Trunc (VARIANȚ A(salariu),2) ca varianț ă,
Trunc (STDDEV(salariu),2) ca ecart
DIN angajaț i;

Rezultatul:
107

Funcț ii pe mai multe linii. Sintaxa clauzei GROUP BY

SELECT <coloane>, <funcț ie de grup>


DINtabel
UNDE<condi ț ii>
GRUPARE DUPĂ <col>|<expr>

AVÂND<condiț ii>
ORDER BY<col>|<expr>
108

Funcț iiMulti linii.Exemplu2

SELECT department_id,
COUNT(employee_id) "nbr employes"
12
DE LA angajaț i Departamente

GRUPAT PE department_id;

SELECT department_id, count(employee_id) "nbr employes"


DIN angajaț i
GRUPARE PE department_id
AVÂNDdepartment_id<40;
4èmeParte : LesJointures

Obiectivele acestei părț i:


i. Echijointură ș i jonc ț iune internă, Jonc ț iune naturală
[Link] externă
[Link] echijointură
iv. Produs cartezian
110

Definiț ia Încheierilor.

. O îmbinare permite extragerea de date din mai multe


mese în acelaș i timp.

. Condiț ia de îmbinare poate fi exprimată în clauză

„UNDE” sau „PE”.

. Precedaț i numele coloanei cu numele tabelului atunci când

celui-ci figure dans mehrere tabele


111

Tipuri de Îmbinări.

. Echijoinctură sau joinctură internă

. Îmbinare naturală

. Jointure externă

. Non echijointură

. Produs cartezian
112

Echijointură.Definiț ie

. O îmbinare internă sau îmbinarea este o îmbinare cu


o condiț ie de îmbinare conț inând un operator de egalitate.

. Este cea mai răspândită, combină liniile care au


valori echivalente pentru coloanele de îmbinare.

. În general, în acest tip de îmbinare, sunt Primary


Cheie ș i Cheie Străină care sunt utilizate.
113

[Link] (1/2)

SELECT [Link]ă, [Link]ă

DINtabel1

INNER JOIN tabel2

ON(tabela1.nume_coloană=tabela2.nume_coloană) ;
114

[Link]ă (2/2)

T1 :Alias de la table : table1


SELECT T1.Coloana1, …[Link],
T2 :Alias de la table : table2
T2.Coloana1, …[Link]
C1: coloană care permite
DIN tabela1T1 ÎN ÎMBINARE cu tabela2T2
îmbinarea între cele 2 tabele
ONT1.C1=T2.C1 (cheie primară + cheie externă)
UNDE<Cond(i) ț ii>

Echivalent cu :

SELECT T1.Coloana1, …[Link],


T2.Coloana1, …[Link]
DIN T1, T2
WHERET1.C1=T2.C1 Ș I<Condț ie(e)>
115

Equijointură.Exemplu

Exemple1:

SELECTnomE,[Link], nomdept
DINempeINNER JOINdeptd
[Link]=[Link];

Exemple2:

SELECT nomE, [Link], nomdept


DE la EMPE INNER JOIN DEPTD

[Link]=[Link]
[Link]=11;
116

Îmbinarea naturală. Definiț ie

. Îmbinarea naturală este o îmbinare echivalentă.


. Clauza NATURAL JOIN se bazează pe toate coloanele
des două mese care poartă acelaș i nume.

. Ea selectează liniile din cele două tabele ale căror valori sunt
identice în toate coloanele care corespund.

. Ș i coloanele cu acelaș i nume prezintă tipuri de


date diferite, o eroare este returnată.
117

Îmbinare naturală. Sintaxă

SELECT coloana1, coloana2…


DE la Tabelul1

JOIN NATURAL Table2


WHERECondition(s) ;

Condiț ii altele decât condiț ia


de îmbinare
118

Îmbinarea naturală. Exemple

Exemple 1:

SELECT nomE, numdept, nomdept


DIN emp ÎMBINARE NATURALĂ cu dept;

Exemple 2:

SELECT nomE, numdept, nomdept


DIN emp ÎMBINARE NATURALĂ dept

WHEREnumdept=11;
119

Non echijointură. Définition

. Este vorba despre utilizarea oricăror condiț ii de îmbinare


între două mese, cu excepț ia egalităț ii stricte. Acestea pot fi
următoarele condiț ii:
120

Îmbinare externă. Definiț ie

. JOINTURES EXTERNES =OUTER JOINS.


. O asociere externă lărgeș te rezultatul unei asocieri interne
(INNER JOINS) ș i permite extragerea unor înregistrări care
nu răspund criteriilor de asociere.
. O îmbinare externă returnează toate liniile care satisfac
condiț ie de îmbinare ș i returnează de asemenea o parte din acestea
linii ale tabelului pentru care niciuna dintre linii nu este din altul

satisfăcut de condiț ia de îmbinare.


121

Jointure externă. Tipuri de îmbinări externe

SELECT [Link]ă, [Link]ă..

DINtabel1 t1
STÂNGA | DREAPTA | ÎNCHIDERE COMPLETĂ tabla2 t2 PE

(t1.numele_columnei = t2.numele_columnei) ;

. Sensul îmbinării externe LEFT sau RIGHT din clauză


OUTER JOIN desemnează tabelul dominant.

. FULL= INNER + LEFT + RIGHT


122

Îmbinare externă. Stâng

Exemple:

SELECT nomE, [Link], nomdept


DE LA deptdLEFT JOIN empe
[Link]=[Link]
123

Îmbinarea externă.Dreapta

Exemple:

SELECT nume, [Link], numdept

DIN deptd ÎN JOIN empe


[Link]=[Link]
124

Jointură externă. complet

Exemple:

SELECT nume, [Link], numedept


DE la departament plin UNIRE angajaț i

[Link]=[Link]
125

Produs Carteziem. Definiț ie

Se obț ine un produs cartezian atunci când:


. O condiț ie de îmbinare este omisă
. O condiț ie de îmbinare este incorectă
. Fiecare linie din tabelul 1 este ataș ată de toate liniile de
la masa 2.
. Numărul de linii returnate este egal cu n1 * n2 unde
n1 este numărul de linii din tabela 1
n2 este numărul de linii al tabelului 2
126

Produs cartezian. Sintaxă

SELECT "nume_coloană1", "nume_coloană2"...


DIN tabela1 t1
CROSS JOINtable2 t2

Exemple:
Selectaț i * din angajaț i JOIN încruciș at departamente

Vom avea 107*27 linii = 2889 linii


127

Produs cartezian. Exemple

SELECT * From emp e


INNER JOINdept d
[Link]=[Link]
. OU
SELECT * From emp, dept

Vom avea 9*4 linii


128

Îmbinare. Recapitulare
5èmePartie :Les Opérateurs
ensemblisti

[Link]
[Link] ALL
[Link]
[Link]
130

Operatorii de seturi.

OPERATOR DESCRIPTION
Adu toate liniile comune celor două
INTERSECT
cereri
Toate liniile distincte aduse de cei doi
UNIUNE
cereri
Toate liniile aduse de cele două cereri acolo
UNIRE TOATĂ
compris dublurile
Toate liniile returnate de prima interogare
MINUS
în afară de liniile aduse de a doua cerere
127

Produs cartezian. Exemple

SELECT * From emp e


INNER JOINdept d
[Link]=[Link]
. OU
SELECT * From emp, dept

Vom avea 9*4 linii


132

Intersecț ie/[Link]

Scrieț i cererile care să permită:


. Afiș aț i angajaț ii care au fost arhivaț i.
. Afiș aț i angajaț ii care nu au fost arhivaț i.

SELECT * from emp


Intersect/minus
SELECT * de la emp2 ;
133

Exerciț iu de aplicare.

. Scrie o interogare care permite afiș area acestui rezultat din


la tabelul 'dept':
6èmeParte :
Subinterogările

i. Sub interogări mono linii


[Link] interogări multi-linii
135

Sub interogări. Definiț ie

. La subinterogare (cerere internă) este executată o singură dată


odată înainte de cererea principală
. Rezultatul subîntrebării este folosit de interogare
principale (cerere externă)

. O subinterogare este utilizată în următoarele clauze :


. UNDE
. AVÂND
. DIN
136

Sub interogări pe linii unice. Definiț ie

O subîntrebare poate aduce un singur rezultat


l'appellesous interogare mono linie.

Operatorii de comparaț ie pe o singură linie sunt:


=, !=, <, >, <=, >=
137

Sub interogări pe linii unice. Exemplu1

Exemple de actualizare cu o subîntrebare :


Angajatul numărul 112 este afectat la aceeaș i poziț ie ș i la fel

departamentul angajatului numărul 111

UPDATE employee_id SET (job_id, department_id)


= (SELECT job_id, department_id
DE LA angajaț i
UNDEemployee_id=111)
UNDEemployee_id=112 ;
138

Sub interogări mono linii. Exemple2

Exemple de Ştergere cu o subîntrebare :


Ș terge toț i angajaț ii din departamentul 'VÂNZĂRI'

Ș TERGE DIN angaja ț i


UNDEDepartment_id=
(SELECT department_id
DIN departamente
UND department_name='VÂNZĂRI');
139

Sub interogări mono linii. Exemple

Scrieț i cererile care să:


. Afi ș aț i numele departamentului angajatului 'Benafia'
tarec.
. Afisează lista angaja ț ilor care primesc un salariu
superior angajatului ‘Benafia tarek’.
. Afi ș aț i numele ș i data angajării angaja ț ilor care
nu au fost angaja ț i în aceea ș i an cu angajatul
Benafia tarek
140

Sub interogări pe mai multe linii. Defini ț ie (1/3)

. O subinterogare poate readuce mai multe linii la


condi ț ie ce operator de compara ț ie admite la sa
dreapta un ansamblu de valori.
. Operatorii care permit compararea unei valori cu un
ansamblul de valori este:
. operatorulINet
. operatorii ob ț inuț i prin adăugarea ANYouALL la
continua a operatorilor de comparare clasică :
=, !=, <, >, <=, >=.
141

Sub interogări cu mai multe linii. Defini ț ie (2/3)

. ORICE: comparaț ia va fi adevărată dacă este adevărată pentru


minus un element al ansamblului (deci este fals dacă
ansamblul este gol).
. TOATE: comparaț ia va fi adevărată dacă este adevărată pentru toț i
elementele ansamblului (este adevărată dacă ansamblul este
vide).
. Operátorul IN este echivalent cu = ANY,
. Operatorul NOT IN este echivalent cu != ALL.
142

Sub interogări multi-linii. Defini ț ie (3/3)

Operat de comparaț ie Rezultat


SALARIUL trebuie să fie egal cu una dintre valorile
UNDE salaireIN(1200,1600,2000,2900) în listă
SALARII nu trebuie să fie egal cu unul dintre
UNDOR salară NU ÎN (1200,1600,2000,2900) valori în listă
SALARIUL trebuie să fie superior la cel puț in unul
UNDE salariu > ORICE (1200, 1600, 2000, 2900) valori.
Aș adar, mai mult decât minimul (+ de 1200).
SALARIUL trebuie să fie mai mic decât cel puț in unul
UNDEN salaire<ORICE(1200,1600,2000,2900) valori.
Deci mai puț in decât maximum (- de 2900).
SALARIUL trebuie să fie superior maximului
UNDE salariu>TOATE(1200,1600,2000,2900) din toate valorile.
Deci mai mult decât maximul (+ de 2900).
SALARIUL trebuie să fie mai mic decât minimul de
UNDE salariu<TOATE(1200,1600,2000,2900) toate valorile.
Deci mai puț in decât minimul (- de 1200).
143

Sub interogări pe mai multe linii. Exemple

Scrieț i cererile care permit:


. Afi ș aț i lista angaja ț ilor care primesc un salariu
superior tuturor angajaț ilor din departamentul 11.

. Afi ș aț i numele ș i data angajării angaja ț ilor care


nu au fost angaja ț i în aceea ș i an cu angajatul
Bun venit angajatului 'Hamidali'

S-ar putea să vă placă și