30
BAZE DE DATE Curs 6 Lect.dr. Elena Băutu Facultatea de Matematică și Informatică Universitatea Ovidius, Constanța

BD_Curs06

Embed Size (px)

DESCRIPTION

bd 6

Citation preview

  • BAZE DE DATE Curs 6

    Lect.dr. Elena Butu

    Facultatea de Matematic i Informatic

    Universitatea Ovidius, Constana

  • DATA MANIPULATION LANGUAGE

    DML

    Formularea de interogri Instruciunea SELECT

    Instruciuni de inserare

    Instruciuni de modificare

    Instruciuni de tergere

    a nregistrrilor dintr-o baz de date relaional

    16.0

    4.2

    014

    2

  • DML - INSTRUCIUNEA SQL SELECT

    O interogare SQL tipic este de forma SELECT A1, A2, ..., An FROM r1, r2, ..., rm WHERE P

    Ai reprezint atribute

    ri reprezint relaii

    P este un predicat (ce reprezint o condiie).

    Rezultatul unei interogri este o relaie.

    16.0

    4.2

    014

    3

  • CLAUZA SELECT

    Listeaz atributele dorite n rezultatul interogrii

    Este implementarea direct a operatorului de proiecie din algebra relaional

    Exemplu: aflai numele, prenumele i CNP-ul tuturor persoanelor

    SELECT nume, prenume, CNP

    FROM PERSOANE;

    Observaii

    SQL este case INsensitive

    16.0

    4.2

    014

    4

  • CLAUZA SELECT

    SQL admite duplicate n rezultatele interogrii.

    Pentru a fora eliminarea duplicatelor, se folosete predicatul DISTINCT n clauza SELECT.

    Exemplu: Aflai numele tuturor persoanelor, cu eliminarea duplicatelor

    SELECT DISTINCT nume

    FROM PERSOANE;

    Cuvntul cheie ALL precizeaz c nu se dorete eliminarea duplicatelor (este implicit)

    SELECT ALL nume

    FROM PERSOANE;

    16.0

    4.2

    014

    5

  • CLAUZA SELECT

    Un asterisc (*) n clauza SELECT nseamn listarea tuturor atributelor

    SELECT * FROM PERSOANE;

    Clauza SELECT poate conine i expresii aritmetice ce implic operatorii artimetici uzuali i au ca operanzi constante sau atribute ale relaiilor din clauza FROM

    SELECT Nume, Now() DataNasterii as Varsta

    FROM PERSOANE;

    16.0

    4.2

    014

    6

  • CLAUZA FROM

    Permite specificarea relaiilor implicate n interogare

    Operaii cu relaii, precum reuniune, intersecie, diferen (Union, Intersect, Except)

    Listarea relaiilor specificate cu virgula (,) ntre ele corespunde operaiei de produs cartezian din algebra relaional

    Pot aprea alte instruciuni SELECT ca i operanzi n FROM

    16.0

    4.2

    014

    7

  • CLAUZA FROM

    De exemplu: interogarea urmtoare listeaz toate perechile posibile de persoana-localitate

    SELECT PERSOANE.Nume, LOCALITATI.DenLocalitate

    FROM PERSOANE, LOCALITATI

    Ar avea, poate, mai mult sens sa avem perechi de tipul persoana-localitate in care s-a nascut

    16.0

    4.2

    014

    8

  • REAMINTIM

    16.0

    4.2

    014

    9

  • EXEMPLU

    Instruciunea urmtoare listeaz toate perechile de localitate-judet ce se pot forma cu tuplele existente n baza de date

    SELECT *

    FROM LOCALITATI, JUDETE;

    Putei observa c aceast interogare nu are, ca efect, ceva care s aiba sens.

    Ar avea mai mult sens sa afim o list a localitilor i a judeului din care aceste localiti fac parte.

    16.0

    4.2

    014

    10

  • JOIN INNER JOIN

    Afiai mulimea localitilor i judeul din care acestea fac parte.

    SELECT *

    FROM LOCALITATI INNER JOIN JUDETE ON

    LOCALITATI.Judet = JUDETE.IdJudet

    Aflai mulimea trilor, pentru fiecare tar listai i capitala ei.

    SELECT *

    FROM TRI INNER JOIN LOCALITATI ON TARI.Capitala = LOCALITATI.IdLocalitate

    Observaie. Mai sus, avem exemple de NATURAL JOIN de fapt

    16.0

    4.2

    014

    11

  • EXEMPLU

    Aflai informaii despre localitile din judeul Vaslui.

    Se cer denumirea localitii i codul potal al acesteia.

    SELECT DenLocalitate, CodPostal

    FROM LOCALITATI INNER JOIN JUDETE

    on Judet=IdJudet

    WHERE DenJudet LIKE Vaslui

    16.0

    4.2

    014

    12

  • OPERATORUL DE REDENUMIRE

    SQL permite redenumirea de relaii, atribute folosind cuvntul cheie AS (care, de altfel, este opional i poate fi omis)

    SELECT *

    FROM LOCALITATI as L INNER JOIN JUDETE as J ON L.Judet = J.IdJudet;

    SELECT L.DenLocalitate as Localitatea, j.DenJudet as Judetul

    FROM LOCALITATI as L INNER JOIN JUDETE as J ON L.Judet = J.IdJudet

    Echivalent cu

    SELECT L.DenLocalitate Localitatea, j.DenJudet Judetul

    FROM LOCALITATI L INNER JOIN JUDETE J ON L.Judet = J.IdJudet

    16.0

    4.2

    014

    13

  • JOIN EXTERN

    LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN

    Afiai mulimea tuturor localitilor i judeul din care acestea fac parte, indiferent dac se cunoate sau nu judeul

    SELECT *

    FROM LOCALITATI LEFT JOIN JUDETE ON

    LOCALITATI.Judet = JUDETE.IdJudet

    Echivalent cu

    SELECT *

    FROM JUDETE RIGHT JOIN LOCALITATI ON

    LOCALITATI.Judet = JUDETE.IdJudet

    16.0

    4.2

    014

    14

  • JOIN EXTERN

    Afiai mulimea tuturor localitilor i judeul din care acestea fac parte, indiferent dac se cunoate sau nu judeul. Listai i judeele pentru care nu exist nregistrat nicio localitate.

    SELECT *

    FROM LOCALITATI FULL OUTER JOIN JOIN JUDETE ON

    LOCALITATI.Judet = JUDETE.IdJudet

    Observatie. Multe SGBD nu implementeaza operatorul de FULL OUTER JOIN. Acesta se implementeaza ca un UNION intre rezultatul unui LEFT JOIN i al unui RIGHT JOIN.

    16.0

    4.2

    014

    15

  • CLAUZA WHERE

    Specific condiii care trebuie satisfcute de tuplii ce vor fi selectai ca rezultat al interogrii

    Este implementarea direct a operatorului de selecie din algebra relaional

    n exprimarea condiiilor se foloses operatorii logici AND, OR, NOT.

    Pot fi folosii operatori de comparaii, expresii aritmetice

    16.0

    4.2

    014

    16

  • CLAUZA WHERE

    Operatorul de comparaie pentru iruri de caractere este LIKE

    Se folosete n conjuncie cu caracterele

    * semnific orice ir de caractere

    ? semnific un singur caracter

    Observaie. n alte implementri SQL (ca de ex Oracle), caracterele sunt %, respectiv _ .

    16.0

    4.2

    014

    17

  • EXEMPLU

    Afiai mulimea localitilor al cror nume ncepe cu S.

    SELECT * FROM LOCALITATI

    WHERE DenLocalitate LIKE S*;

    Afiai mulimea localitilor al cror nume are a doua litera a:

    SELECT * FROM LOCALITATI

    WHERE DenLocalitate LIKE ?a*;

    16.0

    4.2

    014

    18

  • ALTE OPERAII CU IRURI DE CARACTERE

    abloanele (cu care se fac comparatii n where) sunt case sensitive.

    Exemple Intro* se potrivete cu orice ir care ncepe cu Intro.

    *Comp* se potrivete cu orice ir care conine textul Comp ca subir

    irul ??? se potrivete cu orice ir de exact 3 caractere

    irul ???* se potrivete cu orice ir de cel puin 3 caractere

    Operatori pentru iruri de caractere Concatenare: & (n Oracle este || )

    Funcii de conversie lower/upper case, de calcul a dimensiunii unui ir, de cutat un subir ntr-un ir

    16.0

    4.2

    014

    19

  • ALI OPERATORI N CLAUZA WHERE

    Operatorul BETWEEN AND

    X BETWEEN a AND b

    Echivalent cu

    A

  • ALI OPERATORI N CLAUZA WHERE

    Operatorul IN implementeaz apartenena la o mulime

    Atribut IN (mulime de valori)

    Exemplu

    SELECT * FROM LOCALITATI

    WHERE DenLocalitate IN (Vaslui, Iasi);

    16.0

    4.2

    014

    21

  • ALI OPERATORI N CLAUZA WHERE - EXEMPLU

    Aflai informaii despre toate localitaile din judeul Vaslui.

    SELECT * FROM LOCALITATI

    WHERE IdLocalitate IN (

    SELECT IdLocalitate

    FROM LOCALITATI INNER JOIN JUDETE

    on Judet=IdJudet

    WHERE DenJudet LIKE Vaslui

    );

    16.0

    4.2

    014

    22

  • ALI OPERATORI N CLAUZA WHERE

    Valori NULL

    Valoare necunoscuta, temporar necunoscuta, sau inaplicabila

    Orice operaie aritmetica ce implic un null rezult n null

    Pentru a testa egalitatea cu null se folosete operatorul IS NULL

    Orice comparaie cu NULL rezult n UNKNOWN.

    Rezultatul unei clauze WHERE ce se evalueaza la UNKNOWN este considerat FALSE

    16.0

    4.2

    014

    23

  • EXEMPLE

    Aflai localitile pentru care nu se cunoate judeul din care fac parte

    SELECT * FROM LOCALITATI

    WHERE Judet IS NULL

    16.0

    4.2

    014

    24

  • CLAUZA ORDER BY

    Permite specificarea de criterii de ordonare a tuplelor din rezultat

    SELECT *

    FROM LOCALITATI FULL OUTER JOIN JOIN JUDETE ON

    LOCALITATI.Judet = JUDETE.IdJudet

    ORDER BY DenJudet

    16.0

    4.2

    014

    25

  • CLAUZA ORDER BY

    Implicit ordonarea este in ordine cresctoare

    Dac se dorete ordine descresctoare se specific prin cuvntul cheie DESC

    SELECT *

    FROM LOCALITATI FULL OUTER JOIN JOIN JUDETE ON

    LOCALITATI.Judet = JUDETE.IdJudet

    ORDER BY DenJudet DESC

    16.0

    4.2

    014

    26

  • CLAUZA ORDER BY

    Se pot folosi mai multe atribute n aceast clauz (implic sortarea dup mai multe criterii)

    SELECT *

    FROM PERSOANE ORDER BY Nume, Prenume, DataNasterii DESC;

    Observaie. Daca ar exista mai multe persoane cu acelai nume, acestea ar fi ordonate alfabetic n ordine lexicografic dupa prenume. Dac ar exista mai multe persoane cu acelai nume i acelai prenume, atunci acestea ar fi ordonate n ordine descresctoare a datei de natere (cei nscui cel mai recent vor fi listai n rezultat naintea celor nscui anterior lor).

    16.0

    4.2

    014

    27

  • OPERAII CU MULIMI

    In SQL sunt definite urmtoarele operaii cu mulimi UNION INTERSECT EXCEPT

    n MsAccess este implementat doar UNION Trebuie folosit ntre relaii cu acelai numr de atribute, i cu

    domenii compatibile ale atributelor

    Exemplu SELECT DenLocalitate FROM LOCALITATI WHERE (((LOCALITATI.[DenLocalitate]) Like '?a*')) UNION SELECT DenLocalitate FROM LOCALITATI WHERE (((LOCALITATI.[DenLocalitate]) Like '?t*'));

    16.0

    4.2

    014

    28

  • REZUMAT

    Instruciunea SQL SELECT

    Clauza SELECT

    Clauza FROM

    INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN

    Clauza WHERE

    Operaii i operatori noi folosii n WHERE

    Clauza ORDER BY

    16.0

    4.2

    014

    29

  • N CURSUL URMTOR

    Clauza GROUP BY

    Clauza HAVING

    Subinterogri

    16.0

    4.2

    014

    30