Caratteristiche generali del linguaggio SQL
Il linguaggio SQL è il linguaggio usato per la gestione dei database relazionali, cioè dei database creati con un DBMS di tipo relazionale.Tale linguaggio standard ha come obiettivo quello di fornire alle diverse aziende un linguaggio comune da usare per creare database compatibili con i diversi DBMS in circolazione come: Access SQL, MySQL, SQL Informix, DBII SQL, Postgre SQL, ecc. Esso serve a definire la struttura delle tabelle di un database, sfruttando i comandi del linguaggio DDL (Data Definition Language); a manipolare i dati contenuti nel database, sfruttando i comandi del DML (Data Manipulation Language); a porre interrogazioni al database sfruttando i comandi del QL (Query Language) e, infine, a gestire gli accessi e i permessi per gli utenti, sfruttando i comandi del DCL (Data Control Language).
Gli operatori relazionali
Agiscono su una o più relazioni per ottenere una nuova relazione (servono a realizzare le interrogazioni sul database) .
Ci sono tre operazioni fondamentali per i database relazionali:
-
Selezione
-
Proiezione
-
Congiunzione
La selezione (select) genera una nuova relazione costituita solo dalle n-tuple della relazione di partenza che soddisfano a una determinata condizione; vengono cioè selezionate le righe con i valori degli attributi corrispondenti alla condizione prefissata.
La relazione ottenuta ha:
- grado uguale
- cardinalità minore o uguale (di solito minore)
esempio
esempio
La proiezione (project) genera una nuova relazione estraendo dalla tabella iniziale due o più colonne corrispondenti agli attributi prefissati.
La relazione risultante ha:
-
grado minore o uguale
- cardinalità minore o uguale a quella di partenza (perché le righe uguali vengono ridotte a una).
Tipi di congiunzione (join)
-
equi-join : corrispondenza di valori uguali per attributi comuni nelle due tabelle.
-
join esterno (outer join) : restituisce le righe dell’una e dell’altra tabella anche se non sono presenti valori uguali per l’attributo comune; di tutte queste vengono combinate solo le righe per le quali il valore dell’attributo comune nella prima tabella trova un valore uguale nella colonna dell’attributo comune nella seconda tabella.
-
left join : elenca comunque tutte le righe della prima tabella congiungendo alle righe della seconda solo quelle per le quali si trovano valori corrispondenti per l’attributo comune.
-
right join : restituisce comunque tutte le righe della seconda tabella e di queste congiunge con le righe della prima tabella solo quelle per le quali si possono trovare valori corrispondenti per l’attributo comune.
-
self-join : vengono combinate righe di una tabella con le righe della stessa tabella quando sono presenti valori corrispondenti per attributi, cioè due attributi con lo stesso dominio.
Esempio
STUDENTI PROVENIENTE DA MACERATA NELLA CLASSE 5A
Abbiamo 3 possibili condizioni:
CONDIZIONE 1: Nessuno.
CONDIZIONE 2: N studenti.
CONDIZIONE 3: Tutti.
Perciò bisognerebbe effettuare una ricerca.
La selezione lavora sulla cardinalità della tabella.
Effettuare una ricerca con una condizione
SELECT nome_campo, nome_campo
FROM nome_tabella, nome_tabella
WHERE condizione
Esempio
SELECT nome, cognome
FROM studente
WHERE citta="Macerata"
Sia sul SELECT sia sul FROM possiamo mettere più campi. Se più di una tabella hanno un attributo con lo stesso nome, la sintassi cambia.
Esempio
SELECT studente.nome, studente.cognome PROIEZIONE------ELENCO DEI CAMPI CHE
DEVONO VISUALIZZARE
FROM studente. istituti
WHERE istituto.nome="Itis" AND istituto.nome="Ipsia";
CONGIUNZIONE TRA LE DUE TABELLE
Per stampare tutti i campi della tabella:
SELECT *
FROM studente, istituto
WHERE istituto.nome="Itis" AND istituto.nome="Ipsia";
Con * stampo tutti i campi sul output del entrambe le tabelle.