Documente Academic
Documente Profesional
Documente Cultură
sql 1
/* 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
/* 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
*/
/* 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
*/
/*
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
*/
-- 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
*/
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 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
*/
/* Cerinta: Toate produsele a caror denumire incepe cu "SOS" sau "CA" si au pen-ultimul caracter din codul
intern 6
/*
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
*/
-- 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')
*/