LINGUAGGIO SQL (Structured Query Language) Classificazione dei linguaggi che il DBMS (Data Base Management System) mette a disposizione DDL (Data Definition Language) per la creazione dello schema del database (creazione di tabelle, delle associazioni tra tabelle, dei vincoli di integrità e dei controlli relativi alla sicurezza, ossia le autorizzazioni agli accessi e tipi di permessi consentiti agli utenti) DML (Data Manipulation Language) che consente le operazioni di inserimento, modifica e cancellazione dei dati contenuti nel database Query language (linguaggio di interrogazione) per estrarre dal database i dati che soddisfano criteri di ricerca richiesti dall’utente Con il modello relazionale si è imposto come standard il linguaggio SQL (Structured Query Language), un linguaggio dichiarativo che offre tutte le funzionalità di DDL, DML e query language. Un linguaggio dichiarativo NON richiede la scrittura di procedure (algoritmi) per ritrovare i dati richiesti (WHAT, NOT HOW). Esempio: comando SQL usato come query language. Select Cognome, Nome From Studenti Where CodFac = “mat” ANSI (American National Standard Institute) ha standardizzato varie versioni di SQL negli anni ’86, ’98, ’92 e 2002. La versione più diffusa è lo standard SQL/92 (anche standard ISO). I vari produttori implementano SQL con numerose variazioni e adottano lo standard soltanto ad un livello minimo detto Entry Level. 1 QUERY LANGUAGE Comando SELECT SELECT [DISTINCT] [TOP N] attributo1 AS alias1, attributo2 AS alias2, ... FROM tabella1, tabella2, … WHERE criterio di selezione GROUP BY attributo1, attributo2, … HAVING condizione sul raggruppamento ORDER BY attributo1 [DESC], ... Spiegazioni: '*' per 'selezionare tutti gli attributi clausola AS si usa per ridenominare i nomi delle colonne con un ALIAS clausola DISTINCT per eliminare le righe duplicate clausola TOP N per includere nel risultato le prime N righe selezionate dalla query clausola DESC per ottenere l’ordinamento decrescente clausola ORDER BY per ottenere l’ordinamento crescente (default) o decrescente (DESC) i parametri da input sono racchiusi tra parentesi quadre [ ] Operatori: aritmetici: +, -,*,/ , \ (q uoz i ent e senz a rest o), ^ (elevamento a potenza) operatori di confronto =, <> , <, >, <=, >= logici: NOT, AND, OR speciali SQL: LIKE, IN, IS NULL e IS NOT NULL - BETWEEN <valore1> AND <valore2> - inclusione IN (<valore1>, <valore2>, …) - IS NULL e IS NOT NULL per gli attributi opzionali - LIKE “pattern” (carattere jolly * qualsiasi sequenza di caratteri; carattere jolly ? qualsiasi carattere) funzioni e operazioni con le date Year ( <campo_data>) Restituisce l’anno della data Month ( <campo_data>) Restituisce il mese della data Day(<campo_data>) Restituisce il giorno della data Date() Restituisce la data corrente (di sistema) Weekday(<campo_data>) Restituisce il giorno della settimana (1 = dom; 2 = lun; …) <data1> – <data2> Restituisce il numero di giorni compresi tra le due date <data1> +/- <numero> Restituisce una data posteriore / anteriore Funzioni di aggregazione: COUNT(*) Conteggio delle righe SUM(<campo numerico>) Calcolo della somma AVG(<campo numerico>) Calcolo della media MAX(<campo numerico>) Calcolo del massimo MIN(<campo numerico>) Calcolo del minimo 2 DML Comando INSERT INSERT INTO tabella (attributo1, attributo2, …) VALUES (valore1, valore2, …) N.B.: il campo di tipo counter è auto-incrementato e quindi non deve essere incluso nel comando Comando UPDATE UPDATE tabella SET attr = espressione, … WHERE condizione Comando DELETE DELETE * FROM tabella WHERE condizione Query di creazione tabella (contenente i dati selezionati da una tabella esistente) SELECT attributo1, attributo2, … INTO nuova-tabella FROM tabella Query di accodamento (per accodare in una tabella i dati selezionati da un’altra tabella) INSERT INTO tabella SELECT * FROM altra-tabella 3 DDL Tipi di dati previsti dall’SQL SMALLINT: interi su 2 byte INT/INTEGER: interi su 4 byte DEC(P, S) / DECIMAL (P, S): numeri reali con P cifre in totale di cui S dopo la virgola CHAR(N) / CHARACTER(N): stringa lunghe N caratteri fino ad un massimo di 15.000 DATE: formato MM/GG/AA TIME: formato HH:MM COUNTER: contatore BIT: valori sì/no (SQL/02) IMAGE: immagine collegata o incorporata (SQL/02) Mapping tra i tipi di dati SQL/Access e SQL Tipo di dato fornito da Access TESTO MEMO NUMERICO (BYTE) NUMERICO (INTERO) NUMERICO (INTERO LUNGO) CONTATORE NUMERICO (PRECISIONE SINGOLA) NUMERICO (PRECISIONE DOPPIA) VALUTA DATA E ORA (DATA IN CIFRE) DATA E ORA (ORA BREVE 24H) OGGETTO OLE SÌ/NO COLLEGAMENTO IPERTESTUALE Descrizione Tipo SQL fino a 255 caratteri fino a 65535 caratteri interi tra 0 e 255 (1 byte) interi tra -32768 e 32767 (2 byte) interi (4 byte) CHAR(N) CHAR(N) SMALLINT SMALLINT INT numeri univoci sequenziali con incremento unitario corrispondente al tipo Numerico /Intero Reali su 4 byte COUNTER Reali su 8 byte DECIMAL (P, S) Valori per valuta (8 byte) Formato GG/MM/AAAA DECIMAL (P, S) DATE Formato OO.MM TIME Immagine collegata o incorporata Campo contenente un solo valore tra 2 (on/off, vero/falso, sì/no) Indirizzo internet nel formato URL (Uniform Resource Locator) IMAGE BIT CREATE TABLE CREATE TABLE tabella (attr1 tipo1 [NOT NULL], ….. attrN tipoN [NOT NULL], PRIMARY KEY (attr1, …), FOREIGN KEY (attr1, …) REFERENCES tabella(attr1, …), … ) 4 DECIMAL (P, S) CHAR(N)