per l’interrogazione
di basi di dati
Breve storia dell’SQL
SQL: Structured Query Language
SQL sviluppato alla IBM nel 1973
Dal 1983 standard de facto
Primo standard nel 1986 rivisto nel 1989 (SQL-89)
Secondo standard nel 1992 (SQL-2 o SQL-92)
Terzo standard nel 1999 (SQL-3 o SQL-99)
Quasi tutti i DBMS commerciali adottano lo standard SQL piu’ estensioni
proprie (non-standard)
Alcuni sistemi commerciali
Oracle, Informix, Sybase, DB2, SQL-Server, etc.
Alcuni sistemi open-source:
MySQL, Postgres
Esistono sistemi commerciali che utilizzano interfacce tipo QBE (Query by
Example): ACCESS
Tuttavia hanno sistemi per la traduzione automatica in SQL
Tabella 1 Tabella 1
Join
Tabella 1 Tabella 2
DB - SQL per interrogazione basi di dati 4
SELECT
SELECT [DISTINCT] EsprAttributi
FROM Tabelle
[WHERE Condizione]
La query
1. considera il prodotto cartesiano tra le Tabelle
2. fra queste seleziona solo le righe che soddisfano Condizione
3. e infine valuta le espressioni specificate in EsprAttributi
(chiamata anche “Target List”)
La SELECT implementa gli operatori Ridenominazione
Proiezione, Selezione e Join dell’algebra relazionale
Piu’ altro che vedremo piu’ avanti
Vorrei conoscere
indirizzo e telefono di
Teo Verdi
Corsi
CORSO PROFESSORE
Programmazione Ferro
Architetture
Matematica Discreta
Pappalardo
Lizzio
Quali Professori hanno
dato piu' di 24 a Teo
Ferro Programmazione Verdi ed in quali corsi?
Pappalardo Architetture
DEPTNO LOC
--------- -------------
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON
Operatore Descrizione
+ Somma
- Sottrazione
* Moltiplicazione
/ Divisione
NAME SALARY
------------- ---------
...
DEPTNO
---------
10
30
10
20
...
14 rows selected.
DEPTNO
---------
10
20
30
IMPIEGATI
EMPNO ENAME JOB ... DEPTNO
Condizione : := Predicato |
“(“Condizione”)” | NOT Condizione |
Condizione (AND | OR) Condizione
= Uguale a
< minore di
<> diverso
Equivale a
[NOT] Espr2 Espr1 AND Espr1Espr3
ENAME
----------
MARTIN
JAMES
WARD
I’identificatore
ESCAPE (\) deve essere
usato per cercare "%" o "_".
DB - SQL per interrogazione basi di dati 41
Operatori di Match
Attributo [NOT] LIKE Stringa
Dove Stringa puo’ contenere anche:
“_”che fa “match” con qualunque carattere
“%” che fa match con qualunque sequenza di
caratteri
vale U se l’attributo e’ NULL
esempio:
SELECTNome
FROM Studenti
WHERE Telefono IS NOT NULL
T T T T F
T F F T F
T U U T F
F F F F T
F U F U T
U U U U U
U=Unknown;
DB - SQL per interrogazione basi di dati 46
Uso dell’operatore AND
AND richiede entrambe le condizioni TRUE.
SQL> SELECT empno, ename, job, sal
2 FROM emp
3 WHERE sal>=1100
4 AND job='CLERK';
ENAME JOB
---------- ---------
KING PRESIDENT
MARTIN SALESMAN
ALLEN SALESMAN
TURNER SALESMAN
WARD SALESMAN
ENAME DNAME
------ ----------
KING ACCOUNTING
“Prodotto BLAKE ACCOUNTING
Cartesiano: ...
KING RESEARCH
14*4=56 rows” BLAKE RESEARCH
...
56 rows selected.
SQL> SELECT *
2 FROM clienti, ordini, prod
3 WHERE clienti.custid=ordini.custid
AND prod.ordid=prod.ordid;
SELECT Matricola
FROM Esami
WHERE Voto IN ( 18, 19, 20 )
E’ piu’ efficiente.
SELECT s.Nome
FROM Studenti s, Esami e
WHERE s.Matricola = e.Matricola AND
e.Voto > ALL
(SELECT DISTINCT f.Voto
FROM Esami f , Studenti t
WHERE f.Matricola = t.Matricola AND
t.Nome = ‘Mario Rossi’)
SELECT COUNT(*)
FROM Esami
WHERE Corso = ‘Database 1’
MIN(HIRED MAX(HIRED
--------- ---------
17-DEC-80 12-JAN-83
COUNT(*)
---------
6
DEPTNO AVG(SAL)
--------- ---------
10 2916.6667
20 2175
30 1566.6667
AVG(SAL)
---------
2916.6667
2175
1566.6667
DEPTNO MAX(SAL)
--------- ---------
10 5000
20 3000
JOB PAYROLL
--------- ---------
ANALYST 6000
MANAGER 8275
MAX(AVG(SAL))
-------------
2916.6667
SELECT
Studenti.Nome,Esami.Corso,Esami.Voto
FROM Esami NATURAL JOIN Studenti
A UNION B
A INTERSECT B
A MINUS B
SELECT Professore
FROM CP,CMV,MNIT
WHERE CP.Corso = CMV.Corso
AND CMV.Matricola = NMIT.Matricola
AND Nome=‘Paolo Rossi’
AND Voto > 27