LINGUAGGIO SQL. Introduzione



Documenti analoghi
Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

DBMS (Data Base Management System)

SQL (STRUCTURED QUERY LANGUAGE)

Introduzione a MySQL

Basi di Dati: Corso di laboratorio

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Corso sul linguaggio SQL

Lezione del modulo 7 SQL e database del giorno 04/05/2006 tot. ore 3. Lo Standard SQL

Definizione di domini

Lezione V. Aula Multimediale - sabato 29/03/2008

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Gestione delle tabelle

Basi di Da( MySQL & MySQL Workbench. Anna Monreale

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

DBMS: MySQL CORSO DI BASI DI DATI 2014/2015

Al giorno d oggi, i sistemi per la gestione di database

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Istruzioni DML di SQL

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

MySQL Database Management System

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Il linguaggio SQL: DDL di base

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"


SQL Sintassi Dei Comandi

Il linguaggio SQL: le basi

Lezione 8. Metadati, Viste e Trigger

Corso sul linguaggio SQL

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

SQL (STRUCTURED QUERY LANGUAGE)

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Basi di dati e Sistemi informativi aziendali

Laboratorio di Basi di Dati e Web

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Informatica per le discipline umanistiche 2 lezione 10

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

DUE GRUPPI DI COMANDI

Introduzione al linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

Corso di Informatica (Basi di Dati)

SQL - Tipi di dato Il linguaggio SQL

PROGRAMMA DI CLASSE 5AI

Laboratorio di Basi di Dati

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

Corso di Informatica Generale 1 IN1. Linguaggio SQL

OR true null false true true true true null true null null false true null false NOT

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Unità 2.1 Comandi sui database

Linguaggio SQL: fondamenti. Basi di dati. Elena Baralis Pag. 1. Linguaggio SQL: fondamenti. Sistemi informativi. Introduzione

Il linguaggio SQL: le basi. Versione elettronica: SQLa-basi.pdf

Corso di Laboratorio di Basi di Dati

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Volumi di riferimento

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

SQL: Concetti Base -Prima Parte-

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Basi di Dati Corso di Laura in Informatica Umanistica

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

L interfaccia a riga di comando di MySql

2104 volume III Programmazione

Operazioni sui database

Vincoli di Integrità

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Structured Query Language parte 1

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

IL DAT A B A S E DI ALGE B R A N D O

Organizzazione degli archivi

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Linguaggio SQL. Structured Query Language

MAX, SUM, AVG, COUNT)

Capitolo 13. Interrogare una base di dati

Sistemi per la gestione di database: MySQL ( )

User Tools: DataBase Manager

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

SQL Manuale introduttivo

SQL PER LA DEFINIZIONE DI BASI DI DATI

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Linguaggio SQL. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Concetti fondamentali dei database database Cos'è un database Principali database

DBMS. DataBase Management System. L. Vigliano

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

OSSIF WEB. Manuale query builder

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

Archivi e Basi di Dati

Transcript:

LINGUAGGIO SQL Introduzione Il linguaggio SQL (Structured Query Language) è un linguaggio di tipo non procedurale o di tipo dichiarativo e rappresenta lo standard per l'interrogazione delle basi di dati relazionali. In realtà la dicitura "interrogazione" che si usa di solito e' piuttosto riduttiva dal momento che esso contiene, oltre ai costrutti di interrogazione (QML - Query Manipulation Language), anche quelli di definizione dei dati (DDL - Data Definition Language) e quelli per la loro manipolazione (DML - Data Manipulation Language). In particolare il termine Structured (strutturato) di SQL è riferito al fatto che si possono inserire comandi all'interno di altri comandi; più in generale si parla di query innestate. Come spesso succede nel mondo dell' informatica anche in questo caso e' nato uno "standard" che avrebbe permesso a tutti di parlare la stessa lingua, ed appena e' nato sono nati così tanti dialetti che non parlano l' uno con l'altro. Lo standard si chiama ANSI SQL (Structured Query Language della American National Standard Institute), e ovviamente sebbene TUTTI dicano che il loro linguaggio e' ANSI Compliant (compatibile con l' ansi SQL) in realtà tutti hanno differenze sostanziali l' uno con l'altro. I più diffusi linguaggi SQL oggi sono (ovviamente) quelle dei più diffusi database relazionali, cioè: Oracle SQL Transact - SQL PostgreSQL MySQL SQLInformix DBII SQL Interbase Non potendo fare un corso su ognuno di essi (in primis perché molti non li conosco) farò riferimento all' ANSI SQL. Le differenze fra le varie versioni dipendono essenzialmente dai prodotti software, tutti in genere si rifanno allo standard de facto adottato nel 1992 detto SQL2 o SQL92, e sono riscontrabili dai manuali stessi. Una estensione a tale standard è l' SQL3 che implementa nuove caratteristiche come la ricorsione e le funzionalità per il trattamento degli oggetti.

Utilizzo di SQL Il linguaggio SQL può essere usato in modalità stand-alone o in modalità embedded (linguaggio ospite). In modalità stand alone le istruzioni possono essere inviate al RDBMS in modalità interattiva o batch (da eseguire in sequenza). In questo caso l'interazione con l'utente avviene direttamente con l'interprete SQL che può mettere a disposizione oltre alla classica riga di comando, menu, finestre, e icone per guidare l'utente nella costruzione di query. In tale caso si parla di ambiente Query Builder. In modalità embedded SQL può essere utilizzato all'interno di altri linguaggi di programmazione, chiamati linguaggi ospite, come C, Pascal, Java, o di linguaggi di scripting quali PHP, JSP o ASP, offrendo la possibilità agli sviluppatori di poter interagire direttamente con il RDBMS. Nel caso in cui il linguaggio ospite non possiede le primitive per l'interfacciamento al DBMS, si ricorre a interfacce standard chiamate ODBC (Open DataBase Connectivity). Ogni produttore software di DBMS fornisce, non sempre gratuitamente, i driver ODBC necessari al collegamento.

Le funzioni di SQL Il linguaggio assolve alle funzioni di: Data Definition Language (DDL) che prevede le istruzioni per la definizione o la modifica della struttura del database relazionale: creare modificare ed eliminare database e relativi schemi;i inoltre è possibile specificare vincoli, sia a livello di tupla (o "riga") che a livello di tabella, definire nuovi domini, oltre a quelli predefiniti. Le istruzioni più importanti sono: ALTER INDEX ALTER TABLE ALTER VIEW CREATE INDEX CREATE TABLE CREATE VIEW DROP INDEX DROP TABLE DROP VIEW RENAME TRUNCATE Modifica i parametri dell indice Modifica la struttura di una tabella Modifica una vista Crea un indice Crea una tabella Crea una vista Elimina un indice Elimina una tabella Elimina una vista Rinomina un oggetto Cancella irrimediabilmente tutte le righe di una tabella Questi comandi, vista la loro potenza e pericolosità, sono spesso resi eseguibili a pochi utenti, tra cui il Data Base Administrator (DBA), che si occupa di installare il software del database, di creare e attivare il DB, di farne periodicamente il backup, di migliorare le performance del DB, di creare e gestire gli utenti che vi accedono e, in generale, di supervisionare l andamento della base dati. Data Manipulation Language (DML) che prevede le istruzioni per la manipolazione dei dati. Interrogare il database; inserire, aggiornare o eliminare i dati memorizzati nelle tabelle. Le istruzioni più importanti sono: SELECT DELETE INSERT UPDATE Seleziona dati da una o più tabelle Elimina i dati da una tabella secondo alcune condizioni. Inserisce nuovi dati in una tabella Modifica i dati di una o più righe di una tabella Data Control Language (DCL) che prevede le istruzioni per abilitare o inibire l accesso ai dati, sia in senso di impostazione della politica di condivisione degli accessi, sia attribuzione dei privilegi sugli oggetti del database. I comandi di controllo della sicurezza permettono di gestire gli accessi al DB e sono: GRANT REVOKE Fornisce un privilegio a un utente o a un gruppo di utenti Toglie un privilegio a uno o piu utenti I comandi di controllo della transazione permettono di gestire le modifiche operate dai comandi di Data Manipulation e sono:

COMMIT ROLLBACK SAVEPOINT LOCK TABLE SET TRANSACTION Rende permanenti le modifiche operate dall inizio della transazione corrente Annulla le modifiche operate dall inizio dell operazione o dall ultimo savepoint e riporta i dati alle condizioni iniziali Stabilisce un punto oltre il quale e possibile effettuare un rollback Impedisce l accesso ad una tabella agli altri utenti Stabilisce determinate proprietà per la transazione corrente

I comandi DDL ALTER Alter index Modifica alcuni parametri dell indice. ALTER INDEX indice STORAGE clausola Parametri: indice: il nome dell indice da creare. Esempio: ALTER INDEX utenti STORAGE(200K); Alter table Modifica la struttura di una tabella; usando Alter Table e possibile: Aggiungere e modificare una colonna. Aggiungere un constraint. Modificare i parametri di dimensionamento della tabella. Abilitare o disabilitare i constraint. ALTER TABLE tabella [ADD {colonna tipo_dato[,... ] constraint definizione[,... ]}] [MODIFY colonna tipo_dato[,... ] ] [DROP CONSTRAINT constraint] [PCTFREE intero] [PCTUSED intero] [STORAGE clausola] Parametri: tabella: il nome della tabella che deve essere modificata. colonna: il nome della colonna che deve essere modificata o aggiunta. costraint: il nome del costraint che deve essere aggiunta o tolto. Esempi: ALTER TABLE cantanti add(categoria decimal(2)); ALTER TABLE cantanti modify (cognome varchar(20));

I comandi DDL CREATE Create table Crea una nuova tabella con un dato nome nel database corrente, specificando la definizione delle colonne ed, eventualmente, permette di riempire tale tabella con il risultato di una interrogazione da altra tabella. CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <nome tabella> [(create_definizione,...)] [table_opzioni] [select_statement] create_definizione: col_name tipo [NOT NULL NULL] [DEFAULT default_value] [AUTO_INCREMENT] tipo: [PRIMARY KEY] [reference_definition] or PRIMARY KEY (index_col_name,...) or KEY [index_name] (index_col_name,...) or INDEX [index_name] (index_col_name,...) or UNIQUE [INDEX] [index_name] (index_col_name,...) or FULLTEXT [INDEX] [index_name] (index_col_name,...) or [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] or CHECK (expr) TINYINT [(length)] [UNSIGNED] [ZEROFILL] or SMALLINT [(length)] [UNSIGNED] [ZEROFILL] or MEDIUMINT [(length)] [UNSIGNED] [ZEROFILL] or INT [(length)] [UNSIGNED] [ZEROFILL] or INTEGER [(length)] [UNSIGNED] [ZEROFILL] or BIGINT [(length)] [UNSIGNED] [ZEROFILL] or REAL [(length,decimals)] [UNSIGNED] [ZEROFILL] or DOUBLE [(length,decimals)] [UNSIGNED] [ZEROFILL] or FLOAT [(length,decimals)] [UNSIGNED] [ZEROFILL] or DECIMAL (length,decimals) [UNSIGNED] [ZEROFILL] or NUMERIC (length,decimals) [UNSIGNED] [ZEROFILL] or CHAR (length) [BINARY] or VARCHAR (length) [BINARY] or DATE or TIME or TIMESTAMP or DATETIME or TINYBLOB or BLOB or MEDIUMBLOB or LONGBLOB or TINYTEXT or TEXT

or MEDIUMTEXT or LONGTEXT or ENUM(value1,value2,value3,...) or SET(value1,value2,value3,...) index_col_name: col_name [(length)] reference_definition: REFERENCES tbl_name [(index_col_name,...)] [MATCH FULL MATCH PARTIAL] [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT CASCADE SET NULL NO ACTION SET DEFAULT table_opzioni: TYPE = {BDB HEAP ISAM InnoDB MERGE MYISAM } or AUTO_INCREMENT = # or AVG_ROW_LENGTH = # or CHECKSUM = {0 1} or COMMENT = "string" or MAX_ROWS = # or MIN_ROWS = # or PACK_KEYS = {0 1} or PASSWORD = "string" or DELAY_KEY_WRITE = {0 1} or ROW_FORMAT= { default dynamic fixed compressed } or RAID_TYPE= {1 STRIPED RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=# or UNION = (table_name,[table_name...]) or DATA DIRECTORY="directory" or INDEX DIRECTORY="directory" select_statement: [IGNORE REPLACE] SELECT... (UNA ISTRZIONE SELECT VALIDA)

SHOW SHOW fornisce informazioni sui database, tabelle, colonne, or informazioni di stato del server. Se viene utilizzata la clausola Like wild, i valori utilizzabili sono "*" e "_". SHOW DATABASES [LIKE wild] SHOW [OPEN] TABLES [FROM db_name] [LIKE wild] SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] SHOW INDEX FROM tbl_name [FROM db_name] SHOW TABLE STATUS [FROM db_name] [LIKE wild] SHOW STATUS [LIKE wild] SHOW VARIABLES [LIKE wild] SHOW LOGS SHOW [FULL] PROCESSLIST SHOW GRANTS FOR user SHOW CREATE TABLE table_name SHOW MASTER STATUS SHOW MASTER LOGS SHOW SLAVE STATUS

I comandi DML Select: è uno dei comandi più importanti del linguaggio SQL, usato per selezionare dati da una o piu tabelle. Si osservi che la clausola SELECT realizza l'operatore di proiezione dell'algebra relazionale, non quello di selezione; quest'ultimo è realizzato dalla clausola WHERE. SELECT [ALL DISTINCT] { * lista_colonne } FROM lista_tabelle [ WHERE condizione ] [ GROUP BY lista_colonne [ HAVING condizione ] ] [ {UNION INTERSECT MINUS} select... ] [ ORDER BY {lista_colonne posizione} [ASC DESC] ] [ FOR UPDATE OF lista_colonne ] Parametri: *: tutte le colonne dell oggetto. ALL: restituisce tutte le righe selezionate. DISTINCT: agisce su tutte le colonne e le righe della select, eliminando le combinazioni duplicate. lista_colonne: una lista separata da virgole di colonne da selezionare. lista_tabelle: una lista di tabelle o viste. condizione: una lista booleana di condizioni usata per discriminare la ricerca delle righe. Insert Aggiunge righe a una tabella. INSERT INTO tabella [lista_colonne] {VALUES lista_valori subquery} Parametri: tabella: nome della tabella in cui inserire le righe. lista_colonne: lista delle colonne che devono essere coinvolte nell inserimento. lista_valori: lista di valori da inserire, nello stesso ordine delle colonne specificate oppure, se le colonne non sono specificate, nello stesso ordine di creazione delle colonne stesse.

subquery: il risultato della selezione sarà inserito nella tabella Esempio: INSERT INTO cantanti (cognome, nome) SELECT first_name, second_name FROM rockers WHERE first_name LIKE 'S%'; Delete: Elimina righe da una tabella o da una vista (solo se e costruita su una sola tabella). DELETE [FROM] tabella [WHERE condizione] Parametri: tabella: il nome della tabella da cui eliminare le righe. condizione: una lista booleana contenente i valori per cui eliminare le righe; se non viene specificata nessuna condizione, la DELETE eliminerà tutte le righe della tabella. Esempio: DELETE FROM città WHERE nazione = 'SPAGNA'; Update: Modifica il contenuto di una tabella o di una vista (solo se e costruita su una sola tabella). UPDATE tabella SET col = expr [,col = expr] [WHERE condizione] Parametri: tabella: il nome della tabella da modificare. col: il nome della colonna. expr: il valore da assegnare. condizione: l eventuale elenco delle condizioni per cui applicare la modifica. Esempio: UPDATE registrazioni SET tipo_supporto = 'CD' WHERE to_char (date,'yyyy') > '1990';

La clausola WHERE Nella parte che segue il WHERE del comando SELECT può essere inserita una qualsiasi espressione booleana (cioè una qualsiasi espressione che, risolta, dia come risultato uno dei due valori booleani (Vero, Falso)) che sia calcolabile, ovviamente nel risultato della query verranno inserite tutte e sole le righe della tabella che rendono vera l'espressione che segue la clausola WHERE (Where Condition). Es: Sia la tabella Dipendenti: Cognome Nome Età Data_assunzione Rossi Mario 40 10/5/1995 Verdi Giorgina 20 1/3/1999 Bianchi Paolo 50 1/6/1975 Gialli Loredana 35 24/9/1989 Rossi Giorgio 46 15/7/1979 La query SELECT * FROM Dipendenti WHERE True ritorna tutta la tabella, mentre la query SELECT * FROM Dipendenti WHERE False non ritorna nulla. La query SELECT Cognome FROM Dipendenti WHERE Età>35 AND (Cognome='Rossi' OR Nome Like 'Paolo') AND Età<>46 ritorna solamente le seguenti righe: Cognome Nome Età Data_assunzione Rossi Mario 40 10/5/1995 Bianchi Paolo 50 1/6/1975 Dopo la where condition possono essere presenti ancora alcuni comandi: GROUP BY HAVING ORDER BY {Campo1, Campo2,...} [ASC DESC] Il più semplice è ovviamente ORDER BY, che serve per ordinare una tabella rispetto ad uno o più campi, le parole chiave opzionali in fondo significano il tipo di ordinamento: ASC ( o niente) sta per ascendente, DESC sta per discendente. Vediamo subito con un esempio come funziona: Es: Con la tabella dell'esempio precedente, la query SELECT * FROM Dipendenti WHERE Età<=40 ORDER BY Cognome DESC ritorna Cognome Nome Età Data_assunzione Verdi Giorgina 20 1/3/1999 Rossi Mario 40 10/5/1995 Gialli Loredana 35 24/9/1989 Se invece non avessimo messo alcunché in fondo o avessimo messo ASC la tabella sarebbe stata ordinata in ordine crescente rispetto al Cognome.

Si può ordinare anche rispetto a più campi, i campi che vengono dopo il primo sono usati per l'ordinamento nel caso in cui i valori del primo sono uguali: SELECT * FROM Dipendenti ORDER BY Cognome, Età Cognome Nome Età Data_assunzione Bianchi Paolo 50 1/6/1975 Gialli Loredana 35 24/9/1989 Rossi Mario 40 10/5/1995 Rossi Giorgio 46 15/7/1979 Verdi Giorgina 20 1/3/1999 Le funzioni di aggregazione Uno dei più utili comandi all'interno della clausola WHERE è sicuramente il GROUP BY, che serve per aggregare i dati secondo alcuni criteri; nelle query con questa clausola si possono usare funzioni che permettono di calcolare medie, somme, massimi, minimi etc; per esempio la funzione COUNT effettua il conteggio delle righe restituite, mentre la funzione AVG effettua la media dei valori dell'intervallo. Nella parte dopo la parola chiave SELECT, che deve contenere i nomi dei campi da estrarre, possono essere messi solo campi contenuti nella clausola GROUP BY o funzioni di calcolo di valori su intervalli (perché? Sai spiegarlo?) Es: Prendiamo ora invece la tabella Progetti: Nome_progetto Ore_uomo Ambito fax 400 Comunicazioni mail 700 Comunicazioni contabilità 3500 Gestionale stipendi 7000 Gestionale SMTP 400 Comunicazioni POP 7000 Comunicazioni inventario 10500 Gestionale La query SELECT Ambito, Count(*) As TOT, AVG(Ore_uomo) AS MEDIA FROM Progetti GROUP BY Ambito Ritorna Ambito TOT MEDIA Comunicazioni 4 2125 Gestionale 3 7000 La funzione AVG effettua la media sui valori contenuti nel campo Ore_uomo, raggruppati secondo il valore contenuto nel campo Ambito. La clausola HAVING pone delle condizioni sulle clausole di gruppo, per esempio per considerare solo i raggruppamenti che hanno più di un certo numero di elementi: Es: con la stessa tabella dell'esempio precedente, la query

SELECT Count(*) As NUM, Ore_uomo FROM Progetti GROUP BY Ore_uomo HAVING Count(*)>1 NUM Ore_uomo 2 400 2 7000 Che si riferiscono ovviamente alla 1, 4, 5 e 6 riga della tabella.