vuoi
o PayPal
tutte le volte che vuoi
CLAUSOLA FROM
- Trova gli studenti iscritti a inf con cognome Rossi
- Trova gli studenti iscritti a inf, N_C, media esami
CLAUSOLA WHERE
- Trova tutti gli studenti che sono nati lo stesso giorno di mat='123'
- Trova tutti gli studenti che sono nati lo stesso giorno di mat='123' e della stessa provincia di mat='124'
CLAUSOLA HAVING
Quanti STUD ci sono nelle stesse province di mat='123'
SELECT COUNT *FROM STUDGROUP BY PRHAVING PR = ( SELECT PR FROM STUD WHERE MAT='123')ESERCIZIO
Per ogni studente che ha fatto + di 2 esami, mostra il suo voto max
SELECT MAX(VOTO)FROM STUD JOIN ESUP ON MAT=CANDGROUP BY MATHAVING COUNT(*) > 2Per ogni studente che ha fatto + di 2 esami (mostra nome e cognome) e che ha un voto max maggiore del voto max di 'Mario Rossi'
SELECT N,CFROM STUD JOIN ESUP ON MAT=CANDGROUP BY MAT,N,CHAVING COUNT(*) > 2 AND MAX(V) > ( SELECT MAX(V) FROM ESUP WHERE MAT='123')VALORI MANCANTI
Se ho una somma x1+x2+...+xn con alcuni valori NULL, il risultato è un NULL. Lo stesso con valore sconosciuto.
In SQL ci sono alcune funzioni come SUM, AVG, MAX, MIN, COUNT.
SELECT AVG(X) FROM E_SUP WHERE MAT='123'In queste operazioni il database esclude i valori null perciò ha difficoltà a gestirli.
SELECT SUM(V)/COUNT(*) FROM E_SUP WHERE MAT='123' -- con valore NULL da ammettereLEZIONE 19
19/05/2022
Richiamo sulle Nested correlated query lezione precedente
- Trova gli studenti che hanno almeno un collega che ha preso lo stesso voto dell’alunno in uno stesso esame
- Trova tutti gli studenti che hanno dato tutti gli esami di Torno Vista
SI TRASFORMA IN
- Trova gli studenti per i quali non esiste un esame che non era stato superato da Torno Vista
- Ciclo per gli studenti TRIPLO
- Ciclo per gli esami CICLO FOR
- Esecuzione query
-- ESECUZIONE
BEGIN -> Comincia programmazione
- { CODICE SQL (EX. QUERY) }DECLARE -> Comincia la dichiarazioneNOME := VARCHAR(10);AUX NUMBER(3,0);BOOLEAN; -> Uscere tabelle non è possibile (IN ORACLE)ERR1 EXCEPTION; -> eccezioni
Ho a disposizione 2 temporizzazioni per controllare quando viene eseguito l'INSERT → BEFORE o AFTER
parte il trigger prima dell'inserimento
dopo l'inserimento
Trigger → meccanismo di attivazione del codice
CREATE TRIGGER NumchiusoBEFORE INSERT ON STUDENTEFOR EACH ROWContatore NUMBER;Numchiuso EXCEPTION;BEGIN SELECT COUNT(*) INTO Contatore FROM STUDENTI WHERE CDL = :NEW.CDL; IF Contatore = 220 THEN RAISE Numchiuso END IF;EXCEPTION WHEN Numchiuso THEN RAISE_APPLICATION_ERROR (-20001 , 'Ateneo Chiuso')END;"ogni volta che viene lanciato un INSERT sulla tabella codici, parte in automatico il trigger"
* con :NEW (solo nei trigger) è una variabile di tipo Tupla che sta per essere scritto (quindi contiene la Tupla, Ex.: :new.mat)
Il rischio di violare il numchiuso comunque c'è, ad esempio se viene creata prima la tabella con dati inseriti e poi avviare il trigger.
NOW è una garanzia sul vincolo admin può disattivarlo.
Regole di Business VS Vincoli Dinamici
regole secondo cui funziona l'organizzazione
Ex: politiche di scelta di un magazzino
regole sull'evoluzione di un sistema che non devono essere violate.