sql1 structured query language data definition language data manipulation language evoluzione sequel...

31
SQL 1 SQL Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL- 89, SQL-2, … Oracle SQL

Upload: patrizio-campana

Post on 01-May-2015

223 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 1

SQL Structured Query Language

Data Definition Language Data Manipulation Language

Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89,

SQL-2, … Oracle SQL

Page 2: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 2

Programma del corso SQL

linguaggio di definizione dello schema di una base di dati;

specifica delle interrogazioni; uso del linguaggio di interrogazione per la definizione

dei dati; comandi per il controllo e l’accesso ai dati; interazione tra SQL ed i tradizionali linguaggi di

programmazione

PL/SQL SQL*Plus

Page 3: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 3

Terminologia SQL

Relazioni = Tabelle Risultato di una interrogazione = Tabella Tupla = Riga Attributo = Colonna

Nessuna distinzione fra maiuscole e minuscole (ad eccezione delle stringhe)

Page 4: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

EsempioINO INOME LAVORO CAPO DATA_ASS STIPENDIO DIPNO

7369 SMITH IMPIEGATO 7902 17-12-80 800 20

7499 ALLEN VENDITORE 7698 20-2-81 1600 30

7521 WARD VENDITORE 7698 22-2-81 1250 30

7698 BLAKE MANAGER   1-5-81 3850 30

7902 FORD ANALISTA 7566 3-12-81 3000 10

DIPNO DIPNOME CITTA

10 MAGAZZINO CHICAGO

20 RICERCA DALLAS

30 VENDITE NEW YORK

40 MARKETING BOSTON

LIVELLO MINSAL MAXSAL

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

Tabella IMPIEGATI

TabellaDIPARTIMENTO

TabellaSALARI

Page 5: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 5

Tipi di dati elementari char (n) varchar2(n) number(o,d)

integer decimal smallint real

date long

Page 6: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 6

Il valore null null 0 null ‘ ‘

Page 7: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 7

Proprietà delle tabelle L’ordine delle righe è irrilevante Non esistono righe duplicate

(possono però apparire righe duplicate nella risposta ad una query)

Page 8: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 8

Select

select [distinct] <colonna/e> from <tabella>[where <condizione>][order by <colonna/e> [asc | desc]

];

Page 9: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 9

Esempi: selezione di colonne select CITTA, DIPNO from DIPARTIMENTO;

select * from IMPIEGATI; select INOME, DIPNO, STIPENDIO*12 as SALARIO_ANNUO from IMPIEGATI;

Page 10: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 10

Funzioni numeriche +, -, *, /, mod, power, sqrt abs, ceil, floor, sign cos, cosh, sin, sinh, tan, tanh log, ln, exp round, trunc nvl vsize

Page 11: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 11

Funzioni su stringhe ||, concat initcap, lower, upper instr substr, rtrim length lpad, rpad soundex

Page 12: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 12

Funzioni di data add_months, months_between greatest, least last_day, next_day new_time round trunc to_char, to_date

Page 13: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 13

Esempi: distinct e order by select DIPNO from IMPIEGATI; select distinct DIPNO from IMPIEGATI;

select INOME, DIPNO, DATA_ASS from IMPIEGATI order by DIPNO [asc], DATA_ASS desc;

Page 14: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 14

Esempi: selezione di tuple select LAVORO, STIPENDIO from IMPIEGATI

where (CAPO = 7698 or CAPO = 7566) and STIPENDIO > 1500;

Page 15: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 15

Operatori nella clausola where

logici: and, or di confronto: =, !=, <>, >, <, <=, >= di appartenenza: in, not in

select * from DIPARTIMENTO where DIPNO in (20, 30);

di valore nullo: is null, is not null select * from IMPIEGATI where CAPO is not null;

di rango: between … and …, not between … and …

select INO, INOME, STIPENDIO from IMPIEGATI where STIPENDIO between 1500 and 2500;

Page 16: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 16

Funzione “like” % carattere jolly _ marcatore di posizione Esempi

… where CITTA like '%YORK%' … where CITTA not like '_A%' … where CITTA like '%A%'

Page 17: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 17

Funzioni di gruppoOperano su un gruppo di righe calcolando

un singolo valore da un insieme di valori di una colonna

count: conta il numero di righe per una colonna

select count(*) from IMPIEGATI; select count(distinct LAVORO) from IMPIEGATI;

select count(*) from IMPIEGATI where LAVORO='VENDITORE';

conta anche eventuali valori null

Page 18: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 18

Funzioni di gruppo (2) max: calcola il massimo dei valori di una

colonna min: calcola il minimo dei valori di una

colonna select min(STIPENDIO), max(STIPENDIO) from IMPIEGATI;

select max(STIPENDIO)-min(STIPENDIO) from IMPIEGATI;

select max(CITTA) from DIPARTIMENTO; ignorano le tuple che hanno valore null nella

colonna specificata

Page 19: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 19

Funzioni di gruppo (3) sum: calcola la somma dei valori di una

colonna avg: calcola la media dei valori di una

colonna select sum(STIPENDIO) from IMPIEGATI where DIPNO=30;

select avg(STIPENDIO) from IMPIEGATI where LAVORO='VENDITORE';

ignorano le tuple che hanno valore null nella colonna specificata

applicabili solo a dati numerici

Page 20: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 20

Definizione dei dati

create table <nome_tabella> (<colonna> <tipo_dati> [default]

[<vincoli_di_colonna>]{, <colonna> <tipo_dati> [default]

[<vincoli_di_colonna>]}{, <vincoli_di_tabella>});

Page 21: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 21

Nomi di colonna e di tabella devono iniziare con una lettera possono contenere numeri e _ possono essere lunghi fino a 30

caratteri i nomi di colonna devono essere

unici all’interno di una tabella

Page 22: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 22

Esempiocreate table IMPIEGATI (INO number(4),INOME varchar2(30),LAVORO char(10),CAPO number(4),DATA_ASS date,STIPENDIO number(7,2),DIPNO number(2));

Page 23: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 23

describe per vedere la struttura di una

tabella si puo’ usare il comando

describe <nome_tabella>;

Esempio: describe IMPIEGATI;

Page 24: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 24

Vincoli

[constraint <nome_vincolo>] primary key | unique | not null

Page 25: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 25

not null richiede che i valori dell’attributo

corrispondente siano diversi da nullcreate table IMPIEGATI (INO number(4) not null,INOME varchar2(30),LAVORO char(10),CAPO number(4),DATA_ASS date,STIPENDIO number(7,2),DIPNO number(2));

Page 26: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 26

unique richiede che i valori dell’attributo

corrispondente siano tutti distinti (i valori null sono ammessi e non violano tale vincolo)

create table IMPIEGATI (INO number(4) not null unique ,INOME varchar2(30)unique,LAVORO char(10),CAPO number(4),DATA_ASS date,STIPENDIO number(7,2),DIPNO number(2));

Page 27: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 27

primary key definisce un identificatore unico per

ogni tupla non ammette valori null

create table IMPIEGATI (INO number(4) constraint PK_IMP primary key,INOME varchar2(30) not null,LAVORO char(10),CAPO number(4),DATA_ASS date,STIPENDIO number(7,2),DIPNO number(2));

Page 28: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 28

Esempio

create table PROGETTO (PNO number(3) constraint pk_prg primary key,

PNOME varchar2(60) unique,PMGR number(4) not null,COMPONENTI number(5),BUDGET number(8,2) not null,PSTART date,PEND date

);

Page 29: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 29

default consente di specificare un valore di

default da assegnare ad un attributo quando ad esso non viene assegnato alcun valore

PSTART date default (’01-JAN-01’),

Page 30: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 30

Vincoli di tabella

I vincoli unique e primary key possono essere riferiti a piu’ colonne.

In tal caso i vincoli devono essere definiti dopo che sono state definite tutte le colonne interessate

constraint DATE_DIVERSE unique(PSTART, PEND)

Page 31: SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-

SQL 31

Checklist Quali attributi delle tuple devono essere

memorizzati? Quali sono i tipi di dati degli attributi? Puo’ essere usato varchar2 al posto di char? Quali colonne costituiscono la chiave primaria? Quali colonne non ammettono valori nulli? Quali colonne non ammettono valori duplicati? Ci sono valori default per certe colonne?