Sunteți pe pagina 1din 4

D:\Downloads\SQLQuery1 - Seminar 1, 2, 3, 4, 5, 6, 7.

sql 1

/*************** SEMINAR NR. 1 ***************/


/* Help */
-- INT IDENTITY = pleaca de la 1 din 1 in 1 (auto number)
-- VARCHAR(x)
-- DATETIME pentru a afisa si ora
-- DATE simplu doar pt. data
-- ; nu este necesar
-- pentru a scrie varchar, text nu folosim < "(ghilimele) > ci < '(apostrof) >

/* My DB */
-- CREATE DATABASE C637_MURESAN_CRISTINA_LAURA
-- USE C637_MURESAN_CRISTINA_LAURA

-- CREATE TABLE Prezenta(ID INT IDENTITY PRIMARY KEY, Nume VARCHAR(30), Prenume VARCHAR(30), Grupa INT, Data
DATETIME);
-- INSERT INTO Prezenta(Nume, Prenume, Grupa, Data) VALUES ("Muresan", "Cristina-Laura", 637, GETDATE( ));
-- UPDATE Prezenta SET Grupa = 613 WHERE Nume = 'Muresan'

/* In class DB */
-- USE C637
-- INSERT INTO Prezenta VALUES('Muresan', 'Cristina Laura', 637, GETDATE( ));
-- SELECT * FROM Prezenta ORDER BY Nume
-- DELETE FROM Prezenta WHERE IDPrezenta IN(12, 14); = pentru a sterge dintr-un tabel

/* Requests */
-- Afisati lista studentilor din fostele grupe 611 si 613 a caror nume incepe cu "M"
-- SELECT Nume, Prenume, Grupa FROM Prezenta WHERE LEFT(Nume, 1) = 'M' AND Grupa IN(613, 611);
-- SELECT Nume, Prenume, Grupa FROM Prezenta WHERE Nume LIKE 'M%' AND Grupa = 613 OR Grupa = 611

/*************** SEMINAR NR. 2 ***************/

/* Help */
-- DECIMAL SAU NUMERIC INSEAMNA ACELASI LUCRU DECIMAL(CATE CIFRE IN TOTAL, CATE CIFRE DUPA VIRGULA) Ex: 0.02
(3 cifre, iar dupa virgula 2 [02])
-- TREBUIE FOLOSITE < ON DELETE SET NULL ON UPDATE CASCADE > intotdeauna cand avem FOREIGN KEY (cheie
externa)
-- IDENTITY (DE LA CAT SA INCEAPA, DIN CAT IN CAT SA SARA)

-- USE C637_MURESAN_CRISTINA_LAURA
-- CREATE TABLE CategoriiProduse(CodCategorie CHAR(2) PRIMARY KEY, DenumireCategorie NVARCHAR(50) NOT NULL,
GrupaProduse NVARCHAR(50) NOT NULL)
-- INSERT INTO CategoriiProduse VALUES('IT', 'Produse IT', 'Electronice')
-- INSERT INTO CategoriiProduse VALUES('PA', 'Panificatie', 'Alimentare')

/*
CREATE TABLE Produse(CodProdus BIGINT IDENTITY PRIMARY KEY, CodIntern VARCHAR(30), DenumireProdus
NVARCHAR(50) NOT NULL, UM VARCHAR(10) DEFAULT 'kg',
Descriere NVARCHAR(250), TermenValabilitate INT, Perisabil BIT, CodCategorie CHAR(2) FOREIGN KEY
REFERENCES CategoriiProduse(CodCategorie)
ON DELETE SET NULL ON UPDATE CASCADE)

CREATE TABLE Vanzatori(Marca INT PRIMARY KEY, CNP CHAR(13), Nume NVARCHAR(30), Prenume NVARCHAR(30),
DataAngajare DATE DEFAULT GETDATE( ),
ComisionVanzari DECIMAL(3, 2), Salariu MONEY)

CREATE TABLE BonuriDeCasa(NrBon BIGINT IDENTITY(100, 1) PRIMARY KEY, DataOraBon DATETIME DEFAULT GETDATE(
), Marca INT FOREIGN KEY REFERENCES
Vanzatori(Marca))

CREATE TABLE LegaturaBonuriProduse(ID BIGINT IDENTITY PRIMARY KEY, CodProdus BIGINT FOREIGN KEY
REFERENCES Produse(CodProdus),
NrBon BIGINT FOREIGN KEY REFERENCES BonuriDeCasa(NrBon), Cantitate INT, PretVanzare INT)

-> in loc de INT era bine sa pun DECIMAL(8, 2) in ceea ce priveste Cantitatea
-> in loc de INT era bine sa pun MONEY in ceea ce priveste PretVanzare
*/

/*************** SEMINAR NR. 3 ***************/

-- CREATE DATABASE MAGAZIN_637_MURESAN_CRISTINA_LAURA


-- USE MAGAZIN_637_MURESAN_CRISTINA_LAURA
D:\Downloads\SQLQuery1 - Seminar 1, 2, 3, 4, 5, 6, 7.sql 2
-- SELECT * FROM Vanzatori
-- LEN (LENGTH) = Lungime caractere text LEN(text) = 4 (4 caractere)

/* Restrictii */
-- Adaugati o restrictie prin care salariul de incadrare trebuie sa fie intre 999 si 2500.

/*
ALTER TABLE Vanzatori
ADD CONSTRAINT IncadrareSalariu
CHECK(SalariuIncadrare >= 999 AND SalariuIncadrare <= 2500)
*/

-- Realizati o restrictie prin care sa se verifice daca CNP are 13 caractere. Restrictie de tip CHECK.

/*
ALTER TABLE Vanzatori
ADD CONSTRAINT VerifCNP
CHECK(LEN(CNPVanzator) = 13)
*/

-- In tabelul Vanzatori nu se pot sterge cei cu salarii sub 1700. Restrictie de tip TRIGGER.

/*
CREATE TRIGGER NU_STERGE_SUB_1700 ON Vanzatori FOR DELETE AS IF EXISTS(SELECT * FROM DELETED WHERE
SalariuIncadrare < 1700)
BEGIN RAISERROR('Nu se pot sterge cei cu salarii sub 1700', 1, 1) ROLLBACK TRANSACTION END
*/

-- Realizati un TRIGGER care sa nu permita stergerea platilor efectuate cu cardul.

/*
CREATE TRIGGER NU_STERGE_PLATA_CARD ON Plati FOR DELETE AS IF EXISTS(SELECT * FROM DELETED WHERE TipPlata
= 'Card')
BEGIN RAISERROR('Nu se pot sterge cei ce au platit cu cardul !', 1, 1) ROLLBACK TRANSACTION END
*/

-- Nu se pot adauga sau modifica sume platite cash cu suma platita mai mare de 3000

/*
CREATE TRIGGER NU_STERGE_SUMA ON Plati FOR UPDATE, INSERT AS IF EXISTS(SELECT * FROM INSERTED WHERE
TipPlata = 'Cash' AND SumaPlatita > 3000)
BEGIN RAISERROR('Nu se pot adauga/modifica persoane cu plati mai mari de 3000 !', 1, 1) ROLLBACK
TRANSACTION END
*/

/*************** SEMINAR NR. 4 ***************/

-- USE MAGAZIN_637_MURESAN_CRISTINA_LAURA
-- SELECT * FROM PLATI

/*
Trigger: nu se pot micsora sumele pt. platile efectuate cu cardul.

CREATE TRIGGER NU_MICSORA_SUMA ON Plati FOR UPDATE AS IF EXISTS(SELECT * FROM DELETED, INSERTED
WHERE Inserted.TipPlata = 'Card' AND Deleted.SumaPlatita > Inserted.SumaPlatita AND Deleted.IdPlata =
Inserted.IdPlata)
BEGIN RAISERROR('Nu se poate micsora suma platita !', 1, 1) ROLLBACK TRANSACTION END
*/

-- SELECT * FROM VANZATORI


/*
Trigger: nu se pot micsora salariile din tabelul Vanzatori

CREATE TRIGGER NU_MICSORA_SALARIILE ON Vanzatori FOR UPDATE AS IF EXISTS(SELECT * FROM DELETED, INSERTED
WHERE Deleted.SalariuIncadrare > Inserted.SalariuIncadrare AND Deleted.MarcaVanzator = Inserted.
MarcaVanzator)
BEGIN RAISERROR('Nu se poate micsora salariile !', 1, 1) ROLLBACK TRANSACTION END
*/

-- Trigger: care sa copieze toate platite sterse intr-un tabel numit ArhivaPlati: IdPlata, SumaPlatita,
DataStergere
D:\Downloads\SQLQuery1 - Seminar 1, 2, 3, 4, 5, 6, 7.sql 3
-- CREATE TABLE ArhivaPlati(IdPlata INT PRIMARY KEY, SumaPlatita Money, DataStergere DateTime)

/*
CREATE TRIGGER AdaugArhiva ON Plati FOR DELETE AS INSERT INTO
ArhivaPlati SELECT IdPlata, SumaPlatita, GETDATE() FROM DELETED
*/

-- SELECT * FROM VANZATORI


-- Select: Calculati cate saptamani a lucrat in magazin fiecare vanzator

/*
SELECT Nume, Prenume, DataAngajarii, DateDiff(WEEK, DataAngajarii, GETDATE())
AS VechimeSaptamani, DateAdd(QUARTER, 30, DataAngajarii) AS Trimestre FROM Vanzatori
*/

-- Sa se afiseze numele si prenumele vanzatorilor care au eliberat bonuri de casa in anul 2014 dupa ora 18
/*
SELECT Nume, Prenume, DataOraBon FROM Vanzatori INNER JOIN BonuriDeCasa
ON Vanzatori.MarcaVanzator = BonuriDeCasa.MarcaVanzator
WHERE YEAR(DataOraBon) = 2014 AND DATEPART(HOUR, DataOraBon) >= 18
*/

/*************** SEMINAR NR. 6 ***************/

/* Cerinta: Afisati produsele a caror denumire


% - procentul tine locul de oricate caractere
_E% = orice litera pe prima pozitie E pe a doua
T_ = pen-ultimul caracter
^ = e ca si NOT
[^T]_ = pen-ultimul caracter sa nu fie T

/* Fara cele care au pen-ultimul caracter din denumire "t" */

SELECT CodIntern, Denumire, TermenValabilitate FROM Produse


WHERE Denumire LIKE '[BMP]E%[^T]_'
*/

/* Cerinta: Toate produsele a caror denumire incepe cu "SOS" sau "CA" si au pen-ultimul caracter din codul
intern 6

SELECT CodIntern, Denumire, TermenValabilitate FROM Produse


WHERE (Denumire LIKE 'SOS%' OR Denumire LIKE 'CA%') AND CodIntern LIKE '%[64]_'

CREATE VIEW SelectieProduse AS


SELECT CodIntern, Denumire, TermenValabilitate FROM Produse
WHERE (Denumire LIKE 'SOS%' OR Denumire LIKE 'CA%') AND CodIntern LIKE '%[64]_'

Ca sa ne verificam la examen sa dam un select la view.


*/

/*
VIEW:
1. Cantitatea totala vanduta din fiecare produs dupa 1/1/2015 (SUM - GROUP BY)
2. Valoare totala vanzari pe fiecare categorie de produse intre 20.10.2014 si 30.11.2015 in lei si in
dolari la un curs de 4,55.
3. Cate bonuri a realizat fiecare vanzator pana la 1/1/2016
*/

/*************** SEMINAR NR. 7 ***************/

-- USE MAGAZIN_637_MURESAN_CRISTINA_LAURA

/* Cerinte:
1. Realizati un VIEW pentru numele vanzatorilor care nu au realizat nicio comanda (nu au niciun bon de
casa).
2. Care sunt produsele care nu au fost vandute niciodata.
3. Care sunt produsele care nu s-au vandut in anul 2015.
*/

-- Cerinte Test:
D:\Downloads\SQLQuery1 - Seminar 1, 2, 3, 4, 5, 6, 7.sql 4
/*
USE TEST637_MURESANCRISTINALAURA
CREATE TABLE Rapoarte(NrRaport INT PRIMARY KEY, DataRaport DATETIME, Observatii VARCHAR(60), Suma Money)
ALTER TABLE Rapoarte
ADD CONSTRAINT IncadrareData
CHECK(DataRaport >= '01/01/2008')
*/

--CREATE TRIGGER NU_STERGE_CONTRACTE ON Incasari


--FOR DELETE AS IF EXISTS(SELECT * FROM DELETED WHERE NrContract IN(SELECT NrContract FROM Contracte WHERE
YEAR(DataFinalizare) = 2007))
--BEGIN RAISERROR('Nu se pot sterge contractele din anul 2007 !', 1, 1) ROLLBACK TRANSACTION END

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