











Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti su base dati (database relazionali) e approccio pratico al linguaggio SQL , ideale per lo studio e/o il ripasso sia per la preparazione universitaria che per lo studio in qualsiasi ambito accademico.
Tipologia: Appunti
1 / 19
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!












Cos’è un database?............................................................................................................................................ 1 I database e i suoi motori .................................................................................................................................. 1 Database Administrator e Relazioni .................................................................................................................. 2 Progettazione del database ............................................................................................................................... 3 Esercizio 1 svolto e corretto .......................................................................................................................... 5 SQL (Structure Query Language) ....................................................................................................................... 7 DDL e DHL ...................................................................................................................................................... 7 MySQL Workbech e create database ............................................................................................................ 8 La sintassi del CRUD....................................................................................................................................... 8 La clausola Distinct .................................................................................................................................. 12 Show e Show Tables .................................................................................................................................... 12 Inner Join ..................................................................................................................................................... 12 SubQuery ..................................................................................................................................................... 14 Integrità Referenziale e Foreign Key ........................................................................................................... 14 Esempio di Query effettuate ....................................................................................................................... 14
Esistono diverse tipologie di database, il primo file di tipo database era di tipo: Campo (^) Valore di campo
*.DBF (Database Format), dove ogni file era una tabella da lì si sono sviluppati in:
*1. .XSLX , cioè “excel”
In una “Istanza”, posso gestire più tabelle, appartenente a più gruppi. Per lavorare con le istanze posso accedere da qualsiasi parte voglia, compilando le credenziali , composte da “nome utente” e “password”. Colui che gestisce l’istanza è il Database Administrator (DBA), cioè gestisce gli accessi al database creando nuovi utenti per l’accesso. Esso “logga”, cioè registra tutti i movimenti effettuati all’interno del database, in quanto responsabile penalmente per il database. La relazione tra le tabelle può essere di tipo “logica” cioè è stabilita dal programmatore, che deve controllare i dati, gestirli e manipolarli. La relazione “fisica” invece significa portare a conoscenza il database che le tabelle sono relazionate creando la “Foreign Key” cioè chiave esterna, così facendo, se inserisco dati non esistenti, non me lo farà inserire. Creando la Foreign Key applico “L’integrità Referenziale” , cioè che le tabelle hanno una foreign key, in modo che il database garantisca l’integrità referenziale dei dati, cioè la relazione corretta tra i database. Le foreign key possono essere multiple in una tabella, a differenza della primary key che deve essere univoca. La relazione tra “cliente” e “fatture” è detta 1: infinita perché un cliente può avere più fatture ma la fattura non può avere più clienti. La relazione viene mostrata graficamente con frecce come di seguito. Max 300.000 schede Sono Motori di Database
In questa situazione , ogni veterinario può avere più specializzazioni , e ogni specializzazione può essere assegnata a più veterinari. Per ottimizzare l’anomalia, creiamo una nuova tabella dove inseriremo le foreign key delle tabelle Veterinari e Specializzazioni (le altre tabelle non avranno Foreign Key).
Esercizio 1 svolto e corretto (^) ENTITA’
(Però così facendo c’è il rischio di ripetere la fatturazione per lo stesso ” foglionoleggio ”).
Il linguaggio del database è univoco per tutti i database, e si chiama “Structure Query Language” (SQL). Questo perché il database non riconosce linguaggi diversi da SQL. Diverso dal linguaggio SQL, è il motore di database “MySQL Server” che è appunto un motore. Dunque, per poter gestire l’istanza (l’ambiente database), si deve usare un software chiamato “Workbench”, che si connette al database per gestirlo. Grazie a Workbench ci connettiamo al database come se fosse Java quindi, qualsiasi applicazione esterna che cerca di estrarre dati dal database deve parlare il linguaggio SQL, che non è un linguaggio “procedurale”, in quanto SQL riceve “in blocco” le operazioni da svolgere, e le esegue insieme, dando un feedback finale. Una volta imparato il linguaggio SQL su Workbench possiamo usare ciò che abbiamo appreso in ambiente JAVA. In SQL si parla del concetto di transazione, cioè un operazione che si apre, si esegue e si chiude , detta comunemente istruzione SQL. Fino a che tutto il blocco d’istruzione non è stato eseguito, la transazione non può dirsi conclusa. Tuttavia, non sempre le istruzioni SQL da eseguire vanno a buon fine. Infatti possono esserci due riscontri:
SQL → Linguaggio non procedurale (cioè esegue un blocco di istruzioni) Le istruzioni si dividono in diverse aree:
sintassi Campi da popolare tra parentesi Sintassi di valore Tra gli apici inserisco la stringa, gli interi senza apici
In SQL ci sono delle clausole che sono degli elementi aggiuntivi per operare che sono: La sintassi è: SELECT * FROM tabella WHERE costo > 220 Questo ci restituirà tutti i costi maggiori di 220 Con “ Like ” posso usare anche il simbolo “%”. %lina per individuare stringhe nella tabella che finisco per “lina” (esempio abbiamo ‘Berlina’, ci restituirà Berlina perché finisce con %lina) posizionando la percentuale dopo cerchiamo le iniziali, quindi mantenendo lo stesso esempio dico: berl% che mi restituirà ‘Berlina’ SELECT * FROM tabella WHERE descrizione like ‘%lina’ SELECT * FROM tabella WHERE descrizione like ‘berl%’ Con l’underscore, cioè con il simbolo “_” utilizzando sempre lo stesso esempio voglio cercare berlina ma non so se ho scritto berlina o berlino, scrivo ‘berlin_’, quindi lui mi restituirà berlina o berlino fregandosene dell’ultimo parametro che inserirà lui. O magari ricordo solo vari parametri: SELECT * FROM tabella WHERE descrizione like ‘berlin_’ SELECT * FROM tabella WHERE descrizione like ‘b_rl_n_’ And e Or
Poi abbiamo is null e is not null che servono per sapere se quei campi sono popolati o no SELECT * FROM tabella WHERE descrizione is null SELECT * FROM tabella WHERE descrizione is not null Abbiamo Order by(campo1) che ci ordina i valori in senso crescente in base al campo o in ordine decrescente come in esempio: SELECT * FROM tabella ORDER BY costo desc descrizione Abbiamo Group by(campo1) che ci raggruppa i dati in base al campo scelto, esempio se stiamo raggruppando le persone, la sintassi è questa: SELECT COUNT() FROM tabella GROUP BY nomi; Così però usciranno anche i nomi che sono stati ripetuti più volte, inserendo invece il campo che vogliamo raggruppare evitiamo il doppio, scrivendo così: SELECT COUNT() nomi from archivio GROUP BY nomi E’ buona cosa dopo aver fatto un group by mettere anche un order by per vedere non solo il raggruppamento ma anche un ordine che sia crescente o decrescente. Abbiamo having che filtra i dati che ho raggruppato in group by.
c_id cognome nome r_id 4 Terragna Elisabetta 2 5 Verdi Marco Zero La tabella mostra due peculiarità: i collaboratori Rossi e Padovan lavorano nello stesso reparto. Il dipendente Verdi non è stato ancora assegnato a un reparto. La tabella “reparti” elenca tutti i reparti dell'azienda, compresi ID e ubicazione. Tabella: reparti r_id denominazione città 1 Distribuzione Roma 2 IT Milano 3 Personale Firenze 4 Ricerca Milano Entrambe le tabelle sono collegate da una relazione a chiave esterna. L'ID del reparto, che funge da chiave primaria nella tabella “reparti”, è stato integrato come chiave esterna nella tabella “collaboratori”. Questo collegamento ci permette di avere una inner join in entrambe le tabelle. Ciò è necessario, ad esempio, per determinare dove un collaboratore stia lavorando. Quando si interrogano database relazionali, la corrispondenza tra la chiave primaria e la chiave esterna viene solitamente definita come condizione di selezione. La condizione si considera soddisfatta se la chiave esterna selezionata di una tabella corrisponde alla chiave primaria dell'altra tabella (=). Ciò significa che vengono restituiti solo i record di dati che contengono valori comuni. Una inner join simile è annotata nell' algebra relazionale come segue. collaboratori⋈r_id=r_idreparti Tuttavia, i sistemi di database relazionali non accettano comandi nella sintassi dell'algebra relazionale, ma sotto forma di dichiarazioni SQL. SELECT * FROM collaboratori INNER JOIN reparti ON collaboratori.r_id = reparti.r_id; come nell’esempio visto insieme la sintassi era questa: SELECT * FROM VETTURE INNER JOIN TIPOLOGIA ON VETTURE.IDTIPOLOGIA=TIPOLOGIA.IDTIPOLOGIA
Così facendo, vedrò i dati combacianti tra tutte le tabelle (vetture, tipologia e marche). Se ci fossero delle ambiguità nei nomi dove magari ci sono due campi simili come descrizione vettura e descrizione tipologia, basta specificare davanti al nome del campo il nome della tabella usando questa sintassi: SELECT tipologia.descrizione FROM VETTURE SubQuery La SubQuery è una query innestata in un’altra, si scrive nelle parentesi tonde e restiuisce un solo risultato! Mi raccomando, UN SOLO RISULTATO. Integrità Referenziale e Foreign Key Finora abbiamo liberamente popolato le tabelle perché non avevamo relazionato fisicamente le tabelle, per farlo, le tabelle devono essere per consiglio vuote perché non possiamo effettuare verifiche su dati già immessi. Per applicare l’integrità referenziale dobbiamo creare la foreign key, per farlo dobbiamo impostarlo sul workbench o sull’ambiente di sviluppo modificando la struttra della tabella utilizzando la sintassi come segue: vetture_tipologie Esempio di Query effettuate
select marche.descrizione as Marca_Auto, tipologia.descrizione as Tipo_Auto, avg(costoacquisto) as mediacosto from vetture inner join marche on marche.idmarche=vetture.idmarca inner join tipologia on tipologia.idtipologia=vetture.idTipologia group by Marca_auto,Tipo_Auto
select idmarche from marche where descrizione like 'ford'), ( select idtipologia from tipologia where descrizione like 'cassonato' ) )