Una attenzione particolare deve essere rivolta al linguaggio di accesso alla base di dati. Oggi questa componente tende ad essere staccata dal linguaggio di programmazione, a differenza di un tempo dove le primitive di accesso al database erano costruite direttamente nel COBOL o nel dBase.
Questa politica permette di sviluppare applicazioni indipendenti dal database, e di avere applicazioni scritte con linguaggi diversi che accedono alla stessa base di dati.
In ambienti con più computer, unificare la "lingua" di accesso ai dati, permette di realizzare architetture dove gli archivi sono concentrati in grossi mainframe, mentre le applicazioni girano su personal computer, in una intelligenza distribuita (client/server).
Il linguaggio che si sta diffondendo a questo scopo è SQL. Le istruzioni di SQL sono estremamente semplici e possono essere incluse all’interno di programmi scritti in linguaggi tradizionali come il C o il COBOL. Un preprocessore traduce le istruzioni SQL in una serie di chiamate a librerie che eseguiranno effettivamente il collegamento con il database.
Le principali istruzioni SQL sono SELECT, per interrogare la base di dati, INSERT per aggiungere nuove tuple, UPDATE per variare dei dati già contenuti nell’archivio, DELETE per cancellare delle tuple.
L’istruzione SELECT ha una forma del tipo:
SELECT <attributi>
FROM <tabella>
WHERE <condizione>
per esempio, per interrogare un archivio di clienti per ottenere i dati di un preciso cliente:
SELECT nome, indirizzo, città
FROM clienti
WHERE codice="00001"
o per ottenere tutti i clienti di una determinata città:
SELECT *
FROM clienti
WHERE citta="Rimini"
Come si nota la risposta di SQL non è una singola tupla, ma sempre una serie di tuple, tutte quelle che rispondono al criterio specificato.
Con l’istruzione SELECT si possono interrogare contemporaneamente più archivi. Immaginiamo di avere un archivio dipendenti, e di voler selezionare tutti quelli che lavorano ad un progetto per cui sono stati stanziati più di 10000$.
SELECT nome,cognome,descrizione
FROM dipendenti,progetti
WHERE dipendenti.cod_progetto = progetti.cod_progetto and progetti.budget=10000
Anche le istruzioni che operano sulle tuple per variarle seguono la stessa logica.
DELETE progetti
WHERE budget<5000
UPDATE progetti
SET budget = budget * 1.1
WHERE budget>10000
Le istruzioni SQL possono essere inserite all’interno di un programma scritto in un qualunque linguaggio. Un preprocessore traduce poi le istruzioni SQL in chiamate opportune alle librerie del database.
Vediamo uno spezzone di programma scritto in C con chiamate a SQL.
char num_ord[10], nome_prod[20];
int qta_prod;
EXEC SQL PREPARE ins_ord FROM
INSERT INTO ordini
VALUES (:num_ord, :nome_prod, :qta_prod);
write("Immettere numero ordine");
read(num_ord);
write("Immettere prodotto e quantità");
read(nome_prd);read(qta_prod);
while (nome_prod != "end")
{
EXEC SQL EXECUTE ins_ord USING :num_ord, :nome_prod, :qta_prod;
read(nome_prd);read(qta_prod);
};