REM=================== SINTASSI BASE =============== REM REM ------------------------------------------------ REM Tutte le informazioni di ogni Studente. REM ------------------------------------------------ SELECT Matricola, Nome, Cognome FROM Studente; REM ------------------------------------------------ REM Tutte le informazioni di ogni Studente. REM ------------------------------------------------ SELECT * FROM Studente; REM ------------------------------------------------ REM Nome di ogni Studente: la risposta contiene duplicati. REM REM **SQL tratta le tabelle come MULTIINSIEMI!** REM REM ------------------------------------------------ SELECT Nome FROM Studente; REM=================== MULTIINSIEMI =============== REM REM ------------------------------------------------ REM Nome di REM ogni Studente, senza duplicati. REM REM La selezione di tuple che non contengono un REM attributo identificatore possono produrre duplicati REM DISTINCT li elimina. REM ------------------------------------------------ SELECT DISTINCT Nome FROM Studente; REM=================== PSEUDONIMI =============== REM REM ------------------------------------------------ REM Nome e Cognome di ogni Studente, ridenominando REM gli attributi nella tabella prodotta. REM REM **SQL ammette la difinzione di ALIAS di attributi: REM pseudonimi di nomi di attributi** REM REM ------------------------------------------------ SELECT Nome as Nome_Studente, Cognome as Cognome_Studente FROM Studente; REM ------------------------------------------------ REM Nome e Cognome di ogni Studente, ridenominando REM la tabella Studente. REM REM **SQL ammette la difinzione di ALIAS di tabelle: REM pseudonimi di tabelle** REM REM ------------------------------------------------ SELECT S.Nome, S.Cognome FROM Studente S; REM ------------------------------------------------ REM Nome e Cognome di ogni Studente sfruttando REM alias di attributi e tabelle. REM ------------------------------------------------ SELECT S.Nome as Nome_Studente, S.Cognome as Cognome_Studente FROM Studente S; REM=================== PREDICATI DI SELEZIONE ====== REM REM ------------------------------------------------ REM Cognome di coloro i quali si chiamano 'Rosy'. REM ------------------------------------------------ SELECT Cognome FROM Studente WHERE Nome = 'Rosy' ; REM ------------------------------------------------ REM Cognome di coloro i quali si chiamano 'Rosy' o 'Marco'. REM ------------------------------------------------ SELECT Cognome FROM Studente WHERE Nome = 'Rosy' or Nome = 'Marco'; REM ------------------------------------------------ REM Codice dei corsi per cui e` REM fissato un appello dopo il REM Natale 2001. REM ------------------------------------------------ SELECT DISTINCT Corso FROM Appello WHERE DataEsame > '25-DEC-01'; REM ------------------------------------------------ REM Codice dei corsi per cui e` REM fissato un appello dopo il REM primo settembre 2001, ma prima del REM Natale 2001. REM ------------------------------------------------ SELECT DISTINCT Corso FROM Appello WHERE DataEsame > '01-SEP-01' and DataEsame < '25-DEC-01'; REM ------------------------------------------------ REM Cognomi degli studenti la cui matricola REM appartiene ad un dato insieme. REM ------------------------------------------------ SELECT Cognome FROM Studente WHERE Matricola IN (99000,99001); REM ------------------------------------------------ REM Matricola degli studenti di cui non si REM conosce la data della prenotazione REM ad un appello. REM REM **NON** si usa la normale uguaglianza (=) o REM diseguaglianza (<>) perche` ogni istanza di REM NULL e` diversa da tutte le altre REM ------------------------------------------------ SELECT DISTINCT Studente FROM Prenotazione WHERE Data IS NULL; REM ------------------------------------------------ REM Matricola e data di prenotazione REM degli studenti prenotati, che hanno REM specificato la data. REM ------------------------------------------------ SELECT DISTINCT Studente, Data FROM Prenotazione WHERE Data IS NOT NULL; REM================= PRODOTTI CARTESIANI, JOIN====== REM REM ------------------------------------------------ REM Query errata in Oracle 8i: REM il prodotto cartesiano di una tabella con se REM stessa **RICHIEDE** alias. REM ------------------------------------------------ SELECT * FROM Corso, Corso; REM ------------------------------------------------ REM Prodotto cartesiano di Codice in una REM copia della tabella Corso con Nome REM nella seconda copia della tabella Corso. REM ------------------------------------------------ SELECT C1.Codice, C2.Nome FROM Corso C1, Corso C2; REM ------------------------------------------------ REM Riproduzione di Corso come REM JOIN (stile THETA, come richesto da Oracle 8i) REM di due copie di se stessa. REM ------------------------------------------------ SELECT C1.Codice, C2.Nome FROM Corso C1, Corso C2 WHERE C1.Codice = C2.Codice; REM ------------------------------------------------ REM Corsi per cui e` indetto un REM esame (senza duplicati) REM ------------------------------------------------ SELECT DISTINCT Nome FROM Corso, Appello WHERE Corso.Codice = Appello.Corso; REM ------------------------------------------------ REM Nome e Cognome degli studenti che sono REM iscritti ad un qualche appello. REM ------------------------------------------------ SELECT DISTINCT Nome, Cognome FROM Studente, Prenotazione WHERE Studente.Matricola = Prenotazione.Studente; REM ------------------------------------------------ REM Nome e Cognome degli studenti che sono REM iscritti ad un qualche appello e Codice del REM corso relativo. REM ------------------------------------------------ SELECT DISTINCT Nome, Cognome, Corso FROM Studente, Prenotazione, Appello WHERE Studente.Matricola = Prenotazione.Studente AND Prenotazione.AppelloDataEsame = Appello.DataEsame AND Prenotazione.AppelloCorso = Appello.Corso; REM ------------------------------------------------ REM Nome e Cognome degli studenti che sono REM iscritti ad un qualche appello e Nome del REM corso relativo. REM ------------------------------------------------ SELECT DISTINCT S.Nome, Cognome, Corso.Nome FROM Studente S, Prenotazione, Appello, Corso C WHERE S.Matricola = Prenotazione.Studente AND Prenotazione.AppelloDataEsame = Appello.DataEsame AND Prenotazione.AppelloCorso = Appello.Corso AND Appello.Corso = C.Codice; REM ------------------------------------------------ REM Nome e Cognome degli studenti che sono REM iscritti al corso di nome Analisi II. REM ------------------------------------------------ SELECT DISTINCT S.Nome, Cognome, Corso.Nome FROM Studente S, Prenotazione, Appello, Corso C WHERE S.Matricola = Prenotazione.Studente AND Prenotazione.AppelloDataEsame = Appello.DataEsame AND Prenotazione.AppelloCorso = Appello.Corso AND Appello.Corso = C.Codice AND Corso.Nome = 'Analisi II'; REM ------------------------------------------------ REM Verifica che ogni occorrenza del valore NULL REM e` diversa da ogni altra. REM REM Sono elencate solo le matricole degli studenti REM che hanno specificato data di iscrizione ad un REM appello. REM ------------------------------------------------ SELECT Studente FROM Prenotazione P1, Prenotazione P2 WHERE P1.Data = P2.Data;