Benvenuto nel Sistema di Gestione Aziendale

🎯 Obiettivi del Sistema

Questo sistema ti permette di gestire in modo efficiente e automatizzato tutte le informazioni relative a:

  • Impiegati: Dati anagrafici, ruoli, stipendi, date di assunzione
  • Dipartimenti: Organizzazione aziendale, manager, budget
  • Progetti: Progetti in corso, scadenze, budget, assegnazioni

📊 Statistiche Database

🌟 Funzionalità Principali

📝 Query di Base

Impara a interrogare il database con SELECT, WHERE, ORDER BY e altre istruzioni fondamentali

🔗 Join e Relazioni

Collega dati tra tabelle diverse per ottenere informazioni complete e dettagliate

📊 Aggregazioni

Calcola statistiche, medie, somme e raggruppa dati per analisi avanzate

✏️ Gestione Dati

Inserisci, modifica ed elimina record con INSERT, UPDATE e DELETE

✅ Database Già Configurato!

Il database è già stato inizializzato con dati di esempio. Puoi iniziare subito a esplorare le query o testare il tuo SQL nel Playground!

💡 Suggerimento

Naviga usando il menu a sinistra per esplorare tutte le funzionalità. Inizia dallo Schema Database per capire la struttura, poi passa alle Query di Base!

Schema del Database

🏗️ Struttura del Database

Il database è organizzato in 4 tabelle principali collegate tra loro attraverso chiavi primarie e esterne.

👥 DIPARTIMENTI

id_dipartimento INTEGER PRIMARY KEY
nome VARCHAR(100) NOT NULL
budget DECIMAL(12,2)
sede VARCHAR(100)
id_manager INTEGER (riferimento a IMPIEGATI)

👨‍💼 IMPIEGATI

id_impiegato INTEGER PRIMARY KEY
nome VARCHAR(50) NOT NULL
cognome VARCHAR(50) NOT NULL
email VARCHAR(100) UNIQUE
telefono VARCHAR(20)
data_assunzione DATE
stipendio DECIMAL(10,2)
ruolo VARCHAR(50)
id_dipartimento INTEGER (riferimento a DIPARTIMENTI)

📋 PROGETTI

id_progetto INTEGER PRIMARY KEY
nome VARCHAR(100) NOT NULL
descrizione TEXT
data_inizio DATE
data_fine DATE
budget DECIMAL(12,2)
stato VARCHAR(20)
id_dipartimento INTEGER (riferimento a DIPARTIMENTI)

🔗 ASSEGNAZIONI

id_assegnazione INTEGER PRIMARY KEY
id_impiegato INTEGER (riferimento a IMPIEGATI)
id_progetto INTEGER (riferimento a PROGETTI)
ore_settimanali INTEGER
ruolo_progetto VARCHAR(50)
data_assegnazione DATE

📝 Codice SQL di Creazione

Dati di Esempio

🏢 Dipartimenti

👨‍💼 Impiegati

📋 Progetti

🔗 Assegnazioni Impiegati-Progetti

Query di Base

📖 Query Fondamentali SQL

In questa sezione imparerai le query essenziali per interrogare il database. Clicca su ogni esempio per eseguirlo!

1️⃣ SELECT - Selezionare Dati

Tutti gli Impiegati

Visualizza tutti i record della tabella impiegati

SELECT * FROM Impiegati

Campi Specifici

Seleziona solo nome, cognome e stipendio

SELECT nome, cognome, stipendio FROM Impiegati

Valori Unici

Trova tutti i ruoli diversi presenti

SELECT DISTINCT ruolo FROM Impiegati

2️⃣ WHERE - Filtrare Dati

Filtro Numerico

Impiegati con stipendio superiore a 50000€

SELECT * FROM Impiegati WHERE stipendio > 50000

Filtro Testuale

Tutti gli sviluppatori

SELECT * FROM Impiegati WHERE ruolo = 'Developer'

Progetti Attivi

Solo i progetti in corso

SELECT * FROM Progetti WHERE stato = 'In Corso'

3️⃣ ORDER BY - Ordinare Risultati

Ordine Decrescente

Impiegati ordinati per stipendio (dal più alto)

SELECT ... ORDER BY stipendio DESC

Ordinamento Multiplo

Ordina per cognome e poi per nome

SELECT * FROM Impiegati ORDER BY cognome, nome

4️⃣ LIMIT - Limitare Risultati

Top 5 Stipendi

I 5 impiegati con gli stipendi più alti

SELECT * FROM Impiegati ORDER BY stipendio DESC LIMIT 5

Query Avanzate

🔗 JOIN - Collegare Tabelle

Cos'è un JOIN?

I JOIN permettono di combinare dati da due o più tabelle basandosi su una relazione tra di esse.

Impiegati con Dipartimento

Lista impiegati e il loro dipartimento

SELECT I.nome, I.cognome, D.nome FROM Impiegati I JOIN Dipartimenti D ...

Progetti per Dipartimento

Tutti i progetti con il dipartimento responsabile

SELECT P.nome, D.nome FROM Progetti P JOIN Dipartimenti D ...

Assegnazioni Complete

Impiegati, progetti e ruoli (JOIN multipli)

SELECT ... FROM Impiegati I JOIN Assegnazioni A ... JOIN Progetti P ...

📊 Funzioni di Aggregazione

COUNT - Contare

Numero totale di impiegati

SELECT COUNT(*) FROM Impiegati

AVG - Media

Stipendio medio aziendale

SELECT AVG(stipendio) FROM Impiegati

SUM - Somma

Budget totale di tutti i progetti

SELECT SUM(budget) FROM Progetti

MAX/MIN

Stipendio massimo e minimo

SELECT MAX(stipendio), MIN(stipendio) FROM Impiegati

📋 GROUP BY - Raggruppare Dati

Statistiche per Ruolo

Numero di impiegati e stipendio medio per ogni ruolo

SELECT ruolo, COUNT(*), AVG(stipendio) FROM Impiegati GROUP BY ruolo

Impiegati per Dipartimento

Conta impiegati in ogni dipartimento

SELECT D.nome, COUNT(I.id_impiegato) FROM ... GROUP BY D.nome

Progetti per Stato

Raggruppa progetti per stato con budget

SELECT stato, COUNT(*), SUM(budget) FROM Progetti GROUP BY stato

🎯 HAVING - Filtrare Gruppi

Ruoli con Stipendio Alto

Solo i ruoli con stipendio medio > 45000€

SELECT ruolo, AVG(stipendio) ... HAVING AVG(stipendio) > 45000

Dipartimenti Grandi

Dipartimenti con almeno 2 impiegati

... GROUP BY D.nome HAVING COUNT(I.id_impiegato) >= 2

Gestione Dati (INSERT, UPDATE, DELETE)

⚠️ Attenzione

Le modifiche al database sono permanenti in questa sessione. Ricarica la pagina per resettare i dati originali.

➕ INSERT - Inserire Nuovi Dati

-- Inserire un nuovo impiegato INSERT INTO Impiegati (nome, cognome, email, telefono, data_assunzione, stipendio, ruolo, id_dipartimento) VALUES ('Marco', 'Bianchi', 'm.bianchi@azienda.it', '555-9999', '2024-02-15', 42000, 'Junior Developer', 1);

Inserisci Nuovo Impiegato

Aggiungi Marco Bianchi al database

INSERT INTO Impiegati ...

Inserisci Nuovo Progetto

Aggiungi un nuovo progetto

INSERT INTO Progetti ...

✏️ UPDATE - Modificare Dati Esistenti

-- Aumentare lo stipendio di un impiegato UPDATE Impiegati SET stipendio = stipendio * 1.10 WHERE id_impiegato = 1;

Aumento Sviluppatori

Aumenta del 5% lo stipendio degli sviluppatori

UPDATE Impiegati SET stipendio = stipendio * 1.05 ...

Cambia Stato Progetto

Imposta un progetto come "In Corso"

UPDATE Progetti SET stato = 'In Corso' ...

🗑️ DELETE - Eliminare Dati

-- Eliminare un impiegato specifico DELETE FROM Impiegati WHERE id_impiegato = 10;

⚠️ Attenzione alle Eliminazioni

Usa sempre WHERE con DELETE! Senza WHERE elimineresti TUTTI i record della tabella!

Elimina Assegnazione

Rimuovi una specifica assegnazione

DELETE FROM Assegnazioni WHERE id = 5

SQL Playground

🎮 Prova il Tuo SQL!

Scrivi ed esegui le tue query SQL personalizzate. Puoi testare qualsiasi query: SELECT, INSERT, UPDATE, DELETE, JOIN, ecc.

Scrivi la tua Query SQL

💡 Query di Esempio Utili

Stipendi Sopra Media

Impiegati con stipendio superiore alla media aziendale

Report Completo Dipartimenti

Statistiche complete per ogni dipartimento

Carico di Lavoro

Ore settimanali per impiegato

Esercizi Pratici

💪 Metti alla Prova le Tue Competenze!

Risolvi questi esercizi pratici per consolidare ciò che hai imparato. Le soluzioni sono disponibili, ma prova prima da solo!

🎯 Esercizio 1: Query di Base

Richiesta: Trova tutti gli impiegati del dipartimento IT con stipendio superiore a 45000€, ordinati per stipendio decrescente.

🎯 Esercizio 2: Aggregazioni

Richiesta: Calcola il numero totale di progetti e il budget medio per ogni stato (In Corso, Completato, Pianificato).

🎯 Esercizio 3: Join Multipli

Richiesta: Crea un report che mostri: nome impiegato, dipartimento, nome progetto assegnato e ore settimanali dedicate.

🎯 Esercizio 4: Subquery

Richiesta: Trova i dipartimenti che hanno un budget superiore al budget medio di tutti i dipartimenti.

🎯 Esercizio 5: Analisi Avanzata

Richiesta: Per ogni impiegato, calcola il carico di lavoro totale (somma ore settimanali) e mostra solo quelli con più di 30 ore totali.

🚀 Sfida Extra

Prova a creare query che rispondano a queste domande:

  • Quali sono i 3 progetti con il budget più alto?
  • Quanti impiegati ci sono per ogni ruolo?
  • Qual è il costo totale (somma stipendi) per ogni dipartimento?
  • Chi sono i manager dei vari dipartimenti?
  • Quali impiegati non sono assegnati a nessun progetto?