Sunteți pe pagina 1din 28

SGBD Access 2000: SQL: Crearea tabelelor

CREATETABLE
CREATE TABLE nume_tabelă
nume_tabelă((nume-atribut1
nume-atribut1tip_dată(mărime)
tip_dată(mărime)
[NOTNULL]
[NOT NULL][,nume-atribut2
[,nume-atribut2tip_dată(mărime)
tip_dată(mărime)[NOT
[NOTNULL]..]
NULL]..]
[CONSTRAINTnume-atribut
[CONSTRAINT nume-atributCHECK
CHECK(nume-atribut
(nume-atribut<condiţie>…)]
<condiţie>…)]
[CONSTRAINTnume_index]
[CONSTRAINT nume_index]{PRIMARY
{PRIMARYKEY|UNIQUE|NOT
KEY|UNIQUE|NOT
NULL}]);
NULL }]);

CREATE TABLE Carti ([Cod ISBN] Text(15)


CONSTRAINT [Cod ISBN] Primary Key,
[Denumire Carte] Text(50), NOT NULL
[Data Apariţiei] Date NOT NULL,
[Stocul tiparit] Number, CONSTRAINT [Stocul tiparit]
CHECK ([Stocul tiparit] BETWEEN 1000 AND 3000),
[Pret baza] Currency NOT NULL);
SGBD Access 2000: SQL: Modificarea structurii

ALTERTABLE
ALTER TABLE nume_tabelă
nume_tabelă
ADDnume-atribut
ADD nume-atributtip_dată(mărime)
tip_dată(mărime)[NOT
[NOTNULL]
NULL][CONSTRAINT
[CONSTRAINT
nume-atributCHECK
nume-atribut CHECK(nume-atribut
(nume-atribut<condiţie>…)];
<condiţie>…)];

ALTER TABLE Carti


ADD [Nume coordonator lucrare] Text(25) NOT NULL;

SGBD Access 2000: SQL: Ştergerea unei tabele


DROPTABLE
DROP TABLE nume_tabelă
nume_tabelă;;

DROP TABLE [Clienti Buzau];


SGBD Access 2000: SQL: Compunerea
Compunerea asociativă clasică a tabelelor (JOIN cu WHERE)
SELECT[domeniu]
SELECT [domeniu]listă
listăselecţie
selecţiecâmpuri
câmpuridin
dintabele
tabelediferite
diferite
FROMnume
FROM numetabele
tabeleasociate
asociate
[WHEREcriteriu
[WHERE criteriudedecompunere
compunere
[ORDERBY
[ORDER BYlistă
listăcâmpuri
câmpuricriterii
criteriide
deordonare
ordonare{ASC/DESC}];
{ASC/DESC}];

Compunerea internă a tabelelor (JOIN cu INNER)


SELECT[domeniu]
SELECT [domeniu]listă
listăselecţie
selecţiecâmpuri
câmpuridin
dintabele
tabelediferite
diferite
FROMnume
FROM numetabelă_1
tabelă_1
{{INNER/LEFT/RIGHT}
INNER/LEFT/RIGHT}
INNER
INNER JOINnume
JOIN numetabelă_2
tabelă_2
ONcriteriu(1)
ON criteriu(1)dedeasociere
asociere
[{INNER/LEFT/RIGHT}JOIN
[{INNER/LEFT/RIGHT} JOINnume
numetabelă_3
tabelă_3
ONcriteriu(2)
ON criteriu(2)dedeasociere]...
asociere]...
[WHEREcriteriu
[WHERE criteriudedeselecţie]
selecţie]
[ORDERBY
[ORDER BYlistă
listăcâmpuri
câmpuricriterii
criteriide
deordonare
ordonare{ASC/DESC}];
{ASC/DESC}];
SGBD Access 2000: SQL: Compunerea

Compunereaaa22tabele
Compunerea tabele(WHERE)
(WHERE)

SELECT Facturi.[Numar
Facturi Factura], Facturi.[Data
Facturi Facturii], Facturi.
Facturi
[Cod Fiscal],
[Continut Factura].[Cod
Factura ISBN], [Continut Factura].Cantitate,
Factura
[Continut Factura].[Pret
Factura f], [Cantitate]*[Pret f] AS Valoare
FROM Facturi,[
Facturi Continut Factura]
Factura
WHERE Facturi.[Numar
Facturi Factura] = [Continut Factura].[Numar
Factura
Factura];
SGBD Access 2000: SQL
Compunereaaa33tabele
Compunerea tabele(WHERE)
(WHERE)

SELECT Facturi.[Numar
Facturi Factura], Facturi.[Data
Facturi Facturii],
[Continut Factura].Cantitate,
Factura [Continut Factura].[Pret
Factura f],
[Cantitate]*[Pret f] AS Valoare, Clienti.[Cod
Clienti Fiscal], Clienti.
Clienti
[Denumire Client]
FROM Facturi,
Facturi [Continut Factura],
Factura Clienti
WHERE Facturi.[Numar
Facturi Factura]=[Continut Factura].[Numar
Factura
Factura] AND Clienti.[Cod
Clienti Fiscal] = Facturi.[Cod
Facturi Fiscal];
SGBD Access 2000: SQL

Compunereaaa22tabele
Compunerea tabele(INNER)
(INNER)

SELECT Facturi.[Numar
Facturi Factura], Facturi.[Data
Facturi Facturii], Facturi.
Facturi
[Cod Fiscal], [Continut Factura].[Cod
Factura ISBN], [Continut
Factura].Cantitate,
Factura [Continut Factura].[Pret
Factura f], [Cantitate]*[Pret f] AS
Valoare
FROM Facturi INNER JOIN [Continut Factura]
Factura ON Facturi.
Facturi
[Numar Factura] = [Continut Factura].[Numar
Factura Factura];
SGBD Access 2000: SQL
Compunereaaa33tabele
Compunerea tabele(INNER)
(INNER)

SELECT Facturi.[Numar
Facturi Factura], Facturi.[Data
Facturi Facturii],
[Continut Factura].Cantitate,
Factura [Continut Factura].[Pret
Factura f],
[Cantitate]*[Pret f] AS Valoare, Clienti.[Cod
Clienti Fiscal], Clienti.
Clienti
[Denumire Client]
FROM Clienti INNER JOIN (Facturi INNER JOIN [Continut
Factura]
Factura ON Facturi.[Numar
Facturi Factura] = [Continut Factura].
Factura
[Numar Factura]) ON Clienti.[Cod
Clienti Fiscal] = Facturi.[Cod
Facturi
Fiscal];
SGBD Access 2000: SQL
NUMĂRULDE
NUMĂRUL DEFACTURI
FACTURIEMISE
EMISECLIENŢILOR
CLIENŢILORDUPĂ
DUPĂ01/05/2001
01/05/2001
(Selectîn
(Select înSelect)
Select)

SELECT [Cod Fiscal], count(*) AS NR


FROM
(SELECT * FROM Facturi
WHERE [Data Facturii]>#5/1/2001#)
GROUP BY [cod fiscal];

SELECT S.[Cod Fiscal], count(*) AS NR


FROM
[SELECT * FROM Facturi
WHERE [Data Facturii]>#5/1/2001#] AS S
GROUP BY [cod fiscal];
SGBD Access 2000: SQL
AUTORIICARE
AUTORII CAREAU
AUSCRIS
SCRISCELE
CELEMAI
MAIMULTE
MULTECĂRŢI
CĂRŢI

III. Selectarea numelui autorului

SELECT A.CNP, A.[Nume Prenume], Count(*) AS NR


FROM AUTORI AS A
INNER JOIN [AUTORI-CARTI] ON A.CNP=[AUTORI-
CARTI].CNP II. Numărul maxim de cărţi scrise
GROUP BY A.CNP, A.[Nume Prenume]
HAVING ((Count(*)=(SELECT MAX(NR) AS MAXIM FROM
(SELECT CNP, COUNT(*) AS NR FROM [Autori-Carti]
GROUP BY CNP)))); I. Câte cărţi a scris fiecare autor
SGBD Access 2000: SQL
CANTITATETOTALĂ
CANTITATE TOTALĂFACTURATĂ
FACTURATĂ

SELECT Facturi.[Numar Factura], Facturi.[Data Facturii],


Count([Continut Factura].[Cod ISBN]) AS [CountOfCod ISBN],
Sum([Continut Factura].Cantitate) AS SumOfCantitate
FROM Facturi
INNER JOIN [Continut Factura] ON Facturi.[Numar
Factura]=[Continut Factura].[Numar Factura]
GROUP BY Facturi.[Numar Factura], Facturi.[Data Facturii]
ORDER BY Facturi.[Data Facturii];
SGBD Access 2000: SQL
CARTEACARE
CARTEA CAREAAAVUT
AVUTCEA
CEAMAI
MAIMARE
MAREVÂNZARE
VÂNZARE

III. Selectarea codului ISBN şi a valorilor din tabela


[Continut Factura]

SELECT [Continut factura].[Cod ISBN], Sum([Pret f]*[Cantitate]) AS


Valoare
FROM [Continut factura]
II. Selectarea valorii maxime
GROUP BY [Continut factura].[Cod ISBN]
HAVING (((Sum([Pret f]*[Cantitate]))=
(SELECT MAX(S.ValoareCarte) AS MAXIM FROM
(SELECT C.[Cod ISBN], SUM([Pret f]*[Cantitate]) as
ValoareCarte FROM [Continut factura] AS C
GROUP BY C.[Cod ISBN]) AS S ))); I. Selectarea codului ISBN şi a sumei
valorilor din tabela [Continut Factura]
SGBD Access 2000: SQL
CLIENŢIICARE
CLIENŢII CARENU
NUAU
AUPRIMIT
PRIMITNICI
NICIOOFACTURĂ
FACTURĂ

SELECT [Cod Fiscal], [Denumire Client]


FROM Clienti
WHERE [Cod Fiscal] NOT IN
(SELECT DISTINCT [Cod Fiscal] FROM Facturi);

(SELECT [Cod Fiscal]


FROM Facturi
SELECT * GROUP BY [Cod Fiscal]);
FROM Clienti
LEFT JOIN Facturi ON Clienti.[Cod Fiscal]=Facturi.[Cod Fiscal]
WHERE Facturi.[Numar Factura] IS NULL;
Fără IS NULL, rezultă toţi clienţii, indiferent de
faptul dacă au primit sau nu facturi
SGBD Access 2000: SQL
FACTURACU
FACTURA CUVALOAREA
VALOAREACEA
CEAMAI
MAIMARE
MARE

III. Selectarea numărului de factură


(pentru care valoarea este maximă)

SELECT [Numar factura], SUM([Cantitate]*[Pret f]) AS Maxim


FROM [Continut factura] II. Selectarea sumei valorii maxime
GROUP BY [Numar factura]
HAVING SUM([Cantitate]*[Pret f])=(select max(Total) FROM
(SELECT SUM(([Pret f]*[Cantitate])) AS Total
FROM [Continut factura]
GROUP BY [Numar Factura])); I. Selectarea valorilor dintr-o factură
[Continut Factura]
SGBD Access 2000: SQL
FACTURILEMAI
FACTURILE MAIMARI
MARIDECÂT
DECÂTMEDIA
MEDIA

SELECT [Continut factura].[Numar Factura], Sum([Cantitate]*[Pret f])


AS Maxim
FROM [Continut factura]
GROUP BY [Continut factura].[Numar Factura]
HAVING (Sum([Cantitate]*[Pret f])>
(SELECT AVG(Total) FROM
(SELECT SUM([Pret f]*[Cantitate]) AS Total
FROM [Continut factura]
GROUP BY [numar factura])));
SGBD Access 2000: SQL
FACTURILEPE
FACTURILE PELUNĂ
LUNĂŞI
ŞIPE
PEAN
AN

SELECT Facturi.[Numar Factura], [Continut Factura].[Cod ISBN],


Month([Data Facturii]) AS Luna, Year([Data Facturii]) AS Anul,
[Cantitate]*[Pret f] AS Valoare
FROM Facturi INNER JOIN [Continut Factura] ON Facturi.[Numar
Factura] = [Continut Factura].[Numar Factura]
WHERE Month([Data Facturii]=5 AND Year[Data Facturii]=2001;
SGBD Access 2000: SQL
NUMĂRULMEDIU
NUMĂRUL MEDIUDE
DEPRODUSE
PRODUSEDE
DEPE
PEOOFACTURĂ
FACTURĂ

SELECT AVG(NUMARPRODUSE) AS MEDIE


FROM
X (SELECT [Numar Factura], COUNT(*) AS NUMARPRODUSE
FROM [Continut Factura]
GROUP BY [NUMAR FACTURA]);

FACTURILEAL
FACTURILE ALCĂROR
CĂRORNR.
NR.DE
DEPRODUSE
PRODUSE>>MEDIA
MEDIA

SELECT [Numar Factura], COUNT(*) AS NUMARPRODUSE


FROM [Continut Factura]
GROUP BY [NUMAR FACTURA])
HAVING COUNT(*)>(X)
SGBD Access 2000: SQL
CARESUNT
CARE SUNTCĂRŢILE
CĂRŢILECARE
CAREAU
AUAVUT
AVUTPREŢUL
PREŢUL>>
DECÂTAL
DECÂT ALUNEI
UNEIANUMITE
ANUMITECĂRŢI
CĂRŢI(parametru)
(parametru)

TETA-COMPUNERE REFLEXIVĂ CU PARAMETRU

SELECT CARTI.*
FROM CARTI
INNER JOIN
(SELECT [Pret Baza] FROM CARTI
WHERE [Cod ISBN]=[Tastati Cod ISBN]) AS CARTI_1
ON CARTI.[Pret Baza]>CARTI_1.[Pret Baza];
SGBD Access 2000: SQL

DISCOUNTÎN
DISCOUNT ÎNLINIE
LINIEDE
DEFACTURĂ
FACTURĂ

SELECT Facturi.[Numar Factura], [Continut Factura].Cantitate,


[Continut Factura].[Pret f], [Cantitate]*[Pret f] AS Valoare,
IIf([Valoare]<5000000,0,[Valoare]*0.15) AS Reducere
FROM Facturi
INNER JOIN [Continut Factura] ON Facturi.[Numar Factura] =
[Continut Factura].[Numar Factura];
SGBD Access 2000: SQL: UNION

Dacă se doreşte să se vizualizeze rezultatele mai multor interogări


SELECT în acelaşi timp, prin combinarea ieşirilor lor, poate fi
utilizată facilitatea UNION a limbajului de interogare SQL.

SELECT lista_campuri FROM tabela1


UNION
SELECT listă_campuri FROM tabela2
[GROUP BY camp_de_grupare]
[HAVING criteriul_de_agregare]
[UNION SELECT listă_campuri FROM tabela3
[GROUP BY camp_de_grupare ]
[HAVING criteriul_de_grupare]]
[UNION...]
[ORDER BY camp_criteriu_de_sortare];
SGBD Access 2000: SQL: UNION

SELECT [Cod Fiscal],[Denumire Client],Localitate,Telefon


FROM Clienti
UNION
SELECT [Cod Fiscal],[Denumire Client],Localitate,Telefon
FROM [Clienti Arad]
ORDER BY Localitate,[Denumire Client];
SGBD Access 2000: SQL: CROSSTAB
CROSSTAB Query permite ca pe lângă selectarea datelor şi
efectuarea calculelor în linie sau prin funcţii agregat, să grupeze
înregistrările pe linie (antete de rânduri) şi pe coloană (titluri de
coloană)
TRANSFORM funcţie
TRANSFORM funcţieagregat
agregatAS
ASalias
alias
Instrucţiunede
Instrucţiune deselecţie
selecţie
PIVOTcâmp
PIVOT câmpantet
antetcoloană
coloană;;

Funcţia agregat operează asupra înregistrărilor, prin definirea


instrucţiunii de selecţie;

Instrucţiunea de selecţie serveşte pentru a specifica antetele de rând ale


rezultatelor interogării;

Câmpul antet coloană constituie câmpul sau expresia ce se utilizează


în definirea antetelor de coloane, pentru setul de rezultate al interogării.
SGBD Access 2000:
SQL: CROSSTAB

TRANSFORM Sum([Cantitate]*[Pret f]) AS Valoare


SELECT Carti.[Denumire Carte]
FROM Facturi
INNER JOIN (Carti INNER JOIN [Continut Factura]
ON Carti.[Cod ISBN] = [Continut Factura].[Cod ISBN])
ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura]
WHERE ((([Continut Factura].Cantitate)>50))
GROUP BY Carti.[Denumire Carte]
PIVOT Month([Data Facturii]);
SGBD Access 2000: SQL: PARAMETERS

SELECT Facturi.[Numar Factura], Carti.[Cod ISBN], [Continut


Factura].Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] AS
Valoare, [Tastati Procent]*[Valoare]/100 AS Reducere
FROM Facturi
INNER JOIN (Carti INNER JOIN [Continut Factura] ON Carti.[Cod
ISBN] = [Continut Factura].[Cod ISBN]) ON Facturi.[Numar Factura]
= [Continut Factura].[Numar Factura]
WHERE (((Facturi.[Numar Factura])=[Tastati Nr_Fact])
AND ((Carti.[Cod ISBN])=[Tastati Cod_ISBN]));
SGBD Access 2000: SQL: Manipularea datelor:
Interogări cu acţiune de CREARE de tabele

SELECT[domeniu]
SELECT [domeniu](câmp1,
(câmp1,câmp2,....)
câmp2,....)
INTOnume
INTO numetabelă
tabelănouă
nouă
FROMnume
FROM numetabelă
tabelăsursă
sursă
[[WHERE
WHEREcriteriu
criteriude
deadăugare
adăugareaaînregistrărilor
înregistrărilorîn
întabela
tabelanouă];
nouă];

SELECT [Cod Fiscal], [Denumire Client], Adresa, Localitate


INTO [Clienti din Bucuresti]
FROM Clienti
WHERE (Localitate="Bucuresti");
SGBD Access 2000: SQL: Manipularea datelor
Interogări cu acţiune de ADĂUGARE de tupluri

INSERTINTO
INSERT INTOnume_tabelă
nume_tabelă(câmp1,
(câmp1,câmp2,....)
câmp2,....)
VALUES(valoare_1,
VALUES (valoare_1,valoare_2,.....);
valoare_2,.....);

INSERT INTO [Clienti Arad] ( [Cod Fiscal], [Denumire Client],


Adresa, Localitate )
VALUES ("r732469","SoftInfo SA","Str. Narciselor nr.5","Arad");
SGBD Access 2000: SQL: Manipularea datelor
Interogări cu acţiune de ADĂUGARE de tupluri

INSERTINTO
INSERT INTOnume_tabelă_destinaţie
nume_tabelă_destinaţie(câmp1,
(câmp1,câmp2,....)
câmp2,....)
SELECT[domeniu]
SELECT [domeniu](câmp1,
(câmp1,câmp2,....)
câmp2,....)
FROMnume
FROM numetabelă
tabelăsursă
sursă
[[WHERE
WHEREcriteriu
criteriude
deadăugare
adăugareaaînregistrărilor
înregistrărilorîn
întabela
tabeladestinaţie];
destinaţie];

INSERT INTO [Clienti din Bucuresti] ( [Cod Fiscal], [Denumire


Client], Adresa, Localitate )
SELECT [Cod Fiscal],[Denumire Client], Adresa,Localitate
FROM [Clienti Arad]
WHERE [Clienti Arad].[Denumire Client]) Like ("*SRL");
SGBD Access 2000: SQL: Manipularea datelor:
Interogări cu acţiune de ŞTERGERE de tupluri

DELETE**
DELETE
FROMnume_tabelă
FROM nume_tabelă
[[WHERE
WHEREcriteriu
criteriude
deştergere
ştergereaaînregistrărilor];
înregistrărilor];

DELETE *
FROM [Clienti Arad]
WHERE Telefon IS NULL;
SGBD Access 2000: SQL: Manipularea datelor:
Interogări cu acţiune de MODIFICARE a valorilor

UPDATEnume_tabelă
UPDATE nume_tabelă
SET nume_câmp=valoare_1
SET nume_câmp=valoare_1
[,nume_câmp=valoare_2].....
[,nume_câmp=valoare_2].....
[[WHERE
WHEREcriteriu
criteriude
deactualizare
actualizareaavalorilor
valorilortuplurilor];
tuplurilor];

UPDATE Carti
SET [Pret baza] = [Pret baza]*1.15
WHERE (([Denumire Carte])="Baze de date") AND
((Year([Data Aparitiei]))=2002);

S-ar putea să vă placă și