67 DBMS 6 – ampliare il database 2
Aggiungere nella tabella argomenti 4 campi nella colonna argomento:
INSERT INTO `quizMaker`.`argomenti` (`argomento`) VALUES ('storia'); INSERT INTO `quizMaker`.`argomenti` (`geografia`) VALUES ('informatica'); INSERT INTO `quizMaker`.`argomenti` (`argomento`) VALUES ('chimica'); INSERT INTO `quizMaker`.`argomenti` (`argomento`) VALUES ('informatica');
Inseriamo anche le domande, ricordandoci di inserire nel fkArgomento il numero dell’id dell’argomento corrispondente:
INSERT INTO `quizMaker`.`domande` (`testo_domanda`, `fkArgomento`) VALUES ('Se parliamo di centurioni...', '1'); INSERT INTO `quizMaker`.`domande` (`testo_domanda`, `fkArgomento`) VALUES ('Napoleone visse all\'incirca nel', '1'); INSERT INTO `quizMaker`.`domande` (`iddomanda`, `testo_domanda`, `fkArgomento`) VALUES ('', 'La Russia confina con la Turchia?', '2'); INSERT INTO `quizMaker`.`domande` (`testo_domanda`, `fkArgomento`) VALUES ('Qual\'è il fiume più lungo della Francia', '2');
popoliamo il campo delle risposte, prendiamo la domanda 1 e 3 per esempio, ricordando che nel campo fkDomanda, va inserito il numero dell’iddomanda corrispondente.
INSERT INTO `quizMaker`.`risposte` (`testo_risposta`, `punti`, `fkDomanda`) VALUES ('siamo a Roma', '3', '1'); INSERT INTO `quizMaker`.`risposte` (`testo_risposta`, `punti`, `fkDomanda`) VALUES ('siamo a Londra', '-1', '1'); INSERT INTO `quizMaker`.`risposte` (`testo_risposta`, `punti`, `fkDomanda`) VALUES ('siamo ad Atene', '1', '1'); INSERT INTO `quizMaker`.`risposte` (`testo_risposta`, `punti`, `fkDomanda`) VALUES ('si', '0', '3'); INSERT INTO `quizMaker`.`risposte` (`testo_risposta`, `punti`, `fkDomanda`) VALUES ('no', '1', '3');
Se volessimo interrogare il database tramite l’sql per sapere le domande un comando base sarebbe
select * from domande
Così è una semplice copia della tabella domande, ma io non voglio vedere un numero fkArgomento, ma direttamente l’argomento associato, quindi bisogna congiungere le 2 tabelle tramite il comando join
select * from argomenti join domande
ovviamente così non basterebbe perchè mischierebbe a casaccio argomenti e domande, quindi dobbiamo dirgli tramite il criterio on di inserire l’argomento quando idArgomento ha lo stesso valore di fkArgomento
select * from argomenti join domande on idArgomento=fkArgomento
il risultato ottenuto è una nuova tabella con i miei dati ordinati.
Analogamente uniamo domande e risposte
select * from risposte join domande on iddomanda=fkDomanda
possiamo anche ordinare i risultati aggiungendo order:
order by iddomanda
Possiamo anche eseguire una query che recupera il testo della risposta giusta alla domanda con codice 1
where punti = (select max(punti) from risposte where fkDomanda=1)
La risposta corretta è quella il cui punteggio (where punti =) è uguale al massimo dei punteggi delle possibili risposte a quella domanda (where fkdomanda=1)