Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Elemente de baza ale interogarilor SQL

sql



+ Font mai mare | - Font mai mic



Elemente de baza ale interogarilor SQL

Modalitatea prin care, pornind de la o schema relationala, pot fi obtinute diverse informatii dintr-o baza de date se numeste interogare (QUERY), iar formularea unei interogari inseamna redactarea unei fraze SELECT



Termenul de interogare este oarecum impropriu. O interogare SQL nu este neaparat o intrebare pusa bazei de date. Ea poate fi si o comanda pentru executarea uneia din actiunile urmatoare:

- sa construiasca sau sa stearga o baza de date;

- sa insereze, sa modifice sau sa stearga linii sau campuri;

- sa caute in cateva tabele o anumita informatie si sa returneze rezultatele intr-o anumita ordine;

- sa modifice securitatea informatiilor.

O fraza SELECT are un format simplu si flexibil. Cele trei clauze principale sunt SELECT FROM si WHERE dintre care doar primele doua sunt obligatorii.

Sintaxa oarecum simplificata a unei interogari SQL este urmatoarea:

SELECT [ALL/DISTINCT/] lista_atribute

FROM lista_tabele

[WHERE criteriu_de_cautare]

[GROUP BY atribut_de_grupare]

[HAVING criteriu_de_grupare]

[ORDER BY criteriu_de_ordonare [ASC/DESC]];

unde:

lista_atribute

- specifica atributele ale caror valori vor fi returnate

nume-tabele

- specifica tabelele din care se vor extrage datele

ALL

- specifica returnarea tuturor tuplurilor care indeplinesc conditiile precizate in blocul de cerere

DISTINCT

- elimina tuplurile care prezinta valori duplicate continute in atributele specificate

WHERE

- permite, prin precizarea unei expresii, exprimarea criteriului de selectie

ORDER BY

- precizeaza atributul dupa care se va face ordonarea

GROUP BY

- folosit pentru a partitiona o relatie in grupuri, acordand acestora valori pe un atribut sau lista de atribute

HAVING

- folosit pentru a specifica criterii de selectie pe grupuri de tupluri

In continuare este realizata o paralela intre clauzele principale ale frazei SELECT cu operatorii algebrei relationale prezentati in capitolul 3 Algebra relationala.

Selectie si proiectie

Clauza SELECT in algebra relationala corespunde operatorului proiectie, ea fiind folosita pentru a desemna care sunt coloanele care vor aparea in rezultat. Clauza FROM este folosita pentru a enumera tabelele (relatiile) din care vor fi extrase informatiile aferente consultarii. Prin clauza WHERE este desemnat predicatul selectiv al algebrei relationale, ce se aplica atributelor din relatiile care apar in clauza FROM

O consultare simpla in SQL, la modul cel mai general si simplist, poate fi prezentata astfel:

SELECT C1, C2, , Cn

FROM T1, T2, , Tm

WHERE P

Rezultatul unei astfel de fraze SQL se prezinta sub o forma tabelara. Aceasta forma poate fi o lista (text), o tabela propriu-zisa sau o tabela temporara, dar si o tabela derivata (imagine). Sunt si cazuri in care rezultatul poate fi obtinut si ca o variabila masiv (tablou).

Ci - reprezinta coloanele (care pot fi atribute sau expresii de atribute) rezultat);

Tj - tabelele ce trebuie parcurse pentru obtinerea rezultatului;

P - predicatul (conditia) simplu sau compus ce trebuie indeplinit de tupluri pentru a putea fi incluse in rezultat.

Atunci cand clauza WHERE nu este prezenta, se considera in mod implicit ca valoarea logica a predicatului P este "adevarat" si in consecinta, toate liniile din tabela sau produsul cartezian al tabelelor specificata/specificate in clauza FROM vor fi incluse in rezultat.

Daca in locul coloanelor C1, C2, , Cn apare simbolul (asterisc), rezultatul va fi format din toate atributele tabelelor specificate in clauza FROM. De asemenea, numele atributelor rezultatului sunt numele atributelor din tabela (tabelele) specificata in FROM. Daca se doreste schimbarea acestui nume rezultat se apeleaza la clauza AS

Conform restrictiei de unicitate, intr-o relatie nu pot exista doua linii identice. In schimb, in SQL, tabela obtinuta dintr-o consultare poate contine doua sau mai multe tupluri identice.

Spre deosebire de algebra relationala, unde tuplurile identice (dublurile) sunt eliminate automat din rezultat, in SQL nu se intampla acelasi lucru. Pentru aceasta este necesara folosirea optiunii DISTINCT

SELECT DISTINCT C1, C2, , Cn

FROM T1, T2, , Tm

WHERE P

Din cele prezentate pana acum se poate trage concluzia ca o fraza SELECT corespunde:

- unei proiectii (SELECT C1

- unui produs cartezian (FROM R1 A R2 A A Rm

- unei selectii algebrice (WHERE P

si conduce la obtinerea unui rezultat cu "n" coloane, fiecare coloana fiind un atribut din T1, T2, , Tm sau expresie calculata pe baza unor atribute din T1, T2, , Tm

In continuare, pe baza exemplelor din capitolul 3, vom transpune in SQL, cateva interogari din algebra relationala.

Exemplul 1. Selectie

SELECT *

FROM R1

WHERE C1>500

Exemplul 2. Selectie

SELECT *

FROM R1

WHERE C3>250 AND C3<=350

Exemplul 3. Selectie

SELECT *

FROM R1

WHERE C1>300 AND C3>300

Exemplul 4. Care sunt studentii Facultatii de Stiinte Economice?

SELECT *

FROM STUDENT

WHERE facultate = "Stiinte Economice"

Exemplul 5. Care sunt studentii Facultatii de Stiinte Economice, specializarea Contabilitate si Informatica de Gestiune?

SELECT *

FROM STUDENT

WHERE facultate = "Stiinte Economice" AND

sectia = "CIG"

Exemplul 6. Ce burse au fost incasate in februarie 2004?

Formatul general al unei constante de tip data calendaristica este YYYY-MM-DD, interogarea in SQL-92 poate avea forma.

SELECT *

FROM BURSA

WHERE data_incasarii>='2004/02/01' AND

data_incasarii<='2004/02/29'

In Visual FoxPro aceeasi interogare este de forma:

SELECT *;

FROM BURSA;

WHERE data_incasarii>= AND;

data_incasarii<=

Observatie: In Visual Foxpro caracterul ; este folosit pentru a specifica faptul ca o comanda este scrisa pe mai multe linii.

Exemplul 7. Proiectie

SELECT C3

FROM R1

Exemplul 8. Proiectie

SELECT C1, C3

FROM R1

Exemplul 9. Care sunt facultatile preluate in baza?

SELECT facultate

FROM STUDENT

SQL, spre deosebire de algebra relationala, nu elimina automat duplicatele. Tabela obtinuta prin consultarea de mai sus are forma tabelei R' (figura 3.13.). Pentru a obtine rezultatul de forma tabelei R (o facultate sa apara o singura data), se foloseste clauza DISTINCT

Exemplu 10. Care sunt: cota, titlul, domeniul si numar de exemplare al fiecarei carti?

SELECT cota_carte, titlu, domeniu, nr_exemplare

FROM CARTE

In acest caz nu este necesara clauza DISTINCT, deoarece cota_carte este cheia primara a tabelei CARTE.

Exemplul 11. Care este facultatea pe care o urmeaza studentul Barbu Costel?

SELECT facultate

FROM STUDENT

WHERE nume = "Barbu Costel"

Exemplul 12. Care sunt regiunile din care fac parte judetele Dambovita si Valcea?

SELECT judet, regiune

FROM LOCALITATE

WHERE judet = "Dambovita" OR judet = "Valcea"

Exemplul 13. Care sunt studentii Facultatii de Stiinte Economice de la specializarile CIG si FA?

SELECT nume, sectia

FROM STUDENT

WHERE facultate = "Stiinte Economice" AND sectia =

"CIG" OR sectia = "FA"

Exemplul 14. Care sunt cartile care au aparut la editurile Eficient si Macarie?

SELECT titlu

FROM CARTE

WHERE editura = "Eficient" OR editura = "Macarie"

Reuniune, intersectie, diferenta, produs cartezian

Primii trei operatori asamblisti prezinta operatori SQL dedicati: UNION INTERSECT MINUS EXCEPT) in timp ce produsul cartezian se obtine automat prin simpla enumerare a celor doua tabele in clauza FROM

Reuniunea

Un rezultat identic cu tabela R3 din figura 3.2., se obtine prin urmatoarea fraza SELECT

SELECT *

FROM R1

UNION

SELECT *

FROM R2

Revenind la exemplul 13 din capitolul 3 - Care sunt studentii Facultatii de Stiinte Economice de la specializarile CIG si FA? -, fraza SQL echivalenta cu solutia 2 bazata pe reuniune este:

SELECT nume

FROM STUDENT

WHERE facultate = "Stiinte Economice" AND sectia =

"CIG"

UNION

SELECT nume

FROM STUDENT

WHERE facultate = "Stiinte Economice" AND sectia =

"FA"

Intersectia

Raportandu-ne la exemplul din figura 3.3. , echivalentul tabelei R4 se obtine in SQL prin:

SELECT *

FROM R1

INTERSECT

SELECT *

FROM R2

Pentru o prima reprezentare a utilizarii intersectiei, transcriem solutia din algebra relationala formulata la exemplul 14 - Care sunt cartile care au aparut  la editurile Eficient si Macarie?

SELECT titlu

FROM CARTE

WHERE editura = "Eficient"

INTERSECT

SELECT tilu

FROM CARTE

WHERE editura = "Macarie"

Exemplul de mai sus functioneaza in Oracle, nu insa si in Visual FoxPro, care nu are implementat operatorul INTERSECT, astfel incat intersectia trebuie realizata folosind alte clauze si operatori.

Diferenta

Operatorul la care ne-am astepta in acest caz ar fi MINUS. In Standardul SQL - 92 si in alte cateva SGBD-uri operatorul MINUS nu exista, el fiind substituit de EXCEPT, in timp ce in alte SGBD-uri nu exista nici unul, nici altul. Tabela R5 din figura 3.4., calculata prin expresia R1 - R2, in SQL se obtine prin interogarea:

SELECT *

FROM R1

EXCEPT

SELECT *

FROM R2

Ca si pentru INTERSECT, Visual FoxPro nu are implementat un operator SQL pentru realizarea diferentei a doua relatii.

Produsul cartezian

SQL nu pune la dispozitie vreun operator special dedicat produsului cartezian si asta din simplul motiv ca nici nu este nevoie sa o faca. Tabela R6 din figura 3.5., se obtine pur si simplu prin enumerarea celor doua relatii in clauza FROM

SELECT *

FROM R1, R2



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1769
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved