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)