Esercitazione 1 SQL: DDL e DML di base Sistemi Informativi T Versione elettronica: L01.2.DDLDMLbase.pdf Prime cose da fare Fare login sul PC usando lo username di Scuola Procedura descritta qui: https://infoy.ing.unibo.it/new_account/ Lanciare CLP o DBeaver dal menu di avvio Windows Con CLP eseguire il comando CONNECT TO SIT_STUD USER <username> USING <password> oppure solo CONNECT TO SIT_STUD USER <username> e quindi immettere la password Al termine dell esercitazione scollegarsi dal DB: DISCONNECT SIT_STUD oppure DISCONNECT ALL Con DBeaver aprire la connessione creata, al termine disconnettersi Come primo login sul DB creare il proprio schema: CREATE SCHEMA <username> -- username tra doppi apici Es.1: DDL e DML base Sistemi Informativi T 2 1
CLP: alcune cose utili da ricordare Si avvia in modo interattivo (promptdb2 =>) Per passare al modo comando: QUIT Per tornare in modo interattivo, con il terminatore ; : DB2 t Altrimenti per scrivere istruzioni SQL su più righe bisogna usare il backslash (\) Usando CLP si consiglia in ogni caso di abituarsi a scrivere i comandi SQL (inclusi i dati che si inseriscono) in un file di input, ed eventualmente a salvare i risultati su un file di output, per evitare di dover riscrivere le istruzioni da capo Tasto destro del mouse: menu che permette di incollare testo copiato Da modo comando: db2 vtf C:\TEMP\sqlscript.txt z C:\TEMP\result.txt permette di leggere da file di input e salvare i risultati in un file di output (modalità append) Es.1: DDL e DML base Sistemi Informativi T 3 SQL: Alcune cose utili da sapere/ricordare Alcune funzioni utili (si veda FunzioniSQL.pdf nella pagina del Lab): YEAR(Data): restituisce l'anno di una data in formato intero LOWER(Stringa): converte l'argomento in lettere minuscole UPPER(Stringa): converte in lettere maiuscole Singoli apici ('abc'): sono usati per delimitare costanti di tipo stringa e data Doppi apici ("abc"): servono a permettere l'uso di nomiche non sarebbero altrimenti possibili (caratteri speciali, spazi, ecc.) e a renderli case-sensitive NOME = nome, ma NOME <> "nome" In fase di INSERT è possibile usare le parole chiave NULL e DEFAULT Es.1: DDL e DML base Sistemi Informativi T 4 2
Gestione di una biblioteca (1) Si vuole costruire un DB per la gestione dei prestiti di una biblioteca. Tale DB, semplificato, consiste delle tabelle: Utenti: contiene i dati dei clienti: numero di tessera univoco, nome, cognome e numero di telefono(anche questa terna definisce una chiave) Libri: libri in possesso della biblioteca. Ogni libro ha un codice, un titolo, un campo autori e una nota di commenti(facoltativa) Prestiti: La tabella memorizza il codice del libro prestato, il numero di tesseradelclientechehaillibro inprestito eladatadiinizio delprestito (DATA_OUT). Se il libro è stato già restituito anche la data di restituzione (DATA_IN), che altrimenti è NULL si assuma per semplicità che le copie di ogni libro siano illimitate, e che quindi più utenti possano prendere in prestito copie diverse di uno stesso libro contemporaneamente Es.1: DDL e DML base Sistemi Informativi T 5 Gestione di una biblioteca (2) Lo schema relazionale è: UTENTI (TESSERA, NOME, COGNOME, TELEFONO) LIBRI (CODICE, TITOLO, AUTORI, NOTE*) PRESTITI(CODICELIBRO, TESSERA, DATA_OUT, DATA_IN*) gli attributi sottolineati rappresentano la chiave primaria l asterisco indica la possibilità divalori nulli (non fa parte del nome dell attributo!) Note: Uno stesso utente può prendere in prestito lo stesso libro più volte Nell attributo AUTORI i diversi autori sono separati da virgole Es.1: DDL e DML base Sistemi Informativi T 6 3
Esercizio 1 (1) E'opportunodarenomiaivincolidefiniti,afinididebug DDL Si definiscanomediante opportuni statement SQL gli schemi relativi con tutti i vincoli opportuni, tenendo presente che: Quandosicancellaunutente,tuttiiprestitiasuonomevannorimossi Idem quando si cancella un libro Non è necessario specificare nulla per l aggiornamento (ovvero, update di primary keys non sono permessi) Seunlibrononhaautori,ilvaloredidefaultdadefinireè Anonimo La data di restituzione è maggiore o uguale della data di prestito Il campo Note deve contenere sino a 300 caratteri (usare il CAST per vederne il contenuto in modo leggibile) Es.1: DDL e DML base Sistemi Informativi T 7 Esercizio 1 (2) INSERT I1) Si popolinole tabelle con dati validi Dare prima un'occhiata alle query per decidere che dati inserire I2) Si inseriscano tuple non corrette per testare i seguenti vincoli: Primary keys e keys Foreign keys Divieto di valori nulli Restituzione dopo il prestito UPDATE U1) Modifica del numero di telefono dell utente con tessera X (a scelta) U2) Aggiunta di una nota al libro di codice Y U3) Aggiunta della data di restituzione a un prestito DELETE D1) Cancellazione di un utente X (verificare l effetto) D2) Cancellazione del libro con codice Y (verificare l effetto) Es.1: DDL e DML base Sistemi Informativi T 8 4
Esercizio 1 (3) INTERROGAZIONI Q1) Libri con autore Z e nel cui titolo compare la parola W Q2) Utenti con un dato cognome Q3) Prestiti del 2018 (usare la funzione YEAR) Q4) Prestiti in cui la restituzione non è avvenuta lo stesso anno Q5) Codici dei libri presi in prestito da un utente, dati nome, cognome e tel Q6) Come Q5, ma in un certo intervallo di tempo Q7) Come Q6, ma fornendo tutti i dettagli dei libri Q8) Utenti che hanno preso in prestito almeno 2 libri nel 2017 Q9) Utenti che nel 2017 non hanno preso in prestito nessun libro Q10) Utenti che non hanno mai preso in prestito un libro senza autori e che nei commenti include entrambe le parole H e J (a scelta) Es.1: DDL e DML base Sistemi Informativi T 9 5