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'