Proiect SGBD
Proiect SGBD
A EFECTUAT:
studentul grupei I1234
Ignat Nicolae
A
VERIFICAT:
profesorul
Veniamin
Bulat
Chiinu 2014
SARCINA
1. S se proiecteze baza de date Magazin It
2. S se aplice instruciunile SQL ctre baza de date:
a) Instruciunile limbajului de definire a datelor (LDD CREATE; ALTER; DROP)
b) Instruciunile limbajului de manipulare a datelor (LMD INSERT; UPDATE;
DELETE)
3. Interogarea bazei de date
a) Interogri simple
b) Subinterogri
c) Uniuni
d) Funcii de agregare
e) Combinarea interogrilor
4. Elaborarea proiectului
INTRODUCERE
Limbajul SQL (Structured Query Language) este un limbaj declarativ (neprocedural)
ce permite o comunicare complex i rapid a utilizatorului cu bazele de date, n funcie
de cerinele i restriciile informaionale ale acestuia. Prin acest limbaj utilizatorul descrie
informaiile pe care vrea s le obin n urma interogrii, fr a preciza algoritmii necesari
pentru obinerea rezultatelor dorite.
SQL a fost iniial dezvoltat la IBM de ctre Donald D. Chamberlin i Raymond F. Boyce
n anul 1974. Iniial, numele era SEQUEL (Structured Query Language), avea ca scop
manipularea i regsirea datelor stocate n bazele de date relaionale IBM.
SQL face parte din categoria limbajelor de aplicaii (orientate pe mulimi) pentru baze
de date relaionale. Este un limbaj standard iar principalele sale instruciuni sunt
recunoscute de ctre mai multe SGBD-uri, ca de exemplu: Oracle, Microsoft Office Access,
MySQL, DB2, Visual FoxPro.
c)laptop_uri(Cod,Model,Viteza,Ram,Hd,Ecran,Pret)
d)imprimante(Cod,Model,Color,Tip,Pret)
O baz de date conine cel puin un tabel identificat prin nume. Tabelele conin
nregistrri cu date.
Pentru a crea un tabel, utilizai comanda CREATE TABLE, care are urmtoarea
sintax:
CREATE TABLE nume_tabel(
nume_coloana1 tip_date,
nume_coloana2 tip_date,
nume_coloana3 tip_date,
....
);
Unde nume_tabel este numele tabelului, nume_coloanaX este numele unei
coloane iar tip_date este tipul de date al coloanei respective. Se poate specifica un
numr infinit de coloane.
Elemente obligatorii la crearea unui tabel sunt:
comanda CREATE TABLE
numele tabelului. Dac numele tabelului conine spaii, el trebuie inclus n
ghilimele ' '
numele atributelor i respectiv tipul lor de date (int, char(x), double(x, y), text,
etc.)
n afara tipului de date, intre paranteze, putei specifica constrngerile opionale ale
unei coloane:
a) NOT NULL Fiecare rnd trebuie sa conin o valoare a coloanei asociate.
Adic valorile nule nu sunt permise.
b) NULL Sunt acceptate valorile nule.
TABLE
TABLE
TABLE
TABLE
INTO produse(Producator,Model,Tip)
('B','1121','PC');
INTO produse(Producator,Model,Tip)
('A','1232','PC');
INTO produse(Producator,Model,Tip)
('A','1233','PC');
INTO produse(Producator,Model,Tip)
('E','1260','PC');
INTO produse(Producator,Model,Tip)
('A','1276','Imprimante');
INTO produse(Producator,Model,Tip)
('D','1288','Imprimante');
INTO produse(Producator,Model,Tip)
('A','1298','Laptop_uri');
INTO produse(Producator,Model,Tip)
('C','1321','Laptop_uri');
INTO produse(Producator,Model,Tip)
('A','1401','Imprimante');
INTO produse(Producator,Model,Tip)
('A','1408','Imprimante');
INTO produse(Producator,Model,Tip)
('D','1433','Imprimante');
INTO produse(Producator,Model,Tip)
('E','1434','Imprimante');
INTO produse(Producator,Model,Tip)
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
('B','1750','Laptop_uri');
INTO produse(Producator,Model,Tip)
('A','1752','Laptop_uri');
INTO produse(Producator,Model,Tip)
('E','2111','PC');
INTO produse(Producator,Model,Tip)
('E','2112','PC');
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(1,'1232',500,64,5,'12x',600);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(2,'1121',750,128,14,'40x',850);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(3,'1233',500,64,5,'12x',600);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(4,'1121',600,128,14,'40x',850);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(5,'1121',600,128,8,'40x',850);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(6,'1233',750,128,20,'50x',950);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(7,'1232',500,32,10,'12x',400);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(8,'1232',450,64,8,'24x',350);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(9,'1232',450,32,10,'24x',350);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(10,'1260',500,32,10,'12x',350);
INTO pc_uri(Cod,Model,Viteza,Ram,Hd,Cd,Pret)
(11,'1233',900,128,40,'40x',980);
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INTO laptop_uri(Cod,Model,Viteza,Ram,Hd,Pret,Ecran)
(1,'1298',350,32,4,700,11);
INTO laptop_uri(Cod,Model,Viteza,Ram,Hd,Pret,Ecran)
(2,'1321',500,64,8,970,12);
INTO laptop_uri(Cod,Model,Viteza,Ram,Hd,Pret,Ecran)
(3,'1750',750,128,12,1200,14);
INTO laptop_uri(Cod,Model,Viteza,Ram,Hd,Pret,Ecran)
(4,'1298',600,64,10,1050,15);
INTO laptop_uri(Cod,Model,Viteza,Ram,Hd,Pret,Ecran)
(5,'1752',750,128,10,1150,14);
INTO laptop_uri(Cod,Model,Viteza,Ram,Hd,Pret,Ecran)
(6,'1298',450,64,10,950,12);
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INSERT
VALUES
INTO imprimante(Cod,Model,Color,Tip,Pret)
(1,'1276','nu','Laser',400);
INTO imprimante(Cod,Model,Color,Tip,Pret)
(2,'1433','da','Jet',270);
INTO imprimante(Cod,Model,Color,Tip,Pret)
(3,'1434','da','Jet',290);
INTO imprimante(Cod,Model,Color,Tip,Pret)
(4,'1401','nu','Matrix',150);
INTO imprimante(Cod,Model,Color,Tip,Pret)
(5,'1408','nu','Matrix',270);
INTO imprimante(Cod,Model,Color,Tip,Pret)
(6,'1288','nu','Laser',400);
ACTUALIZAREA DATELOR
Instruciunea UPDATE este utilizat pentru actualizarea (modificarea) valorii unor
cmpuri dintr-un tabel.
Sintaxa instruciunii:
UPDATE nume_tabel
SET nume_coloana1 = valoare_noua1,
nume_coloana2 = valoare_noua2,
...
nume_coloanaX = valoare_nouaX
WHERE nume_coloana = valoare
Exemple:
-- Actualizarea cmpului pret din tabelul Comenzi. Micorarea preului
cu 10% unde preul iniial este mai mare ca 10,000:
UPDATE Comenzi
SET pret = pret - (pret * 0.1)
WHERE pret > 10000
1. S se gseasc modelul, viteza procesorului si capacitatea discului dur pentru toate pc-urile
care cost mai putin de 500$. Schema rezultatului a fi atva fi Model, Viteza i Hd.
use SGBD;
SELECT Model,Viteza,Hd
FROM
Laptopuri WHERE
pret>1000;
WHERE
color='da';
PC_uri WHERE
(pret<600)and(cd='12x'or cd='24x');
ON
8. S se gseasc productorii care vnd laptopuri sau imprimante, dar nu vnd pc-uri.
USE SGBD;
SELECT
Producator,Tip
FROM
Tip='Imprimante')and(Tip!='PC');
Produse
10
WHERE
(Tip='Laptop_uri'or
INNERJOIN
pc_uri
ON
10. S se gseasc imprimantele cu cel mai nalt pre. S se afieze Model, Pret.
USE SGBD;
SELECT Model,Pret From Imprimante Where Pret=(SelectMAX(Pret)From Imprimante);
14.S se gseasc modelele si producatorii pc-urilor care au o viteza mai mare decit cel mai
puternic laptop.
USE SGBD;
SELECT
Produse.Model,Produse.Producator
FROM
produse INNERJOIN pc_uri
produse.Model=pc_uri.ModelWHEREpc_uri.Viteza>(SelectMAX(viteza)FROMLaptopuri);
ON
15.S se gseasc productorii pc-urilor ce au Ram-ul mai mare dect media Ram-ului
laptopurilor. S se afiseze producatorul si modelul pc-urilor.
USE SGBD;
SELECT
produse.Producator,
produse.Model
FROM
produseINNERJOIN
pc_uri
pc_uri.Model=produse.ModelWHERE pc_uri.Ram>(SelectAVG(ram)from Laptopuri);
ON
16. S se gseasc modelele laptopurilor cu pretul mai mare dect pretul dublu al celui ma ieftin
pc. Sa se afiseze modelul laptopului si pretul acestuia.
USE SGBD;
SELECT Model,PretFROM Laptopuri
WHERE Pret>(SelectMIN(Pret)FROM pc_uri)*2;
17. Pentru fiecare valoare a vitezei, s se gseasc pretul mediu al pc-urilor. S se afiseze Viteza
si Pret_mediu.
11
USE SGBD;
SELECT Viteza,AVG(Pret)[Pret Mediu]
FROM pc_uriGroupby Viteza;
18. S se gseasc capacittile discurilor dure, care coincid cu 2 sau mai multe pc-uri. S se
afiseze Hd.
USE SGBD;
SELECT Hd,COUNT(Hd)[Nr. de pc-uri cu viteza data]
FROM pc_uriGroupby Hd HAVINGCOUNT(Hd)>=2;
20. S se gseasc laptopurile, a cror vitez este mai mica dect la orice pc-u. S se afiseze:Tip,
Model, Viteza.
USE SGBD;
SELECT produse.Tip,Laptopuri.Model,Viteza
FROM Laptopuri INNERJOIN produse ON Produse.Model=Laptopuri.Model
WHERE Laptopuri.Viteza<(SelectMIN(Viteza)from pc_uri);
CONCLUZIE
In urma realizarii acestui raport am aplicat cunostintele teoretice in practica
privind creare, popularea, interogarea si intretinerea unei baze de date.
Am facut cunostinta
manipulare cu BDR.
cu
limbajul
SQL
12
care
este
un limbaj
standart
de
Datorita cursului
13