DROP TABLE IF EXISTS Bovini;
CREATE TABLE Bovini (
ID INT IDENTITY(1,1) PRIMARY KEY,
CODE VARCHAR(8) NOT NULL,
Descri VARCHAR(400),
DataEtichettamento Date,
CodiceStalla VARCHAR(50),
CodiceRegione VARCHAR(50),
DataNascita DateTime,
CodiceModalitaAllevamento VARCHAR(20)
);
CREATE TABLE Stalla (
ID INT IDENTITY(1,1) PRIMARY KEY,
CODE VARCHAR(50) NOT NULL,
Descri VARCHAR(50),
Zona VARCHAR(50),
NrCapi int
);
CREATE TABLE ModalitaAllevamento(
Codice VARCHAR(20),
Descrizione VARCHAR(700)
);
INSERT INTO Stalla(CODE, Descri, Zona, NrCapi )
VALUES ('STALLA01', 'LO STALLONE DI PROPATA', 'Parco Antola', 200),
('STALLA02', 'La stalla della Val Fontanabuona', 'San Colombano Certenoli', 20);
INSERT INTO Bovini(CODE, Descri, CodiceStalla, CodiceModalitaAllevamento)
VALUES ('01', 'BuePezzato01', 'STALLA01', '01'),
('02', 'BuePezzato02', 'STALLA02', '02'),
('03', 'BuePezzato03', 'STALLA01', '03'),
('04', 'BuePezzato04', 'STALLA01', '04'),
('05', 'BuePezzato05', NULL, '04');
INSERT INTO ModalitaAllevamento(Codice, Descrizione)
VALUES ('01', 'Estensivo'),
('02' , 'Intensivo'),
('03', 'Transumante'),
('04', 'Brado');
SELECT b.CODE, b.Descri, b.CodiceStalla, s.Descri, s.Zona
FROM Bovini b LEFT OUTER JOIN Stalla s ON b.CodiceStalla = s.CODE;
SELECT COUNT(Descri) as NumBovini, CodiceStalla
FROM Bovini
GROUP BY CodiceStalla;
SELECT Codice, Descrizione
FROM ModalitaAllevamento;
SELECT *
FROM Stalla;
SELECT Descri, CodiceModalitaAllevamento
FROM Bovini
WHERE CodiceModalitaAllevamento like '04';
SELECT DISTINCT CodiceStalla
FROM Bovini
WHERE CodiceStalla like '%01';
SELECT Codice, Descrizione
FROM ModalitaAllevamento
ORDER BY Descrizione ASC;
SELECT Codice, Descrizione
FROM ModalitaAllevamento
ORDER BY Codice DESC;
SELECT CODE,Descri
FROM Bovini
LIMIT '3';
SELECT CODE,Descri
FROM Bovini
LIMIT '2' OFFSET '3';
SELECT CODE, Descri, COUNT(*) as Numero
FROM Bovini
GROUP BY CODE, Descri;
SELECT CODE, Descri, COUNT(CodiceStalla) as Numero
FROM Bovini
GROUP BY CODE, Descri
HAVING COUNT(CodiceStalla) > '01';
SELECT b.CODE, b.Descri, m.Descrizione
FROM Bovini b
INNER JOIN ModalitaAllevamento m ON m.Codice = b.CodiceModalitaAllevamento;
SELECT s.CODE, s.NrCapi, b.Descri
FROM Stalla s
LEFT JOIN Bovini b ON s.CODE = b.CodiceStalla;
SELECT s.CODE, s.NrCapi, s.Zona, b.Descri, b.CODE
FROM Stalla s
RIGHT JOIN Bovini b ON s.CODE = b.CodiceStalla;
SELECT b.CODE, m.Descrizione
FROM Bovini b
CROSS JOIN ModalitaAllevamento m;
SELECT b.CODE, m.Descrizione
FROM Bovini b, ModalitaAllevamento m;
SELECT CODE, Descri FROM Bovini
UNION
SELECT Codice, Descrizione FROM ModalitaAllevamento;
SELECT CODE, Descri FROM Bovini
INTERSECT
SELECT Codice, Descrizione FROM ModalitaAllevamento;
SELECT CODE, Descri FROM Bovini
MINUS
SELECT Codice, Descrizione FROM ModalitaAllevamento;
SELECT Codice, Descrizione
FROM ModalitaAllevamento
WHERE Descrizione not like 'E%';
SELECT Codice, Descrizione
FROM ModalitaAllevamento
WHERE Descrizione not IN ('Intensivo', 'Brado');
SELECT Codice, Descrizione
FROM ModalitaAllevamento
WHERE Descrizione IN ('Brado');
SELECT Codice, Descrizione
FROM ModalitaAllevamento
WHERE Codice BETWEEN '01' AND '03';
SELECT CODE, Descri
FROM Bovini
WHERE CodiceStalla IS NULL;
SELECT CODE, Descri
FROM Bovini
WHERE CodiceStalla IS NOT NULL;
SELECT MAX(CODE) CODE
FROM Bovini;
SELECT MIN(Codice) Codice
FROM ModalitaAllevamento;
SELECT AVG(NrCapi) NrCapi
FROM Stalla;
SELECT SUM(NrCapi) NrCapi
FROM Stalla;
DROP TABLE IF EXISTS Terreno;
CREATE TABLE Terreno(
ID int PRIMARY KEY,
Codice VARCHAR(10) NOT NULL,
CodiceModalitaAllevamento VARCHAR(20)
);
ALTER TABLE Terreno
ADD Prezzo float;
ALTER TABLE Terreno
DROP COLUMN Prezzo;
ALTER TABLE Terreno
ADD constraint PK_Codice PRIMARY KEY (Codice);
ALTER TABLE Terreno
DROP constraint PK_Codice PRIMARY KEY (Codice);
ALTER TABLE Terreno
RENAME TO Terra;
ALTER TABLE Terreno
RENAME Codice TO CODE;
TRUNCATE TABLE Terreno;
CREATE TABLE ElencoAnimali(
ID int,
CodiceID int,
NomeLista VARCHAR(100),
PRIMARY KEY (ID, CodiceID)
);
CREATE TABLE GrandezzaAnimale(
ID int PRIMARY KEY,
CodiceID int,
Nome VARCHAR(100)
);
CREATE TABLE Mangime(
CodiceID int PRIMARY KEY,
Marca VARCHAR(100),
ID int,
FOREIGN KEY (ID) REFERENCES GrandezzaAnimale(ID)
);
CREATE TABLE DipendentiFattoria(
ID int,
Codice int,
Nome VARCHAR(100),
Cognome VARCHAR(100),
UNIQUE(ID, Codice)
);
CREATE TABLE ListaLavoratori(
ID int PRIMARY KEY,
Codice int,
Nome VARCHAR(100),
Cognome VARCHAR(200),
Citta VARCHAR(300),
Eta int,
CHECK (Eta >= 18 AND Citta = 'Genova')
);
INSERT INTO ListaLavoratori (Nome, Cognome, Citta, Eta)
VALUES ('Gianni', 'Gambino', 'Genova', 22),
('Maddalena', 'Sole', 'Savona', 18),
('Selene', 'Fracco', 'Genova', 18);
INSERT INTO ListaLavoratori(ID, Nome, Cognome)
SELECT Codice, Nome, Cognome
FROM DipendentiFattoria;
UPDATE ListaLavoratori
SET Nome = 'Giovanni',
Citta = 'Imperia'
WHERE Nome like 'Gianni';
DELETE FROM ListaLavoratori;
DELETE FROM ListaLavoratori
WHERE Eta > 18;
CREATE VIEW LavoratoriGenova (Nome, Cognome, Citta) AS
SELECT Nome, Cognome, Citta
FROM ListaLavoratori;
CREATE VIEW LavoratoriGenova (Nome, Cognome, Citta) AS
SELECT Nome, Cognome, Citta
FROM ListaLavoratori
WITH CHECK OPTION;
CREATE RECURSIVE VIEW LavoratoriGenova (Nome, Cognome, Citta) AS
Nome, Cognome, Citta
UNION
ID, Codice, Eta;
CREATE TEMPORARY VIEW LavoratoriGenova (Nome, Cognome, Citta) AS
SELECT Nome, Cognome, Citta
FROM ListaLavoratori;
DROP VIEW LavoratoriGenova;
CREATE INDEX IX_Lavoratori ON ListaLavoratori(Nome, Cognome);
CREATE UNIQUE INDEX IX_ListaLav ON ListaLavoratori(ID, Codice);
DROP INDEX IX_Lavoratori ON ListaLavoratori;