uni

Come svolgere esercizi

su Linux al posto di SQL/mySQL si usa MariaDB. Per fare gli esercizi bisogna prima far partire mariadb con systemctl start mariadb.service, poi entrare in Data Grip oppure MySQL Workbench. Per connettersi a mariadb: root & root.

Sia dato il seguente schema di tabella:
STUDENTE (Matricola, Cognome, Nome, DataNascita, DataIscrizione, DataLaurea,
NumeroEsamiSostenuti, Facolta),
esprimere le seguenti richieste in linguaggio MySQL:
- Indicare matricola degli studenti che non si erano ancora laureati il 15 Luglio 2005.
- Indicare matricola e cognome degli studenti il cui percorso di studi è durato (o dura da) oltre sei anni.
- Indicare nome, cognome ed età degli studenti laureati quest’anno in Lettere (durata standard 5 anni a ciclo
unico), non fuori corso e come minimo con un anticipo di sei mesi rispetto alla durata standard.
- indicare matricola e cognome degli studenti laureati fuori corso, cioè oltre il mese di Aprile del 6° anno,
nell’anno accademico 2009-2010.

Sia dato il seguente schema di tabella:
STUDENTE (MATRICOLA, Cognome, Nome, DataNascita, DataIscrizione, DataLaurea, NumeroEsamiSostenuti, Facolta)
 
1. Indicare matricola degli studenti che non si erano ancora laureati il 15 Luglio 2005.
SELECT Matricola
FROM Studente
WHERE DataLaurea > '2005-07-15'
	OR DataLaurea IS NULL;
 
2. Indicare matricola e cognome degli studenti il cui percorso di studi è durato (o dura da) oltre sei anni.
SELECT Matricola, Cognome
FROM Studente
WHERE (DataLaure IS NOT NULL AND DataIscrizione + INTERVAL 6 YEAR < DataLaurea)
	OR (DataIscrizione + INTERVAL 6 YEAR < CURRENT_DATE AND DataLaurea IS NULL);
 
3. Indicare nome, cognome ed età degli studenti laureati quest’anno in Lettere (durata standard 5 anni a ciclo unico), non fuori corso e come minimo con un anticipo di sei mesi rispetto alla durata standard.
SELECT Nome, Cognome, DATEDIFF(CURRENT_DATE, DataNascita)/365
FROM Studente
WHERE YEAR(DataLaurea) = YEAR(CURRENT_DATE)
	AND Facolta = 'lettere'
	AND DataIscrizione + INTERVAL 5 YEAR > DataLaurea + INTERVAL 6 MONTH;
 
4. Indicare matricola e cognome degli studenti laureati fuori corso, cioè oltre il mese di Aprile del 6° anno, nell’anno accademico 2009-2010.
SELECT Matricola, Cognome
FROM Studente
WHERE (DataLaurea > '2010-04-30' AND DataLaurea < '2011-01-01')
	AND (DataIscrizione > '2003-04-30' AND DataIscrizione < '2004-04-01');

es:

Indicare cognome e nome delle persone di età inferiore a 40 anni
SELECT Cognome, Nome
FROM Persona
WHERE Età < 40;
 
indicare tutte le informazioni di blah blah
SELECT *
ecc
 
indicare il codice fiscale delle persone di età inferiore a 40 anni il cui cognome è Lepre
WHERE Età < 40
	AND Cognome = 'Lepre';
 
Indicare codice fiscale ed età delle persone il cui cognome è Nutrie o il cui nome è Maddalena
WHERE Cognome = 'Nutrie'
	OR Cognome = 'Maddalena';
 
Indicare cognome e nome delle persone di età compresa fra 45 e 60 anni
WHERE Età BETWEEN 45 AND 60;
oppure
WHERE Età >= 45
	AND Età <= 60;
 
Indicare i cognomi delle persone di età almeno pari a 38 anni (togli duplicati)
SELECT DISTINCT Cognome
etc
WHERE Età >= 38;
 
Indicare la matricola degli studenti non ancora laureati
WHERE DataLaurea IS NOT NULL;
 
Indicare matricola e data di laurea (nel formato ‘dd|mm|yyyy, nome_giorno’) degli studenti iscritti prima del 2005
SELECT Matricola, DATE_FORMAT(DataLaurea, '%d|%m|%y,%W')
FROM Studente
WHERE DataIscrizione < '2005-01-01';
 
Indicare la matricola degli studenti che si sono laureati di mercoledì
SELECT Matricola
FROM Studente
WHERE DATE_FORMAT(DataLaurean, '&w')=3;
 
Indicare matricola e mese di laurea degli studenti immatricolati dopo il 2000
SELECT Matricola, MONTH(DataLaurea)
FROM Studente
WHERE YEAR(DataLaurea) > 2000;
 
Indicare il cognome degli studenti che si sono laureati cinque anni fa
WHERE DataLaurea IS NOT NULL
	AND YEAR(DataLaurea) = YEAR(CURRENT_DATE)-5;
 
Indicare matricola e da quanti giorni risultavano iscritti gli studenti, ad oggi laureati, che non si erano ancora laureati il 15 Luglio 2005
SELECT Matricola, DATEDIFF('2005-07-15',DataIscrizione)
FROM Studente
WHERE DataLaurea IS NOT NULL
	AND DataLaurea > '2005-07-15';
 
Indicare la matricola e il mese di iscrizione degli studenti che si sono laureati dopo cinque anni esatti dal giorno dell’iscrizione
SELECT
FROM Studente
WHERE DataLaurea = DATE_ADD(DataIscrizione, INTERVAL 5 Year);
oppure
WHERE DataLaurea = DataIscrizione + INTERVAL Year;
 
Indicare il numero di visite effettuate in data 1° Marzo 2013
SELECT COUNT(*) AS VisitePrimoMarzo
FROM Visita
WHERE Data = '2013-03-01'; 
 
STUDENTE (Matricola, Cognome, Nome, DataNascita, ColoreCapelli, Fila)
1. Contare gli studenti della prima fila
SELECT COUNT(*)
FROM STUDENTE
WHERE Fila = 'Prima';
2. Contare i colori di capelli degli studenti della prima fila
SELECT COUNT(DISTINCT ColoreCapelli)
FROM STUDENTE
WHERE ColoreCapelli
	AND Fila = 'Prima';
1. Contare i colori di capelli degli studenti della prima fila ignorando gli studenti il cui colore di capelli non è noto
SELECT COUNT(DISTINCT ColoreCapelli)
FROM STUDENTE
WHERE ColoreCapelli IS NOT NULL
	AND Fila = 'prima';
 
semplice somma
SELECT SUM(Reddito) AS RedditoTotale
ecc
 
semplice media
SELECT AVG(Reddito) AS RedditoMedio
ecc
 
indicare il reddito massimo e nome e cognome di chi lo detiene
SELECT MAX(Reddito), Nome, Cognome
FROM Paziente;

SELECT Matricola
FROM STUDENTE
WHERE DataLaure IS NULL
---
SELECT Matricola, Cognome
FROM STUDENTI
WHERE YEAR(DATEDIFF(DataLaurea, DataIscrizione)) > 6
	OR DATEDIFF(CURRENT_DATE, DataIscrizione) > 6;
---
SELECT Nome, Cognome, YEAR(CURRENT_DATE, DataNascita)
FROM STUDENTI
WHERE YEAR(DataLaurea) = YEAR(CURRENT_DATE)
	AND Facoltà = Lettere;
---
SELECT Matricola, Cognome
FROM STUDENTI
WHERE YEAR(DataIscrizione) < 5
	AND DataLaure > '2010-05-30'
	AND DataLaurea < '2011-1-1'

• Indicare l’incasso totale degli ultimi due anni, realizzato grazie alle visite dei
medici cardiologi della clinica.

• Indicare il numero di pazienti di sesso femminile che, nel quarantesimo anno
d’età, sono stati visitati, una o più volte, sempre dallo stesso gastroenterologo.

• Indicare l’età media dei pazienti mai visitati da ortopedici.

• Indicare nome e cognome dei pazienti che sono stati visitati non meno di due
volte dalla dottoressa Gialli Rita.

• Indicare il reddito medio dei pazienti che sono stati visitati solo da medici con
parcella superiore a 100 euro, negli ultimi sei mesi.

  • indicare medico, paziente e data delle visite di controllo del mese di Gennaio 2016
SELECT V1.Medico, V1.Paziente, V1.Data
FROM Visita V1
WHERE MONTH (V1.Data) = 1
	AND YEAR(V1.Data) = 2016
	AND EXISTS
		(
		SELECT *
		FROM Visita V2
		WHERE V2.Medico = V1.Medico
			AND V2.Paziente = V1.Paziente
				AND V2.Data < V1.Data
			);
Indicare mat dei med che hanno visitato per la prima volta almeno un paziente nel mese di Ottobre 2013
SELECT DISTINCT V1.Medico
FROM Visita V1
WHERE YEAR(V1.Data) = 2013
	AND MONTH(V1.Data) = 10
	AND NOT EXISTS (
		SELECT *
		FROM Visita V2
		WHERE V2.Medico = V1.Medico
			AND V2.Paziente = V1.Paziente
			AND V2.Data < V1.Data)
Indicare nome e cogn dei paz che sono stati visitati non meno di due volte dalla dottoressa Gialli Rita

tabelle:
paziente> nome, cognome
visita>
Medico> nome, cognome
condizioni sui record:
1. medico = Rita Gialli (nome e cognome)

SELECT
FROM
GROUP BY
HAVING