i if.03 limbajul sql

Upload: bredtm

Post on 24-Feb-2018

249 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 I if.03 Limbajul SQL

    1/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 1 -

    Capitolul IF.03. Limbajul SQL

    Cuvinte-cheie:

    Tranzacie, commit, roll back, mulime de selecie, uplu,n-uplu, cardinal, indexare, diagram E-R

    IA.03.1. Generaliti

    n 1992 ANSI (American National Standards Institute) a definitivat varianta standard a unuilimbaj destinat sistemelor de gestiune a bazelor de date denumit Structured Query Language,

    prescurtat SQL (pronunai "es-q-el"). Frazele SQL permit crearea, actualizarea, interogarea i

    distrugerea bazelor de date relaionale. Dei toate sistemele de gestiune de baze de date folosescSQL, adesea ele implementeaz i funcii care nu exist n standard.

    SQL este un limbaj declarativ. Spre deosebire de un limbaj procedural, un astfel de limbajeste constituit din comenzi, de multe ori foarte complexe, care se execut imediat. Practic o sesiunede lucru n SQL este constituit dintr-o succesiune de cicluri, fiecare coninnd scrierea uneicomenzi, trimiterea ei spre serverul de baze de date, executarea ei i afiarea imediat a rezultatului

    produs.

    Comenzile pot fi salvate individual n vederea executrii ulterioare. Ele pot fi de asemeneamemorate n fiiere de comenzi care pot fi lansate n execuie printr-o singur comanddup care seexecut automat.

    IA.03.2. Comenzile de baz ale limbajului SQL

    Comenzile de baz ale limbajului SQL care sunt: Create, Alter, Select, Insert, Update,Deletei Drop, sunt suportate de toate sistemele de gestiune de baze de date i permit realizareatuturor activitilor majore legate de crearea i exploatareabazelor de date relaionale. Cuvintelecheie ale limbajului SQL pot fi scrise att cu litere mici ct i cu majuscule.

    Odat instalat aplicaia Oracle XE se pot da comenzi SQL folosind interpretorul decomenzi SQL Plus, executabil ntr-o fereastr Command. Pentru lansarea sa n execuie se

    acceseazRun SQL CommandLine din grupul de comenzi Oracle Database 11g Express Edition:

    Dup lansarea n execuie a interpertorului este necesar conectarea la serverul Oracle XEprintr-o comand connect, ca n exemplul urmtor, dup care pot fi introduse comenzi. Comenzile

  • 7/25/2019 I if.03 Limbajul SQL

    2/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 2 -

    SQL pot fi introduse pe mai multe linii, marcarea sfritului introducerii unei comenzi realizndu-seprintr-un caracter '/'.

    Introducerea comenzilor SQLpoate fi realizat ns i folosind o interfagrafic. Pentru aceasta selanseaz n execuie aplicaia Oracle SQL Developeri se realizeaz conectarea la serverul de bazede date Oracle XE.

    Dup conectare, n fereastra afiat se selecteaz tabul Worksheet, se introduce comandaSQL dorit i se apas butonul (Run Statement):

  • 7/25/2019 I if.03 Limbajul SQL

    3/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 3 -

    Aplicaia va afia nfereastra Script Outputrezultatul executrii comenzii:

    n orice moment al lucrului cu Oracle SQL Developerse poate iniia o sesiune de lucru cuinterpretorul SQL selectnd butonul SQL:

    Aplicaia va solicita precizarea conexiunii care va fi folosit dup care va afia interfaaspecific.

  • 7/25/2019 I if.03 Limbajul SQL

    4/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 4 -

    Observaie: Unele comenzi SQL, respectiv cele care modific date sau tabele din baza datenecesit dup executare apsarea butonului Commit. Pentru a evita problemele cauzate deeventualele pene (hardware, reea etc.) care ar putea interveni pe timpul executrii unor astfel decomenzi, serverele de baze de date implementeaz conceptul de tranzacie. De fiecare dat cndeste lansat o comand care modific date din baz este iniiat automat o tranzacie. Dac operaiaasupra bazei este reuit modificarea devine efectiv prin executarea comenzii commit. n caz deeroare se execut comanda roll back, care va aduce baza de date n starea iniial, efectul comenzii

    SQL date fiind anulat.

    Comenzile introduse n fereastra SQL Commandspot fi terminate prin ';', '/' sau se poatechiar omite caracterul terminal. Astfel pentru suprimarea tabeluluicafease poate scrie:

    drop table cafea;

    sau pur i simplu

    drop table cafea

    efectul fiind acelai.

    Comenzile SQL pot fi memorate individual apsnd butonul Save:

    Comenzile memorate pot fi readuse n fereastra aplicaiei prin deschiderea fiierului n careau fost salvate (File / Open) dup care pot fi reexecutate.

    Commit

  • 7/25/2019 I if.03 Limbajul SQL

    5/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 5 -

    IA.03.3. Tipuri de date suportate de Oracle SQL

    a. iruri de caractere

    Pentru pstrarea irurilor de caractere, Oracle definete patru tipuri de date:

    - VARCHAR sau VARCHAR2 - pentru iruri de caractere de lungime variabil.Cele dou tipuri opereaz n acest moment identic dar se recomand folosireatipului VARCHAR2.

    - NVARCHAR2 pentru iruri de caractere de lungime variabil n formatUNICODE (16 bii / caracter),

    - CHAR -pentru iruri de caractere avnd lungime fix,

    - NCHAR -pentru iruri de caractere avnd lungime fix, n format UNICODE.

    Indiferent de tip, la declararea unui cmp trebuie precizat lungimea:

    nume varchar2(50)

    Pentru VARCHAR2 lungimea specificat este cea maxim admis n timp ce pentruCHAR ea va fi efectiv utilizat, irurile de lungime mai mic fiind completate la dreapta cu spaii.Rezult c VARCHAR2 este mai eficient, n exemplele prezentate n continuare acest tip fiindutilizat sistematic.

    b.

    Date numerice

    Datele numerice pot fi declarate n Oracle folosind unul dintre tipurile urmtoare:

    - NUMBER - pentru numere zecimale,

    -

    BINARY_FLOAT -pentru numere reale (memorate fr conversie n baza 10),- BINARY_DOUBLE- pentru numere reale n dubl precizie (memorate fr

    conversie).

    Cel mai frecvent se folosete tipul NUMBER. Pentru declararea unei date de tipNUMBER se poate scrie:

    inaltime number(3)

    sau,

    inaltime number(3,0)

    Pentru numere care au o parte ntreag i una zecimal se scrie:

    pret NUMBER(7,2)

    nsemnnd reprezentarea cmpului pret folosind 7 poziii zecimale, ultimele dou fiind folositepentru partea real.

    Exemple:

    Numr Declaraie Valoare memorat

    123.89 NUMBER 123.89

    123.89 NUMBER(3) 124

    123.89 NUMBER(6,2) 123.89

    123.89 NUMBER(6,1) 123.9

  • 7/25/2019 I if.03 Limbajul SQL

    6/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 6 -

    123.89 NUMBER(3) eroare (depire)

    123.89 NUMBER(4,2) eroare (depire)

    BINARY_FLOAT i BINARY_DOUBLE sunt tipuri recomandate n cazul n care dateleastfel reprezentate sunt folosite la calcule mai complicate.

    c. Tipuri pentru timp i dat calendaristic

    Pentru declararea cmpurilor care vor pstra data calendaristic sau timpul, Oraclefolosete tipurile DATE i TIMESTAMP.

    Formatele implicite de introducere a datei i a timpului rezult din tabelul urmtor.

    Valoare Tip dat Val. memorat

    12-MAR-2007 DATE

    2007-02-01 01:02:04.1234 TIMESTAMP

    d.

    Tipuri pentru memorarea imaginilor

    Pentru declararea cmpurilor destinate pstrrii n baza de date a imaginilor, Oraclefolosete tipurile CLOB sau BLOB.

    IA.03.4. Crearea tabelelor n SQL

    Comanda CREATE TABLE

    Comanda CREATE TABLE servete la crearea unui nou tabel i la descrierea cmpuriloracestuia. Ea are formatul general:

    CREATE TABLE nume(nume_cmp tip_cmp [(marime [,precizie])][NULL | NOT NULL][PRIMARY KEY | UNIQUE][,nume_cmp tip_cmp [(marime [,precizie])]

    [NULL | NOT NULL])

    Exemplu:

    CREATE TABLE regiune

    (ID_regiune CHAR(2) NOT NULL PRIMARY KEY,

    nume VARCHAR2(40))

    Observaie: Cutarea unui articol ntr-un tabel folosind cheia primar este deosebit deeficient datorit indexrii automate operate pentru acel cmp. Indexareapresupune pstrarea

    ntr-un fiier separat, pentru fiecare articol al tabelului, a valorii cheii primare i a adresei fizice aarticolului. Fiierulastfel obinut va fi ncrcat n memorie i va fi pstrat ordonat dup valorilecheii primare. Cutarea unui articol folosind cheia primar va putea deveni astfel foarte eficient

  • 7/25/2019 I if.03 Limbajul SQL

    7/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 7 -

    deoarece n locul unei cutri sistematice a articolului, n tot fiierul, se va putea cuta n fisierul deindex din memorie, folosind un algoritm de cutare binar. Folosind acest algoritm de exemplugsirea unui articol ntr-un fiier de index (ordonat) avnd 65000 articole necesit maximum 16operaii de tip comparare de valori.

    Crearea tabelelorpoate fi nsrealizat mai uor folosind Oracle SQL Developer, aa cums-a procedat deja. n cazul n care trebuie impuse restricii asupra cmpurilor (declararea cheii

    primare, declararea unor chei strine sau impunerea indexrii dup unul sau mai multe cmpuri)fraza SQL corespunztoare va deveni din ce n ce mai complicat, recurgerea la intefaa graficfiind practic obligatorie.

    Obs. n fraza SQL afiat denumirile cmpurilor, constrngerilor sau denumirea tabelului apar ntre

    ghilimele. Aceast scriere permite folosirea de denumiri coninnd spaii (de evitat!). Dac denumirile nupot da natere la confuzii, ghilimelele pot fi omise.

  • 7/25/2019 I if.03 Limbajul SQL

    8/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 8 -

    Din cele prezentate se observ diversitatea modatitilor de scriere a unei comenzi SQL. Pentru alimita volumul de cunotine legate de sintaxa limbajului, n cele ce urmeaz comenzile vor fi realizate itestate folosind interfaa grafic afiat de Oracle SQL Developer.

    Observaie: Aa cum s-a vzut deja, interfaa permitegraficutilizat permiteafiarea comenzilor decreare a tabelelor create. Deoarece n timpul realizrii unei baze de date se pot produce incidente mergndpn la distrugerea serverului Oracle XE, este bine s se creeze copii ale domeniului (schemei) pe care se

    lucreaz (folosind procedura cunoscut deja). Se pot ns salva separat, ntr-un fiier text avnd extensia .sqlnumai comenzile de descriere a tabelelor bazei de date. Executarea acestui fiier de comenzi va realizarefacerea tabelelor, fr repopularea lor cu date.

    Ordinea n care se execut comenzile de creare a tabelelor bazei este important deoarece creareaunui tabel care conine chei strine nu poate fi realizat naintea crerii tabelului referit.

    Suprimarea unui tabelse realizeaz folosind comandaDROP TABLE. Sintaxa comenzii este:

    DROP TABLENume_tabel

    Pentru a da comanda de tergere a unui tabel folosind interfaa grafic se selecteaz n meniulcontextual afiat la selectarea tabelului Table / Drop:

    IA.03.5. Comanda SELECT

    Comanda SELECT creeaz o mulime de selecie.

    n teoria mulimiloro mulime (a1, a2, , an) de obiecte distincte poart numele de n-uplu.Valoarea neste denumit cardinalulmulimii iar un element aial acesteia se numete uplu((eng.tuple).

    O mulime de selecie poate conine un obiect, mai multe obiecte sau niciunul. Elementeledintr-o mulime de selecie conin numai cmpurile indicate n comanda de creare a acesteia. Dinacest punct de vedere se poate considera c SELECT creaz un subtabel coninnd numaiinformaiile specificate. Cmpurile nregistrrilor mulimii de selecie pot proveni dintr-un tabelsau din mai multe tabele legate.

  • 7/25/2019 I if.03 Limbajul SQL

    9/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 9 -

    Comanda SELECT are formatul general:

    SELECT [DISTINCT] coloana1 [,coloana2]

    FROM tabel_1[,tabel_2, ...]

    [WHERE condiii]

    [GROUP BY list-coloane][HAVING conditii]

    [ORDER BY list-coloane [ASC | DESC] ]

    Dintre cele cinci clauze ale comenzii SELECT numai clauza FROM este obligatorie.Fiecare dintre clauze are la rndul ei reguli i parametri pentru construcie, fcnd din SELECT ceamai complex comand a limbajului SQL. n frazele SELECT irurile de caractere se pun ntrecaractere ' (apostrof).

    Pentru construirea unei comenzi SELECT folosind interfaa grafic a aplicaiei Oracle SQL

    Developerse selecteaz succesiv schema (conexiunea) i tabulQuery Builder.

    Dup selectarea tabului Query Builder se aduc n zona grafic tabelele din care se selecteazinformaii (trire cu mouse-ul, drag& drop), ca n imagine.

    Observaie: Dac ntre tabelele selectate exist relaii, ca n exemplul din figur(ANGAJATI.ID_ANGAJAT = COPII.ID_PARINTE), aplicaia va simboliza aceasta printr-o linie.La capetele liniei apar simbolurile 1 i indicnd o legtur de tip 1 la n.

    Cmpurile care trebuie s fie incluse n mulimeade seleciese indic tot prin selectare cumouse-ul, ca n figur:

    drag & drop

    cmpuri incluse nmulimea de selecie

  • 7/25/2019 I if.03 Limbajul SQL

    10/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 10 -

    a. Selectarea informaiilor dintr-un singur tabel

    Exemple fundamentale:

    SELECTNume, Prenume FROMangajati

    Dup precizarea cmpurilor se apas butonul (Run Statement)i aplicaia afieazrezultatul executrii comenzii SELECT create.

    Pentru a vedea comanda SELECT se selecteaz tabul Worksheetsau se apasbutonul SQLdin panoul Query Result:

    Comanda afiat poate fi copiat folosind butonul Copy

  • 7/25/2019 I if.03 Limbajul SQL

    11/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 11 -

    SELECT* FROMangajati

    Dac n locul indicrii cmpurilor se selecteaz * mulimea de selecie va conine toatecmpurile tabelului.

    SELECTNume, Prenume FROMangajati ORDER BYNume

    Dup indicarea cmpurilor folositela sortare se poate folosi Sort Typepentru a modificasensul acesteia (ASCENDINGsauDESCENDING). n cazul n care se folosesc mai multe cmpuri,

    acestea sunt separate prin virgul.

    SELECT * FROM Angajati ORDER BY salar DESC, Nume ASC, Prenume ASC

    SELECTnume, prenume FROMangajati WHEREnume = 'Pop'

  • 7/25/2019 I if.03 Limbajul SQL

    12/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 12 -

    Folosirea unor criterii de selecie (Criteria) va genera o comand SQL n care va fiprezent i clauza WHERE.

    SELECTnume, prenume FROMangajati WHEREnume LIKE'Po%'

    n clauza WHERE a comenzii SELECT se poate folosi caracterul generic % , cu sensul

    de orice ir de caractere. Comanda precedent va permite selectarea liniilor n care nume = Popsau nume=Popescu. Clauza WHERE prenume LIKE '%a'de exemplu permite selectarea tuturorliniilor n care prenumele se termin n "a".

    Pentru a introduce criterii complexe, ca n exemplul anterior sau n exemplele urmtoare,se va selecta tabul Worksheeti comanda va fi tastat n fereastra afiat.

    La scrierea condiiei se pot folosi operatorii logici AND, OR sau NOT precum i operatoriirelaionali:

    = Egal

    > Mai mare

    < Mai mic

    >= Mai mare sau egal

  • 7/25/2019 I if.03 Limbajul SQL

    13/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 13 -

    Ultima fraz va provoca afiarea numelor localitilor n care domiciliaz angajaii. FrclauzaDISTINCT,numele oraului Cluj-Napoca de exemplu ar fi fost probabil repetat de mai multeori.

    Clauza GROUP BYpermite gruparea nregistrrilor dup valoarea unui cmp.

    Exemplul 1:

    SELECT Localitate, COUNT(*) as Nr_Cititori FROM Cititor GROUP BY Localitate

    n cazul n care se realizeaz o grupare, fiecare dintre liniile mulimii de selecie se referla un grup de nregistrri i nu la nregistrri simple. n exemplul precedent, GROUP BY Localitate

    precizeaz cmpul dup care se realizeaz gruparea. nafara valorii cmpului dup care se facegruparea, n astfel de situaii liniile mulimii de selecie pot conine rezultatul aplicrii unor funciimatematice asupra articolelor care formeaz grupul (suma valorilor dintr-un cmp, media valorilor,valoarea maxim sau minim, numrul de articole care formeaz grupul etc). Pentru cmpurile carevor conine rezultatul aplicrii unor funcii se recomand folosirea clausei AS nume pentruatribuirea unui nume relevant coloanei respective. n exemplul dat s-a afiat rezultatul funcieiCOUNT(*), care numr nregistrrile din grup. Funciile care pot fi apelate pentru cmpurinumerice sunt prezentate n tabelul de mai jos.

    MINreturneaz cea mai mic valoare dintr-o

    coloan (cmp numeric)

    MAXreturneaz cea mai mare valoare dintr-o

    coloan (cmp numeric)

    SUM

    returneaz suma valorilor numerice

    dintr-o coloan (cmp numeric)

    AVGreturneaz media valorilor dintr-o coloan

    (cmp numeric)

    COUNTreturneaz numrul de valori dintr-o

    coloan

    COUNT DISTINCTreturneaz numrul de valori distincte

    dintr-o coloan

    Exemplul 2:

    SELECT Sectie, MAX(salar) as Sal_Max FROM Angajati

    GROUP BY Sectie

    Se pot ns aplica aceleai funcii i ntregului fiier, fr gruparea articolelor, caz ncare mulimea de selecie va conine o singur nregistrare:

    SELECT AVG(salar) FROM Angajati

    SELECT AVG(salar) FROM Angajati WHERE functie='Zidar'

    SELECT COUNT(*) FROM Cititor

  • 7/25/2019 I if.03 Limbajul SQL

    14/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 14 -

    Clauza HAVING servete la precizarea unui filtru care se aplic grupurilor de articole,dac este prezent clauza GROUP BY.

    Exemplu:

    SELECT Sectie, AVG(Salar) FROM Angajati GROUP BY Sectie HAVING

    AVG(Salar) > 500

    Dac n fraza SELECT lipsete clauza GROUP BY, folosirea clauzei HAVING nu sejustific, ea avnd acelai efect ca i clauza WHERE.

    O situaie aparte prezint comenzile SELECTcare nu realizeaz o mulime de selecie ci uncalcul matematic. n acest caz from nume_tabel va fi nlocuit prin from dual, ca n exemplulurmtor:

    Cuvntul rezervat dualastfel folosit permite respectarea sintaxei comenzii SELECT.

    b. Selectarea din mai multe tabele

    Principial o baz de date relaional presupune repartizarea datelor n mai multe tabele.Aa cum s-a vzut deja, acest mod de stocare permite eliminarea informaiilor redondante. Pentru agsi articolele dintr-un tabel n relaie cu nregistrri din alt tabel trebuie ns inclus n frazeleSELECT condiia de legtur dintre cele dou tabele. Reprezentarea graficreprezentnd tabelele

    bazei de date i relaiile dintre ele poart numele de diagram E-R (entiti-relaii, eng. entity-relationship). Exemplu fundamental:

  • 7/25/2019 I if.03 Limbajul SQL

    15/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 15 -

    Comanda SQL corespunztoare este urmtoarea:

    Comanda generat conine clauza suplimentar JOIN. Aceasta permite definirealegturilor existente ntre tabele.

    Legturile dintre tabele pot fi impuse i folosind clauza WHERE, ca n exemplul urmtor:

    SELECT Edituri.Nume, Carti.Titlu, Carti.Anul FROM Edituri, Carti WHERENume='Minerva' AND Edituri.CodE=Carti.CodE

    A doua condiie coninut n clauza WHERE este cea care leag tabelele Editurii Carti.FolosindJOIN, exemplul anterior poate fi scris astfel:

    SELECT Edituri.Nume, Carti.Titlu, Carti.Anul

    FROM Edituri INNER JOIN Carti ON Edituri.CodE=Carti.CodE

    WHERE Nume='Minerva'

    Clauza JOIN este ns singura soluie ntr-o alt situaie, respectiv cnd ntr-un tabel seaccept pentru o cheie strin valori nule. Un exemplu simplu este cel al tabelelorAngajatii Soi

    prezentate n continuare.

  • 7/25/2019 I if.03 Limbajul SQL

    16/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 16 -

    Dintre angajaii din primul tabel doi sunt cstorii, n cazul lor ID_SOT are valori nenule.

    Dac se dorete realizarea unei mulimi de selecie care s cuprind angajaii, iar pentru ceicstorii numele i prenumele soului/soiei, fraza SELECTar putea fi urmtoarea:

    SELECT Angajati.Nume, Angajati.Prenume,Soti.Nume_prenume

    FROM Angajati, Soti WHERE Angajati.ID_SOT=SOTI.ID_SOT

    Rezultat:

    Rezultatul nu este probabil cel dorit deoarece prin condiia pus sunt exclui din mulimeade selecie angajaii necstorii.

    Soluia este oferit de clauzaLEFT OUTER JOIN:

    SELECT Angajati.Nume, Angajati.Prenume,Soti.Nume_prenume

    FROMAngajati LEFT OUTER JOINSoti on Angajati.ID_SOT=SOTI.ID_SOT

    Rezultatul va cuprinde toate liniile din primul tabel iar pentru liniile din primul tabel careau corespondent n al doilea tabel, va include i informaiile corespunztoare din al doilea tabel.

  • 7/25/2019 I if.03 Limbajul SQL

    17/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 17 -

    Similar se poate folosi clauza RIGHT OUTER JOIN pentru includerea tuturornregistrrilor din al doilea tabel i selectarea din primul doar a celor care satisfac relaia delegtur.

    Observaie: Pentru a impune n Query Buildertipul de clauz JOINdorit se selecteaz cubutonul drept al mouse-ului linia care unete cele dou tabele i se indic folosind meniulcontextual, soluia dorit.

    Limbajul SQL permite nlocuirea unei mulimi care contribuie la selecie printr-o alt frazSELECT, ca n exemplul urmtor.

    SELECT Edituri.Nume, Carti.Titlu, Carti.Anul FROM Edituri, Carti WHERENume='Minerva' AND Edituri.CodE=Carti.CodE AND Titlu.Data IN (SELECT Data FROMCarti WHERE Data BETWEEN '12-MAY-1975' AND'29-MAY-1980')

    Utilizarea parametrilor

    SQL permite ca la scrierea comenzii SELECT s se foloseasc parametrii. Valorileacestora sunt cerute ntr-o fereastr separat, n momentul executrii interogrii.

    Exemplu :

    SELECT * from ANGAJATI WHERE id_angajat > :valoare

  • 7/25/2019 I if.03 Limbajul SQL

    18/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 18 -

    Aplicaia va afia o fereastr de dialog n care va cere definirea valorii parametruluivaloare:

    Rezultat:

    IA.03.6. Comanda INSERT

    ComandaINSERTadaug un rnd ntr-un tabel existent.

    Exemplu:

    INSERT INTO Edituri(CodE,Nume,Adresa,Telefon) VALUES(121,

    'Albatros','B-dul Tomis Nr. 32 Constanta','0745654765')

    Lista de cmpuri de dup numele tabelului poate fi omis dac toate cmpurile primescvalori iar acestea sunt scrise n ordinea definit la creare (n care ele apar n capul de tabel). Dac

    un cmp nu primete valoare el va primi implicit valoarea NULL, dac la creare, prin modul dedeclarare a cmpului, introducerea unei astfel de valori este autorizat.

    IA.03.7. Comanda DELETE

    Comanda DELETEsuprim una sau mai multe nregistrri dintr-un tabel. Ca i n cazulcomenzii SELECT, pentru definirea unui set de nregistrri care vor fi terse se utilizeaz clauzaWHERE.

    Exemple:DELETE FROM Autori WHERE CodAut=7

  • 7/25/2019 I if.03 Limbajul SQL

    19/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 19 -

    DELETE FROM Edituri

    Ultima comand suprim toate nregistrrile din tabelulEdituri.

    IA.03.8. Comanda UPDATE

    Comanda UPDATE permite modificarea unei nregistrri sau a unui set de nregistrri.Pentru precizarea setului de nregistrri afectate se folosete clauza WHERE.

    Exemplu:

    UPDATE Edituri SET Adresa='str. 1 Mai Nr. 12', Telefon='0745343435'

    WHERE Nume='Dacia'

    UPDATE Angajati SET Salar=Salar*1.2 WHERE Salar

  • 7/25/2019 I if.03 Limbajul SQL

    20/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 20 -

    select titlu from carti

    titlurile crilor aprute n anul 1991;

    select titlu from carti where an_apar=1991

    titlurile crilor aprute n anul specificat de utilizator (variabil);

    select titlu from carti where an_apar=:an titlul crilor i anul de apariie pentru crile care au codul > 2;

    select titlu, an_apar from carti where cod_carte>2

    titlul crii, anul apariiei i codul crii pentru crile aprute nainte de 1991 i careau codul < 2;

    select titlu, an_apar, cod_carte from carti wherean_apar2

    numele i prenumele cititorilor care au nume care ncep cu Po;

    select nume, prenume from cititori where nume like 'Po%'afiarea localitilor de unde provin cititorii;

    select distinct localitatea from cititori

    afiarea numrului de cri din biblitec;

    select count(*) as nr from carti

    2. Introducei i alte comenzi SQL pentru a afla date din celelalte tabele.

    3. Introducei cteva comenzi SQL, folosind i opiunea de salvare a acestor comenzi:

    selectarea crilor i a editurilor corespunztoare

    SELECT CARTI.TITLU, EDITURI.NUME FROM CARTI

    INNER JOIN EDITURI ON EDITURI.COD_EDIT = CARTI.COD_EDITORDER BY EDITURI.NUME

    selectarea tuturor crilor i vizualizarea titlului, a anului apariiei i a autorului:

  • 7/25/2019 I if.03 Limbajul SQL

    21/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 21 -

    SELECT CARTI.TITLU, CARTI.AN_APAR, AUTORI.NUME,

    AUTORI.PRENUME FROM CARTI INNER JOIN AUTCARTI

    ON CARTI.COD_CARTE = AUTCARTI.COD_CARTEINNER JOIN AUTORI ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR

    titlul crii (n ordine alfabetic), numele i prenumele autorului i editura:

    SELECT CARTI.TITLU, AUTORI.NUME, AUTORI.PRENUME,

    EDITURI.NUME AS EDITURA FROM CARTI

    INNER JOIN AUTCARTI ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE

    INNER JOIN AUTORI ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR

    INNER JOIN EDITURI ON EDITURI.COD_EDIT = CARTI.COD_EDIT

    ORDER BY CARTI.TITLU

    Observaie: n SQL || (dou caractere | ) reprezint operatorul de concatenare. Folosindacest operator se pot genera n mulimea de selecie valori obinute prin concatenarea valorilorconinute n coloane distincte. Folosind acest operator, problema precedent poate fi rezolvatastfel:

  • 7/25/2019 I if.03 Limbajul SQL

    22/23

    INFORMATIC*I* IF.03. Limbajul SQL

    - 22 -

    SELECT CARTI.TITLU,

    AUTORI.NUME || ' ' || AUTORI.PRENUME AS NUME_AUTOR,

    EDITURI.NUME AS EDITURA

    FROM CARTI

    INNER JOIN AUTCARTI ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE

    INNER JOIN AUTORI ON AUTORI.COD_AUT = AUTCARTI.COD_AUTORINNER JOIN EDITURI ON EDITURI.COD_EDIT = CARTI.COD_EDIT

    ORDER BY CARTI.TITLU

    titlul crii, numele i prenumele autorului, numele i prenumele cititorului pent rucrile mprumutatate nainte de 01 feb 2011.

    SELECT CARTI.TITLU,

    AUTORI.NUME || ' ' || AUTORI.PRENUME as Autor,

    CITITORI.NUME || ' ' || CITITORI.PRENUME AS Cititor,

    IMPRUMUT.DATA_IMPRUMUT

    FROM CARTI INNER JOIN AUTCARTI

    ON CARTI.COD_CARTE = AUTCARTI.COD_CARTE

    INNER JOIN AUTORI

    ON AUTORI.COD_AUT = AUTCARTI.COD_AUTOR

    INNER JOIN IMPRUMUT

    ON CARTI.COD_CARTE = IMPRUMUT.COD_CARTE

    INNER JOIN CITITORI

    ON CITITORI.COD_CIT = IMPRUMUT.COD_CIT

    WHERE IMPRUMUT.DATA_IMPRUMUT < '01 feb 2012'

  • 7/25/2019 I if.03 Limbajul SQL

    23/23

    INFORMATIC*I* IF.03. Limbajul SQL