Sunteți pe pagina 1din 28

CREAREA TABELELOR SQL

1. Tabelul Farmacie

2. Tabelul Angajat

3. Tabelul Afectiuni

4. Tabelul Medicament

5. Tabelul Vnzare

6. Tabelul Client

7. Tabelul Factur

7. Tabelul Coninut

INSERT-URI
FARMACIE
INSERT INTO Farmacie(cod_farmacie,denumire,adresa,telefon)
Values
(105,'DONA','str. BANATULUI,nr.17',0372407105),
(210,'CATENA','str. CRINULUI,nr.23',0372407001),
(30,'EVA','str. EGALITATII,nr.3',0372407008),
(406,'EVA','str. GH. GOJA,nr.5',0372407149),
(513,'SENSIBLU','str. RAZBOIENI,nr.45',0372407190),
(62,'DONA','str. VICTORIEI,nr.21',0372407052),
(723,'HELP MED','str. TEILOR,nr.102',0372407074),
(89,'CATENA','bd. REPUBLICII,nr.2',0372569256),
(93,'SENSIBLU','str. CUZA VODA,nr.13',0347635241),
(101,'CATENA','bd. N. BALCESCU,nr.7',0347968684)

ANGAJAT
INSERT INTO Angajat(cod_angajat,nume,prenume,adresa,data_nasterii,salariu,cod_farmacie)
VALUES
(1684,'VOICAN','LUCIANA','PITESTI,cart TRIVALE','29-AUG-1994',2300,30)
(2586,'GROSU','MIRUNA','PITESTI,cart CRAIOVEI','05-MAY-1990',2290,210)
(3646,'POPESCU','ANDREI','PITESTI,cart PRUNDU','03-JUN-1967',3135,513),
(4231,'PETRACHE','MIHAI','PITESTI,cart RAZBOIENI','10-AUG-1991',2700,62),
(5941,'NEATA','ALEXANDRA','PITESTI,cart PRUNDU','18-JUL-1994',2000,513),
(6587,'ILINA','CATALIN','PITESTI,cart TRIVALE','18-MAY-1994',1700,406),
(7645,'RADOMIR','CORNEL','PITESTI,cart PETROCHIMISTILOR','13-DEC-1985',1500,30),
(8952,'NEACSA','AURELIA','PITESTI,cart PRUNDU','20-APR-1992',1655,513),
(9653,'CHIRITA','ALEXANDRA','PITESTI,cart GAVANA','26-SEP-1986',1000,210),
(1028,'SUTA','LARISA','PITESTI,cart RAZBOIENI','15-OCT-1987',2422,62),
(1165,'TUDOR','MANUELA','PITESTI,cart TRIVALE','15-OCT-1987',1600,101),
(1298,'GRUIA','MADALINA','PITESTI,cart CRAIOVEI','17-DEC-1980',1233,93),
(1345,'COMAN','ANDREEA','PITESTI,cart FRATII GOLESTI','01-MAR-1983',1612,89),
(1495,'BASARABIE','ELENA','PITESTI,cart T VLADIMIRESCU','27-JUN-1994',2700,723),
(1527,'IONICA','CAMELIA','STEFANESTI','25-FEB-1980',1800,105),
(1639,'NICHIFOR','FLORIN','PITESTI,cart POPA SAPCA','29-JUL-1994',1600,101),
(1724,'BUSCA','ALIN','PITESTI,cart GAVANA','25-MAY-1986',2000,89),
(1865,'STANCU','ALEXANDRA','PITESTI,cart FRATII GOLESTI','16-APR-1981',2561,93),
(1963,'LUNGU','CRINA','PITESTI,cart T VLADIMIRESCU','23-APR-1983',2190,406),
(2030,'NEGRU','BOGDAN','PITESTI,cart RAZBOIENI','26-AUG-1991',1600,723)

AFECTIUNI
INSERT INTO Afectiuni(cod_afectiune,descriere)
VALUES
(101,'INIMA'),
(235,'STOMAC'),
(305,'MEMORIE'),
(494,'DURERI DE CAP'),
(573,'RACEALA/GRIPA'),
(606,'INFECTII'),
(798,'ACNEE'),

MEDICAMENT
INSERT INTO Medicament(cod_medicament,denumire,pret,cod_afectiune)
VALUES
(153,'COLDREX',16,573),
(148,'STREPSILS',15,573),
(131,'COLD DALERON',18,573),
(86,'NUROFEN',20,573),
(219,'HUMEX',20,573),
(223,'ASPIRIN PLUS C',29,573),
(25,'THERAFLU SINUS',30,573),
(126,'REDIGEST',12,235),
(178,'BICARBILIN FORTE',8,235),
(111,'TRIFERMENT',12,235),
(192,'MAALOX',21,235),
(234,'RENNIE SPEARMINT',14,235),
(106,'GINKOPRIM',36,305),
(54,'LECITINA',51,305),
(39,'ACUTIL SUPLIMENT',57,305),
(10,'MINIMARTIENI',38,305),
(165,'PHARMEX NEURO ACTIV',37,305),
(242,'PERSEN',18,305),
(94,'ASPENTER',15,110),
(72,'ASPACARDIN',25,110),
(200,'CARDIOLIN',30,110),
(68,'IBUPROFEN',17,494),
(49,'PADUDEN',20,494),
(183,'IBALGIN RAPID',22,494),
(251,'BEPANTHEN PLUS',32,606),
(266,'URINAL',48,606),
(279,'OROFAR',35,606),
(282,'BANEOCIN',29,606),
(299,'SKINOREN',45,798),

(301,'BREVOXYL',55,798),
(312,'ERYFLUID',50,798),
(328,'MINOZ',120,798)

VNZARE
INSERT INTO vnzare(ID_vnzare,cod_farmacie,cod_medicament,cant_disponibil)
VALUES
(1,105,153,13)
(2,513,148,54),
(3,210,131,94),
(4,30,86,21),
(5,406,219,31),
(6,62,223,26),
(7,723,25,3),
(8,89,126,11),
(9,93,178,60),
(10,101,111,5),
(11,105,192,50),
(12,62,234,29),
(13,89,106,8),
(14,406,54,53),
(15,93,39,45),
(16,101,10,20),
(17,210,165,12),
(18,723,242,19),
(19,513,94,6),
(20,30,72,18),
(21,105,200,13),
(22,210,68,63),
(23,30,49,18),
(24,406,183,5),
(25,513,251,6),
(26,62,266,27),
(27,723,279,3),
(28,89,282,11),
(29,93,299,10),

(30,101,301,5),
(31,105,328,46),
(32,210,86,61),
(33,30,106,36),
(34,406,328,5),
(35,513,301,6),
(36,62,279,2),
(37,723,219,3),
(38,89,200,12),
(39,93,153,100),
(40,101,148,15)

CLIENTI
INSERT INTO Client(cod_client,nume,adresa)
VALUES
(1,'POPESCU MIHAELA','PITESTI'),
(2,'GHEBARU PATRIC','TARGU-JIU'),
(3,'NEACSU SIMONA','BUCURESTI'),
(4,'RIZEA ANDREEA','PITESTI'),
(5,'BADOI IULIA',NULL),
(6,'LAZARESCU ANDREI','MIOVENI'),
(7,'UDEANU MARIUS','MIOVENI'),
(8,'ANA REMUS','COLIBASI'),
(9,'STAN MAGDALENA','MIOVENI'),
(10,'DRAGUT OLIVIAN',NULL)

FACTUR
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(21,2,93,1298,'17-DEC-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(32,3,62,4231,'27-MAR-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(43,4,101,1639,'04-FEB-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(54,5,93,2586,'14-AUG-13'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(65,6,406,1963,'18-MAY-13'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(76,7,723,1495,'12-FEB-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(87,8,89,1724,'03-MAR-13'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(98,9,513,2586,'25-JUN-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(109,10,30,7645,'27-SEP-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(113,7,30,3646,'06-NOV-13'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(127,4,210,5941,'17-AUG-13'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(136,2,101,1165,'19-DEC-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(145,9,62,1028,'18-NOV-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)

VALUES
(154,3,513,8952,'06-SEP-14'),
INSERT INTO Factur(ID_factur,cod_client,cod_farmacie,cod_angajat,data)
VALUES
(105,1,89,2586,'03-FEB-14')

CONINUT
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(1,105,40,1);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(2,136,17,3);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(3,113,20,2);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(4,32,5,1);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(5,98,2,3);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(6,65,6,1);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(7,76,7,2);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(8,87,13,3);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(9,21,15,1);
INSERT INTO Coninut(ID_conine,ID_factur,ID_vnzare,cantitate)
VALUES(10,54,4,5);

INTEROGRI
1. Afieaz numele ntreg al angajailor
SELECT nume, prenume from Angajat as "NUME COMPLET"

2. Medicamente a cror denumire ncepe cu litera A sau M


SELECT denumire from Medicament where denumire like '[AM]%';

3. Selecteaz medicamentele disponibile pentru tratarea gripei.


SELECT cod_medicament, denumire from Medicament
where cod_afectiune=573

4.Ordoneaz numele clienilor care nu ncep cu litera P.


SELECT nume
FROM Client
WHERE nume NOT LIKE 'P%'
ORDER BY nume;

5.Selecteaz ci angajai s-au nscut n acelai an.


SELECT COUNT(nume) as "Nr. angajati",
year(data_nasterii) as "Anul naterii"
FROM Angajat
GROUP BY year(data_nasterii);

6.Selecteaz toate facturile eliberate din feb. 2013 pn n dec.


2013.
SELECT *
FROM Factur
WHERE data BETWEEN '01-JAN-13' AND '31-DEC-13'

7. Afieaz medicamentul cu preul cel mai mare.


SELECT denumire,cod_medicament
FROM Medicament
WHERE pre=(SELECT MAX(pre)
FROM Medicament);

8.Selecteaz clienii a cror adres nu este cunoscut.


SELECT nume
FROM client
WHERE adresa IS NULL;

9.Selecteaz codul facturilor care au cantitatea minim.


SELECT ID_factur
FROM Conine
WHERE cantitate=(SELECT MIN(cantitate)
FROM Conine);

10.Calculeaz valoarea total a produselor disponibile n farmacia cu numrul 406.


SELECT SUM(c.cantitate*m.pre) AS "Valoare total"
FROM Vnzare AS v, Conine AS c, Medicament AS m
WHERE v.cod_farmacie=406;

11.Selecteaz angajaii care au salariul mai mare dect cel mediu.


SELECT nume+' '+prenume AS 'Nume Complet', salariu
FROM Angajat
WHERE salariu>(SELECT AVG(salariu)
FROM Angajat)
ORDER BY [Nume Complet];

12.Calculeaz numrul de facturi eliberate de fiecare angajat.


SELECT cod_angajat,COUNT(ID_factur)
FROM Factur
GROUP BY cod_angajat;

13.Afieaz angajaii ce au eliberat cel puin 2 facturi.


SELECT cod_angajat,COUNT(ID_factur)"NR FACTURI"
FROM Factur
GROUP BY cod_angajat
HAVING COUNT(ID_factur)>1;

14. Selecteaz medicamentele care au preul mai mare dect preul maxim al
medicamentelor pentru inim.
SELECT cod_medicament,pre
FROM Medicament
WHERE pre>ALL(SELECT cod_afeciune
FROM Afeciuni
WHERE cod_afeciune=110);

15. Selecteaz cantitatea ce este mai mic dect cea mai mare cantitate disponibil de
medicamente din farmacia cu numrul 89.
SELECT cod_medicament,cod_farmacie
FROM Vnzare
WHERE cant_disponibil<ANY(SELECT cant_disponibil
FROM Vnzare
WHERE cod_farmacie=89);

16. Selecteaz numele, prenumele si codul angajailor care nu au eliberat nicio factur.
SELECT nume,prenume,cod_angajat
FROM Angajat AS a
WHERE NOT EXISTS (SELECT ID_factur
FROM Factur AS f
WHERE a.cod_angajat=f.cod_angajat);

17. Selecteaz numele angajailor si datele n care acetia au eliberat facturi.


SELECT nume+' '+prenume AS 'Angajat',data AS 'Data eliberrii facturii'
FROM
Angajat AS A
INNER JOIN
Factur AS B on A.cod_angajat=B.cod_angajat;

18. Selecteaz numele angajailor i eventualele date de eliberare a facturilor.


SELECT nume+' '+prenume AS 'Angajat',data AS 'Data eliberrii facturii'
FROM
Angajat AS A
LEFT JOIN
Factur AS B on A.cod_angajat=B.cod_angajat;

19 .Afieaz data de pe factur mpreun cu adresa corespunztoare.


SELECT adresa,data
FROM
Client AS A
RIGHT JOIN
Factur AS B on A.cod_client=B.cod_client;

20. Schimb data de facturare.


UPDATE Factur
SET data=NULL
WHERE cod_client=2

21.Selecteaz toate datele mpreun cu toate adresele.


SELECT adres,data
FROM
Client AS A
JOIN
Factur AS B on A.cod_client=B.cod_client;

22.Mrirea salariilor angajailor ce au codul 3646, 4231, 2586, 1648.


SELECT cod_angajat,
CASE
WHEN cod_angajat=3646 THEN salariu+salariu*0.3
WHEN cod_angajat=4231 THEN salariu+salariu*0.4
WHEN cod_angajat=2586 THEN salariu+salariu*0.2
WHEN cod_angajat=1684 THEN salariu+salariu*0.1
END
FROM Angajat;

23.Selecteaz angajaii ce lucreaz n farmaciile ce au codurile 513 i respectiv 93.


SELECT nume+' '+prenume AS Angajat,adres,cod_farmacie
FROM Angajat
WHERE cod_farmacie IN (513,93);

24.Selecteaz medicamentele disponibile pentru dureri de cap i infecii.


SELECT cod_medicament, denumire
FROM Medicament
WHERE cod_afectiune=494
UNION
SELECT cod_medicament, denumire
FROM Medicament
WHERE cod_afectiune=606;

25.Selecteaz medicamentele care au fost vndute att n farmacia 210 ct i n farmacia


30.
SELECT cod_medicament
FROM Vnzare
WHERE cod_farmacie=210
INTERSECT
SELECT cod_medicament
FROM Vnzare
WHERE cod_farmacie=30;

26.Selecteaz subtotaluri doar pentru o parte din combinaiile posibile.


SELECT nume,adres,
SUM(salariu) AS [Total salarii],
AVG(salariu) AS [Salariu mediu],
MIN(salariu) AS [Salariu minim],
MAX(salariu) AS [Salariu maxim]

FROM Angajat
GROUP BY nume,adres WITH ROLLUP;

27. Selecteaz subtotaluri pentru toate combinaiile posibile de grupri specificate n


clauza GROUP BY, precum i un total general.
SELECT nume,adresa,
SUM(salariu) AS [Total salarii],
AVG(salariu) AS [Salariu mediu],
MIN(salariu) AS [Salariu minim],
MAX(salariu) AS [Salariu maxim]
FROM Angajat
GROUP BY nume,adresa WITH CUBE;

28.Indexarea numelui i prenumelui din tabelul Angajat.


CREATE INDEX Ix_NumeComplet ON Angajat(nume,prenume);

29. Pargurgere dup indexul Ix_NumeComplet.


SELECT *
FROM Angajat
WHERE nume='GROSU' AND prenume='MIRUNA';

30. Eliminarea unui index.


DROP INDEX Angajat.Ix_NumeComplet;

31. Crearea unei vederi vSalariai cu numele, prenumele, adresa i codul angajailor ce
lucreaz la farmaciiile ce au codul ntre 10 i 100.
Create view vSalariai (cod_angajat,nume,prenume,adresa)
AS SELECT cod_angajat,nume,prenume,adresa
FROM Angajat
WHERE cod_farmacie BETWEEN 10 AND 100;

32. Operaii asupra vederii vSalariai.


UPDATE vSalariai
SET prenume='ELENA'
where cod_angajat=1028

SELECT COUNT(adresa)
FROM vSalariai
WHERE adresa LIKE 'PITESTI,cart GAVANA%';
Au aceeasi adresa

SELECT cod_angajat,LEN(adres) AS 'Lungimea adresei'


FROM vSalariai;

33.Instruciuni de control.
DECLARE @NumeleMeu VARCHAR(50)
SET @NumeleMeu='VOICAN MARIA - LUCIANA'
PRINT @NumeleMeu

34.tergerea rndurilor din tabelul Coninut al cror id de factur este mai mic dect
100.
DELETE Coninut
WHERE ID_factur<100;

35.terge toate nregistrrile rmase n tabelul Coninut.


TRUNCATE TABLE Coninut;

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