Titlul documentului


introduce lista acestora,separate prin virgula



Yüklə 1,42 Mb.
səhifə8/16
tarix03.01.2019
ölçüsü1,42 Mb.
#89992
1   ...   4   5   6   7   8   9   10   11   ...   16

introduce lista acestora,separate prin virgula:

SELECT Common_name,Category,Length_In FROM Biolife.db

Pentru schimbarea comenzii,proprietatea Active trebuie dezactivata si apoi

reactivata din nou.


-56-

Atunci cand creati o baza de date,alegeti cu atentie numele coloanelor,

astfel incat sa nu se preteze la ambiguitati.De exemplu,in tabelul Biolife

exista o coloana cu titlul Species Name.Daca doriti sa solicitati cu

SELECT aceasta coloana,formula SELECT Species Name FROM Biolife.db va

returna un mesaj de eroare,deoarece spatiul gol va fi interpretat ca si

sfarsit al denumirii si se va cauta coloana Species (care nu exista).

Pentru a formula astfel de coloane se va prefera Species_Name sau orice

alta formula de evitare a ambiguitatilor.

Daca urmariti cu atentie tabelul,in coloana Category puteti observa

ca exista mai multi pesti din aceeasi categorie(Exemple; shark,snapper,

Wrasse).Pentru selectarea exclusiva a unui singur element din fiecare

tip se poate utiliza cuvantul cheie DISTINCT.

EXEMPLU: introduceti urmatoarea comanda:

SELECT DISTINCT Category FROM Biolife.db

Observati ca se vor afisa doar 21 de categorii,fata 28 initiale (toate

repetitiile au fost excluse).

Cu datele de pana acum,putem selecta dintr-o baza de date,una sau

mai multe coloane.Dar,intr-o baza de date reala,aceste coloane pot fi

extrem de lungi (mii de inregistrari).Pentru a realiza o selectie mai

eficienta,se poate adauga o conditie de cautare,care va extrage din

coloana selectata doar acele inregistrari care respecta conditia.

Sintaxa generala este:

SELECT coloana FROM tabelul WHERE coloana OPERATORUL valoarea

deci conditia este formata prin compararea detelor dintr-o coloana oare-

care (poate fi alta coloana decat cea selectata) cu o valoare de control.

De exemplu,pentru a extrage denumirea comuna a tuturor speciilor de

rechin din tabelul Biolife se va utiliza o formula de genul:

SELECT Common_Name FROM Biolife.db WHERE Category = 'Shark'

sau pentru a selecta doar denumirile comune care incep cu litera A,B sau

C se poate utriliza o formula de genul:

SELECT Common_Name FROM Biolife.db WHERE Common_Name < 'D'

SELECT se poate utiliza si cu una dintre functiile SQL,pentru a produce

o valoare noua.De exemplu,pentru a determina valoarea medie a lungimii,

pentru toate speciile din tabel,se poate utiliza functia AVG() astfel:

SELECT AVG(Length_In) FROM Biolife.db (vezi si Functiile SQL)

pentru a returna toate coloanele,dar pentru o singura inregistrare din

tabel,se va formula o comanda care include in conditie o anumita data

cunoscuta:

SELECT * FROM Biolife.db WHERE Common_Name = 'Firefish'

Cand se cunoaste o anumita data din tabel,se poate utiliza operatorul IN

Astfel,comanda de mai sus este identica cu:

SELECT * FROM Biolife.db WHERE Common_Name IN('Firefish')

sau pentru a utiliza operatorul LIKE se va edita o comanda de genul:

SELECT * FROM Biolife.db WHERE Category LIKE '%Snapper'

Pentru a selecta un grup de inregistrari,la care una dintre coloane are

o valoare cuprinsa intre anumite limite,se poate utiliza operatorul

BETWEEN ... AND.

De exemplu,pentru a selecta din tabelul Biolife.db,speciile de peste cu

lungimea cuprinsa intre 35 si 50 se va edita o comanda de genul:

SELECT * FROM Biolife.db WHERE Length_In BETWEEN 35 AND 50

Incercati exercitii similare,pana cand stapaniti bine comanda SELECT.


-57-

Daca nu mai doriti sa tot activati si dezactivati proprietatea Active

din Query1,adaugati doua butoane,un camp TEdit si urmatoarele proceduri

OnClick pentru butoane(Button1=OK si Button2=Executa):

procedure TForm1.Button1Click(Sender: TObject);

begin

Query1.Active:=False;

Query1.SQL.Text:=Edit1.Text;

Query1.Active:=True;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Query1.Active:=False;

Query1.SQL.Text:=Edit1.Text;

Query1.ExecSQL;

end;

Primul buton(denumit OK) va fi utilizat pentru operatiile care nu modifica

baza de date (de tip SELECT) iar cel de al doilea pentru cele care modi-

fica baza de date (INSERT INTO,DELETE,UPDATE etc).

Puteti utiliza Edit1 si butonul OK pentru a explora si restul tabelelor

din DATA: Animals.dbf,Clients.dbf,Holdings.dbf,Master.dbf,Industry,dbf,

Events,Customer,Items,Orders,Vendors etc.

Pentru a adauga o noua inregistrare,se poate utiliza comanda INSERT,

care are urmatoarea sintaxa generala (cu Edit1 + butonul Executa)

INSERT INTO tabel VALUES(valoarea1,valoarea2....valoarea"n") sau:

INSERT INTO tabel(coloana1,coloana2....) VALUES(valoarea1,valoarea2...)

Exemplu,pentru Biolife.db:

INSERT INTO Biolife.db(Category) VALUES('Crap')

Pentru a observa modificarea inchideti si apoi reporniti programul.

Pentru a sterge o inregistrare din tabel se poate utiliza comanda

DELETE,care are urmatoarea sintaxa generala:

DELETE FROM tabel WHERE coloana=valoare

De exemplu,pentru a sterge valoarea Crap introdusa anterior se va putea

utiliza linia de comanda:

DELETE FROM Biolife.db WHERE Category = 'Crap'

Este bine sa faceti o copie de siguranta a fisierelor,inainte de a incepe

operatiile de steregere.In caz contrar,riscati sa pierdeti irecuperabil

o parte din date.Acest principiu este util pentru orice operatie de

actualizare a unei baze de date.Executati initial o copie de siguranta,

apoi efectuati toate operatiile dorite.Daca rezultatul este multumitor

puteti sterge copia de siguranta.Daca au intervenit erori de conceptie,

sau de executie,reinstalati copia de siguranta si repetati procesul.

Pentru a schimba o anumita data,dintr-o singura coloana,puteti utiliza

comanda UPDATE,care are urmatoarea sintaxa generala:

UPDATE tabel SET coloana=valoare noua WHERE coloana=valoare veche

Exemplu: pentru a schimba in tabelul Biolife denumirea de 'Shark' cu cea

de 'Rechin' se poate utiliza urmatoarea comanda:

UPDATE Biolife.db SET Category='Rechin' WHERE Category='Shark'

Prj52 este conceput destul de rudimentar si are doar rol exemplificativ.

Puteti realiza un program cu cate un buton specializat pentru fiecare

operatie,sau cu mai multe campuri de afisare in care datele sa poata fi

prezentate diferit,etc.


-58-

In afara de selectie,datele din tabel pot fi si ordonate dupa un

anumit criteriu.

Ordonarea de face alfabetic prin adaugarea sufixului:ORDER BY coloana.

De exemplu,in tabelul Biolife.db se pot ordona alfabetic speciile de peste

in functie de denumirea lor comuna,cu comanda:

SELECT * FROM Biolife.db ORDER BY Common_Name

Pentru a exploata si alta baza de date,introduceti comanda:

SELECT * FROM Events

Pentru a selecta evenimentele sportive in ordinea datei de incepere:

se poate utiliza comanda:

SELECT * FROM Events ORDER BY Event_Date

Sau pentru a ordona evenimentele alfabetic se poate utiliza comanda:

SELECT * FROM Events ORDER BY Event_Name

iar pentru a ordona evenimentele in functie de ora inceperii:

SELECT * FROM Events ORDER BY Event_Time

Pentru a grupa doua sau mai multe conditii utilizate impreuna cu WHERE

se pot utiliza operatorii AND si OR

De exemplu,pentru a putea selecta din tabelul Events toate evenimentele

din data de 6/20/96 care se desfasoara dupa ora 3:00:00 PM se poate

utiliza o comanda de genul:

SELECT *FROM Events WHERE Event_Date='6/20/96' AND Event_Time>'3:00:00 PM'

Limbajul SQL permite si selectarea de date din doua sau mai multe tabele

simultan,sau reunirea dintre doua comenzi cu UNION:

SELECT coloana FROM tabel1

UNION

SELECT coloana FROM tabel2

EXEMPLU: extrage codul postal(ZIP) din tabelele Clients.dbf si Customer

SELECT zip FROM Clients.dbf UNION SELECT zip FROM CUSTOMER

Apasati butonul Executa,apoi butonul OK.

Comanda UNION este asemanatoare cu SELECT DISTINCT,adica sumeaza din cele

doua comenzi doar rezultatele distincte.Daca doriti sa selectati toate

datele,inclusiv cele care se repeta,se va utiliza comanda UNION ALL (care

are sintaxa identica cu UNION).

Pentru a intersecta datele din doua tabele diferite,in functie de

o conditie prestabilita,se poate utiliza comanda JOIN (sau variantele

sale INNER JOIN,LEFT JOIN,RIGHT JOIN):

Pentru JOIN sintaxa generala este:

SELECT tabel1.coloana1,tabel2.coloana2 FROM tabel1,tabel2

WHERE tabel1.coloana3=tabel2.coloana4

Se pot selecta coloane diferite din cele doua tabele,care respecta con-

ditia specificata prin WHERE...

EXEMPLU: pentru a vedea numele companiilor care sunt localizate in

acelasi stat cu consumatorii se pot utiliza tabelele Vendors si Customer

si urmatoarea linie de comanda:

SELECT Vendors.City,Customer.Company FROM Vendors,Customer

WHERE Customer.State = Vendors.State

Observati ca am utilizat pentru stabilirea conditiei alta coloana decat

cele selectate pentru afisare.Apasati butonul Executa si apoi butonul OK.

Pentru fiecare locatie din tabelul Vendors se va afisa numele companiei

din Customer care este localizata in acelasi stat.Mai exact,se va extrage

fiecare coloana ceruta ori de cate ori conditia WHERE este satisfacuta.

-59-

O comanda asemanatoare este INNER JOIN,care returneaza toate datele din

ambele tabele,daca satisfac conditia specificata.Sintaxa generala este:

SELECT Tabel1.coloana1,Tabel2.coloana2 FROM Tabel1 INNER JOIN Tabel2

ON Tabel1.coloana3=Tabel2.coloana4

De exemplu,pentru cele doua tabele de mai sus se poate utiliza:

SELECT Vendors.VendorName FROM Vendors INNER JOIN Customer

ON Vendors.State = Customer.State

Comanda LEFT JOIN este aproape identica,dar returneaza coloana din

primul tabel in intregime,chiar daca nu verifica conditia specificata

(copiaza complet datele din stanga ecuatiei si selectiv cele din dreapta

ecuatiei):

EXEMPLU:

SELECT Vendors.VendorName,Customer.Zip FROM Vendors LEFT JOIN Customer

ON Vendors.State = Customer.State

Observati ca in coloana din stanga apar si date care nu au corespondent

in coloana din dreapata.Pentru datele care respecta conditia,numele

vanzatorului este repetat pentru fiecare cod postal din statul respectiv.

Comanda RIGHT JOIN este asemanatoare,dar returneaza complet datele

din coloana solicitata din cel de al doilea tabel si returneaza selectiv

datele din coloana aleasa din primul tabel,doar daca aceste date verifica

conditia specificata prin ON:

EXEMPLU:

SELECT Vendors.VendorName,Customer.Zip FROM Vendors RIGHT JOIN Customer

ON Vendors.State = Customer.State

Observati ca in acest caz,coloana din dreapta (Zip) are mult mai multe

date decat cea din stanga (VendorName).

Este foarte important ca aceste comenzi sa fie formulate cat mai clar,

pentru a realiza o selectie cat mai discriminativa.Atunci cand se inter-

secteaza datele din doua tabele,teoretic se pot obtine un numar extrem

de mare de combinatii posibile.Arta programatorului este de a formula

expresia cea mai simpla care returneaza cat mai exact datele dorite.

Daca formula de selectie nu este buna,sau daca nu formulati nici o con-

ditie de selectie,se vor returna tabele extrem de lungi,practic imposibil

de evaluat.Este bine sa exersati acest gen de comenzi cu tabele cat mai

mici,pana cand formulati cat mai exact expresiile de comanda.

Pentru a schimba structura unui tabel,se poate utiliza comanda

ALTER TABLE care va adauga sau va sterge o colana in intregime.Comanda

are doua variante:

ALTER TABLE tabel ADD coloana tipul de data

si ALTER TABLE tabel DROP COLUMN coloana

De exemplu pentru a adauga o coloana de concluzii,de tip char,la tabelul

Orders se poate utiliza comanda:

ALTER TABLE Orders ADD Concluzii char

Tastati Executa,apoi inchideti programul,reporniti si utilizati comanda

SELECT * FROM ORDERS pentru a vedea modificarea efectuata.

Pentru a sterge coloana adaugata se va putea utiliza comanda:

ALTER TABLE Orders DROP COLUMN Concluzii

Tastati Executa,apoi inchideti programul.

Comenzile de modificare a tabelelor cu ALTER TABLE se vor utiliza cat

mai rar,si cu maxim de discernamant,deoarece reformateaza intrega baza

de date si introduc un numar mare de spatii goale.


-60-

Nu este recomandabil nici sa eliminati coloane de date dintr-o baza de

date.O baza de date se construieste greu si se distruge sau sterge foarte

usoar.Date aparent intutile la prima vedere pot fi extrem de utile intr-un

viitor apropiat.In general,atunci cand proiectati o baza de date,alegeti

coloanele si tipul datelor,astfel incat sa nu fie necesar sa fie modifi-

cate ulterior.Se pot restructura bazele de date,atunci cand vor fi apli-

cate intr-un alt proiect (mai restrans sau mai amplu).

Pentru a pastra formatul unui tabel si a sterge doar datele din coloane

se poate utiliza comanda TRUNCATE TABLE tabelul.

Pentru a sterge un tabel si respectiv o baza de date,se pot utiliza

comenzile DROP TABLE Tabel si DROP DATABASE nume.

FUNCTII SQL

Limbajul SQL include si o serie de functii,care pot fi incluse in

comenzi,pentru a obtine rezultate diferite de cele arhivate in tabele.

Sintaxa generala pentru apelarea unei functii este:

SELECT functia(coloana) FROM tabel

Functiile care actioneaza asupra unei colectii de date,pentru a returna

o singura valoare se numesc functii agregate,iar cele actioneaza asupra

unei singure valori pentru a returna o valoare unica se numesc scalare.

Functiile agregate sunt:

AVG(coloana) -returneaza valaorea medie a coloanei

COUNT(coloana) -returneaza numarul de linii din coloana

COUNT(*) -returneaza numarul de coloane selectate

FIRST(coloana) -returneaza prima inregistrare din coloana

LAST(coloana) -returneaza ultima inregistrare din coloana

MAX(coloana) -returneaza valaorea cea mai amre din coloana

MIN(coloana) -returneaza valaorea cea mai mica din coloana

SUM(coloana) -returneaza suma valorilor din coloana

Functiile scalare sunt:

UCASE(c) -converteste caracterele la majuscule

LCASE(c) -converteste caracterele la minuscule

MID(c,start[end])-extrage caractere dintr-un text (intre start si end)

LEN(c) -returneaza lungimea textului

INSTR(c,char) -returneaza pozitia caracterului in text

LEFT(c,nrofchar) -returneaza partea din stanga a textului (nrofchar)

RIGHT(c,nrofchar)-returneaza partea din dreapta a textului

ROUND(c,decimals)-rotunjeste valoarea numerica

MOD(x,y) -executa operatia modul (restul impartirii)

NOW() -returneaza data curenta

FORMAT(c,format) -schimba formatul datelor

DATE DIFF(d,date1,date2)-calculeaza diferenta datelor calendaristice

EXEMPLE: pentru a efectua o medie aritmetica:

SELECT AVG(YRL_HIGH),AVG(YRL_LOW) FROM Master.dbf

pentru a aduna toate inregistrarile dintr-o coloana:

SELECT SUM(Shares) FROM Holdings.dbf

pentru a selecta valaorea maxima si valaorea minima din coloana

SELECT MAX(Shares),MIN(Shares) FROM Holdings.dbf

pentru a afla numarul de inregistrari dintr-un tabel:

SELECT COUNT(Category) FROM Biolife.db

pentru a calcula o suma partiala,in functie de o conditie:

SELECT SUM(CUR_PRICE) FROM Master.dbf WHERE YRL_HIGH > 50


-61-

Functiile agregate se pot utiliza si pentru a realiza calcule partiale

ale unor date din coloana respectiva,care respecta o anumita conditie

introdusa prin GROUP BY.De exemplu,in tabelul Biolife.db exista trei

specii de cod,doua specii de rechin etc.Pentru a determina care este

lungimea medie,pentru fiecare specie,se poate utiliza formula:

SELECT Category,AVG(Length_In) FROM Biolife.db GROUP BY Category

In continuare,pentru a selecta dintre speciile de peste,doar cele care

au dimensiunea medie mai mare de 40 de cm,se poate adauga o noua conditie

Pentru functiile agregate,in loc de WHERE se va utiliza HAVING.

EXEMPLU:

SELECT Category,AVG(Length_In) FROM Biolife.db GROUP BY Category

HAVING AVG(Length_In) > 40

Pentru a copia date dintr-un tabel in altul se utilizeaza comanda

SELECT INTO cu sintaxa generala:

SELECT nume INTO tabel nou(IN-baza de date] FROM sursa

EXEMPLU: SELECT * INTO Angajati FROM Persoane va copia tot tabelul.

O comanda SQL poate fi utilizata si sub forma de membru al unei ecuatii,

unde ecuatia respectiva specifica o anumita conditie:

EXEMPLU:

SELECT Co_Name,Yrl_Low FROM Master.dbf

WHERE Yrl_Low < (SELECT AVG(Yrl_Low) FROM Master.dbf)

va selecta din tabel,doar companiile pentru care valoarea minima anuala

este mai mica decat media valorilor minime anuale (al pretului/actiune)

Pentru a crea baze de date,puteti utiliza CREATE DATABASE si CREATE

TABLE,dar este recomandabil sa utilizati un program specializat(FoxPro).

Principala problema o constitue modul de selectie a datelor din bazele

de date foarte mari (cu mii si zeci de mii de inregistrari).Un numar prea

mic de conditii,va returna un numar prea mare de rezultate,iar un numar

prea mare de conditii poate sa excluda exact rezultatele cautate,sau

cele foarte asemenatoare care prezinta un interes secundar.Este exact

genul de dilema al "internautilor Google".

Atunci cand proiectati si programati o aplicatie Delphi,care exploa-

teaza o baza de date,este bine sa utilizati butoane sau comenzi care

executa automat comenzile SQL precizate de d-voastra.Nu este recomandabil

sa lasati formularea acestor comenzi pe seama utilizatorului (este absolut

impredictibil la ce rezultate vor putea ajunge).

In general,Delphi este proiectat pentru a realiza interfete vizuale cu

utilizatorul,astfel incat acesta sa nu trebuiasca decat sa apese un singur

buton.

Atunci cand bazele proiectate vor fi in permanenta crestere,verificati

comenzile si dinamic.Adauagti progresiv un anumit numar de inregistrari si

apoi verificati si reverificati comenzile utilizate.

In cazul in care nu puteti formula o comanda ideala,este preferabil sa

afisati si un numar limitat de date inutile,decat sa pierdeti o parte

dintre datele semnificative.

Pentru bazele de date cu care se lucreaza frecvent,este bine sa salvati

copii de siguranta,realizate in etape succesive (baza de date de la debut,

baza de date cu datele esentiale si ultima actualizare a bazei de date).

In acest mod,pastrati in siguranta atat formatul de baza cat si datele

esentiale sau recente.In general,bazele de date mici sunt mai eficiente

decat cele foarte lungi(se prefera organizarea modulara cu baze multiple).


-62- Internet - TDataSetTableProducer

TDataSetTableProducer este un obiect care combina facilitatile oferite

de TPageProducer cu cele oferite de TQueryTable producer.Mai exact,acest

component permite preluarea datelor de tip tabelar,dintr-o baza de date

si reeditarea acestora sub forma de text in limbaj HTML.Ca rezultat,datele

vor putea fi utilizate pentru a realiza file HTML locale sau pentru a

formula raspunsul unei aplicatii WebServer(sub forma de mesaj HTML).

Yüklə 1,42 Mb.

Dostları ilə paylaş:
1   ...   4   5   6   7   8   9   10   11   ...   16




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin