Appunti Informatica 4.5 Mysql
Appunti Informatica 4.5 Mysql
Il linguaggio SQL è un linguaggio molto potente, ad altissimo livello, esso si avvicina praticamente all'
inglese, è suddiviso in categorie che consentono di:
Definire il database, la struttura delle tabelle che lo compongono, gli indici, le associazioni tra le
tabelle e le viste logiche, Data Definition Language (DDL);
Definire gli utenti e controllare gli accessi al database, Data Control Language (DCL), es. comandi:
Grant e Revoke;
Gestire e controllare le transazioni con un sottoinsieme del linguaggio che prende il nome di
Transaction Control Language (TCL), es. comandi: Commit e Rollback.
SQL sfrutta operatori aritmetici, caratteri alfabetici, cifre decimali i quali: +, -, *, /, <, >, =, AND, OR, NOT...
Gli Identificatori (Nomi tabelle e attributi) possono avere un massimo di 18 caratteri e possono avere il
carattere "_"
Per i numeri decimali il valore s indica il numero di cifre che seguono il punto decimale.
I dati numerici floating point sono memorizzati in forma esponenziale; la precisione riguarda solo le cifre
della mantissa e indica il numero di cifre significative del dato.
La parola CHARACTER è equivalente a CHARACTER(1), e può essere abbreviata con CHAR. DECIMAL è
equivalente a DECIMAL(15,0). Altre abbreviazioni sono:
Nelle colonne della tabella gli attributi che hanno un valore non disponibile, o non definito, assumono il
valore Null.
Il valore Null non è mai uguale a nessun altro valore: è diverso dal valore zero per i dati numerici e dalla
stringa vuota (' ') per i dati alfanumerici. Negli ordinamenti il valore Null compare, di norma, all’inizio delle
sequenze crescenti e alla fine delle sequenze decrescenti.
CREATE TABLE, definisce e crea la tabella seguita subito dopo dal nome e dalle parentesi "( )", nella
quale al suo interno vanno definiti i vari attributi con eventuali clausole.
es. es.
Assegnazioni
On Update/Delete
Set null Associa valore null
Cascade Riflette a catena sui valori dell' FK
No action Non esegue alcuna azione
ALTER TABLE, la struttura di una tabella può essere modificata anche in un secondo tempo,
attraverso le clausole ADD, che aggiunge una colonna, oppure DROP, che elimina (e non cancella) la
colonna.
es.
ALTER TABLE
Impiegati
ADD Nascita date;
ALTER TABLE
CREATE INDEX, serve per creare un nuovo indice su una tabella esistente, indicando il nome della
tabella e il nome dell’attributo o degli attributi ai quali associare l’indice. Se non si vuole che ci siano
valori duplicati per l’attributo associato all’indice, occorre usare la clausola UNIQUE.
es.
DROP, cancella un indice o una tabella, seguiti ovviamente dai loro corrispondenti.
es. es.
INSERT INTO, inserisce all' interno di una tabella, già esistente, dei valori negli attributi scelti, è
importante ricordare che dove gli attributi non possono essere nulli vanno aggiunti dei valori.
es.
UPDATE, aggiorna una colonna di una riga già esistente, specificando anche il suo campo.
es.
UPDATE Impiegati
SET Dipartimento = 'Prod'
WHERE ID = 20;
DELETE, effettua la cancellazione di una riga già esistente, specificando anche il suo campo.
es.
DELETE Impiegati
WHERE ID = 20;
È importante specificare come in UPDATE e DELETE appare il la clausola WHERE, essa server a indicare con
più precisione cosa si vuol andare a toccare, per esempio se ci dimentichiamo di inserirlo nel caso di
UPDATE aggiorna tutte le colonne con lo stesso attributo, nel caso di DELETE cancella tutti gli attributi nella
tabella.
es. es.
È anche possibile usare operatori aritmetici per aggiornare una tabella (L' esempio a seguire aumenta del
5% lo Stipendio).
es.
UPDATE Impiegati
SET Stipendio = Stipendio * 1.05
WHERE Dipartimento = 'Prod';
COMANDI SQL: QL(PT.1), INTERROGAZIONI AI DATI
SELECT, riflette la natura dichiarativa del linguaggio SQL, e le interrogazioni sulle tabelle del
database sono eseguite specificando solo cosa si vuole ottenere, senza doversi preoccupare di
problemi quali: le modalità di rappresentazione dei dati e i percorsi per ritrovarli nelle memorie di
massa.
SELECT Espressioni
La tabella, o le tabelle, usate nell’interrogazione.
FROM Tabelle
WHERE Condizioni;
Una espressione logica che specifica quali righe considerare.
Espressione booleana ottenuta componendo confronti con gli
operatori AND OR e NOT.
Da in output Cognome, Nome e Residenza degli Impiegati che lavorano nel Dipartimento ‘Prod’
Da in output tutte le righe, anche duplicate e con valore NULL, aventi le righe secondo la condizione
(In genere il comando è di default per questo spesso viene escluso)
SELECT DISTINCT
Residenza
Da in output tutti le righe della selezione e se ci sono duplicati le riduce ad una (In questo caso
farebbe una lista dove indica in quali città, in generale, vengono tutti gli impiegati)
- Interrogazione con modifica d' intestazione (AS)
Modifica, temporaneamente, l' intestazione della colonna la quale verrà mostrata anche in output
(In questo caso la tabella fa una selezione su ID, Cognome e Nome dalla tabella Impiegati,
modificando ID con Matricola)
È importante che se si vuole controllare la presenza di valori nulli, si deve usare il predicato IS NULL
e non ' ', poiché in quest' ultimo spacebar viene considerato come valore e non come null
COMANDI SQL: QL(PT.2), OPERAZIONI RELAZIONALI
Le operazioni fondamentali dell’algebra relazionale, in SQL, sono realizzate con il comando Select, secondo
le diverse forme consentite dalla sintassi del comando, le quali sono:
Selezione, che estrae da una relazione solo le righe che soddisfano a una certa condizione, viene
realizzata specificando la condizione di selezione nella clausola Where del comando Select.
Proiezione, che permette di ottenere una relazione contenente solo alcuni attributi della relazione
di partenza, si realizza scrivendo l’elenco degli attributi richiesti dopo le parole Select.
Congiunzione, Il comando Select può operare su più tabelle, specificandone i nomi, (separati da
virgola) nella clausola From e scrivendo la condizione di congiunzione (cioè la condizione che fa
corrispondere le righe di una tabella con quelle dell’altra) nella clausola Where. Nella quasi totalità
dei casi si vogliono costruire degli equi-join, per cui la condizione da scrivere nella clausola Where
consiste nell’uguaglianza tra attributi di due tabelle.
Self-join, si attua quando bisogno congiungere una tabella con se stessa, per effettuare l'
interrogazione quindi deve fare riferimento a se stessa ma non può, ha bisogno di una sorta
di clone di se stessa, per questo bisogna usare degli Alias;
es.
Join-esterni, oltre ai join interni il linguaggio SQL permette di costruire dei join che
includono nella congiunzione anche quelle righe di una delle due tabelle che non hanno
corrispondenti nell’altra. Si tratta dei join esterni e, come si è già detto, corrispondono alle
operazioni di left join, right join, full join dell’algebra relazionale.
Prendiamo come esempio il left join (I precedenti elencati funzionano allo stesso modo):
COUNT ( ), da in output una tabella con una singola riga e colonna (Che di default nomina
'Expr1000' +1, a seconda di quante volte viene effettuato), con il conteggio delle righe della
selezione, bisogna specificare però il suo argomento altrimenti si può sempre usare la
clausola '*' la quale conterà anche valori nulli;
SELECT COUNT
(colonna)
Conteggia le righe della colonna selezionata della tabella, se al posto della colonna venisse
messo '*' conteggerebbe anche i valori nulli.
SUM ( ), da in output una tabella con una singola riga e colonna , effettuando la somma di
tutti i valori (Numerici) della selezione;
Viene dato in output una tabella con una riga e due colonne (StipendiAmm,
NuoviStipendiAmm) con: nella prima la somma di tutti gli stipendi degli Impiegati del
Dipartimento 'amm', nella seconda prima la somma di tutti gli stipendi degli Impiegati del
Dipartimento 'amm' con un aumento del 3%.
AVG ( ), da in output una tabella con una singola riga e colonna , effettuando la media
(Inglese, average) di tutti i valori (Numerici) della selezione;
SELECT AVG(Stipendio)
FROM Impiegati, Dipartimenti
WHERE Dipartimento = Codice AND Sede = 'Torino';
MIN ( ) & MAX ( ), stesso output dei precedenti, restituendo rispettivamente il valore
minimo e massimo, valgono anche i valori alfanumerici secondo l' ordine alfabetico.
SELECT SELECT
MIN(Stipendio), MIN(Cognome),
COMANDI SQL: QL(PT.4), ORDINAMENTO E RAGGRUPPAMENTI
ORDER BY, effettua l' ordinamento dei valori inseriti nel suo campo;
es.
In questo caso avremo in output Nome, Cognome e Residenza degli Impiegati ordinati
alfabeticamente per Cognome e Nome.
GROUP BY, raggruppa un insieme di righe aventi lo stesso valore nelle colonne indicate
dalla clausola.
es.
Elenco dipartimenti con la somma degli stipendi e il numero di addetti per dipartimento.
La struttura del comando SELECT con raggruppamenti può essere ulteriormente ampliata
con la clausola HAVING con la quale è possibile sottoporre al controllo di una o più
condizioni i gruppi creati con la clausola GROUP BY.
es.
SELECT Descrizione,
COUNT(ID) AS Dipendenti,
Numero degli addetti e somma degli
SUM(Stipendio) AS Stipendi stipendi per i dipartimenti di Torino
FROM Dipartimento D INNER JOIN Impiegati I con più di 1 addetto.
ON
D.Codice = I.Dipartimento
WHERE Sede = 'Torino'
GROUP BY Descrizione
HAVING COUNT(ID) > 1;
COMANDI SQL: QL(PT.5), CONDIZIONI DI RICERCA
Capita che quando dobbiamo fare delle ricerche più specifiche le condizioni diventano sempre più
complesse, per questo le condizioni di ricerca offrono una serie di comandi per poter semplificare le
espressioni di ricerca (Una condizione di ricerca è costruita anche mettendo insieme più condizioni legate
tra loro con gli operatori AND e OR, precedute eventualmente dall’operatore NOT):
BETWEEN, verifica se il valore è tra un intervallo di due valori (Inclusi gli estremi);
es.
es.
SELECT *
FROM Impiegati
WHERE Residenza IN('Torino','Venezia','Palermo');
es.
LIKE, confronta il valore di un attributo di tipo carattere con un modello di stringa che può
contenere caratteri jolly (o metacaratteri), I caratteri jolly sono:
- _ (underline o underscore) per indicare uno e un solo carattere qualsiasi in quella
posizione della stringa,
- % (percento) per indicare una sequenza di zero o più caratteri in quella posizione della
stringa.
Esempi
LIKE ‘xyz%’ Ricerca le stringhe che iniziano con ‘xyz’ e anche i soli caratteri ‘xyz’;
LIKE ‘%xyz’ Ricerca le stringhe che terminano con ‘xyz’ e anche i soli caratteri ‘xyz’;
LIKE ‘%xyz%’ Ricerca le stringhe che contengono ‘xyz’ e anche i soli caratteri ‘xyz’;
LIKE ‘_xyz’ Ricerca le stringhe di 4 caratteri che finiscono per ‘xyz’.
es.
SELECT E-mail
FROM ListaMail
REGEX '[a-z0-9_\.]+@(gmail|hotmail|
In questo caso stiamo chiedendo di mostrarci l' elenco delle e-mail che abbiano solamente
il dominio gmail o hotmail o altervista.