• Non ci sono risultati.

Linguaggio SQL

N/A
N/A
Protected

Academic year: 2021

Condividi "Linguaggio SQL"

Copied!
17
0
0

Testo completo

(1)

Linguaggio SQL

Structured Query Language

Creato negli anni ’70 presso IBM

Inizialmente solo linguaggio di interrogazione Ora linguaggio di riferimento per DB relazionali Standardizzato grazie al lavoro di ISO (international

standard organization) e ANSI (american national standard institute)

Ne esistono varie versioni:

SQL-89

SQL-92 (o SQL-2) SQL-99 (o SQL-3)

(2)

Esempio: creazione di tabelle

Libri(titolo, autore, codice_isbn)

create table libri ( titolo char(30), autore char(15),

codice_isbn char(13) primary key )

Comando sql

Nome tabella

Domini degli attributi

Vincolo

(3)

Sintassi del comando

create table nome_tab (

nome_attributo Dominio [ValoreDiDefault] [Vincoli]

{, nome_attributo Dominio [ValoreDiDefault] [Vincoli] } [AltriVincoli]

)

[…] indicano che l’elemento è opzionale {…} indica che l’elemento può comparire un numero a

piacere di volte

In rosso i nomi a scelta dell’utente

In blu le parole chiave del comando SQL

(4)

Domini elementari

Alcuni dei più usati domini elementari (predefiniti) che indicano i valori che un attributo può assumere e le

operazioni che possono essere compiute su di esso sono:

Per stringhe di caratteri: character {varying} (lunghezza) Per numeri interi: integer

Per numeri con virgola: float

Per le date: date

(5)

Esempi di numeri

0 12 3

2 4 312 7

integer 0.5

44.673 2.04 3012.81

float

(6)

Stringhe di caratteri

character varying character

varchar char

abbreviazioni

Stringhe a lunghezza variabile Occorre indicare la lunghezza massima

Stringhe di lunghezza data Occorre indicare la lunghezza della stringa

(Aspetti della PROGETTAZIONE FISICA)

NB: se la lunghezza non è specificata verrà lasciato spazio per un singolo carattere

(7)

Vincoli intra-relazionali

A ogni attributo possono essere associati dei vincoli

default valore

indica il valore che un attributo deve avere quando viene inserito un record che, in corrispondenza di quell’attributo non ha assegnato alcun valore

not null

i valori inseriti in quel campo devono essere diversi non nulli

unique

il valore può comparire una volta sola (superchiave)

primary key

chiave primaria

(8)

Esempi

create table libri (

titolo varchar(20) not null,

autore varchar(15) default ‘anonimo’, ISBN varchar(13) not null,

data_acquisto date,

collocazione varchar(5) unique, primary key (ISBN)

)

create table prodotti (

cod_barre varchar(15) not null, marca varchar(10),

costo float default 0, data_acquisto date,

scadenza date,

primary key (cod_barre)

)

(9)

Vincoli inter-relazionali

Sono sostanzialmente vincoli di integrità referenziale, definiti tramite la definizione di chiavi esterne (foreign key)

Studenti(matricola, nome, indirizzo, …)

Esami(studente, corso, voto, data) chiave

chiave esterna

(10)

Esempi: vincoli inter-relazionali

In SQL si utilizza la parola chiave references oppure foreign key (+ attributi coinvolti)

create table prodotti (

cod_barre varchar(15) not null, marca varchar(10),

costo float default 0, data_acquisto date,

scadenza date,

primary key (cod_barre) )

create table fornitura ( prodotto varchar(15)

references prodotti(cod_barre), data date,

costo integer,

fornitore varchar(18)

references fornitori(p_iva), primary key (prodotto,fornitore) )

(11)

Esempio più completo

create table situato_in (

nnn varchar(10) not null, ccc varchar(8) not null, nn1 varchar(8) not null, foreign key(nnn,ccc)

references reparti(nome,collocazione), foreign key(nn1)

references prodotti(nome), primary key(nnn,ccc,nn1)

);

(12)

Eventi ed Azioni

on

delete

update

cascade set default set null no action

foreign key (nome,ufficio)

references persone(id, uff) on delete set null

on update cascade

(13)

Interrogazione del DB

Select ListaAttr from ListaTab where Cond

SQL = linguaggio dichiarativo

Si dice cosa si vuole ottenere e non come ottenerlo

Struttura del comando di interrogazione

target list clausola from

clausola where (opzionale)

(14)

Select-1

nome cognome qualifica tel Andrea Rossi dirigente 338 Renzo Verdi segretario 331 Orestina Verdi segretario 331 Giulia Bianchi tecnico 332 Giulio Neri tecnico 332 Renzo Neri consulente 332

select cognome,qualifica from personale

personale

cognome qualifica

Rossi dirigente Verdi segretario Verdi segretario Bianchi tecnico Neri tecnico Neri consulente proiezione

(15)

Select-2

nome cognome qualifica tel Andrea Rossi dirigente 338 Renzo Verdi segretario 331 Orestina Verdi segretario 331 Giulia Bianchi tecnico 332 Giulio Neri tecnico 332 Renzo Neri consulente 332

select * from personale where tel=331

personale

selezione

nome cognome qualifica tel Renzo Verdi segretario 331 Orestina Verdi segretario 331

(16)

Select-3

Titolo Autore Poesie Bianchi Poesie Rossi Storia Rossi Italiano Verdi

Nome Residenza Bianchi Verona Rossi Padova Verdi Genova

opere residenze

select opere.titolo,opere.autore from opere,residenze

where opere.autore = residenze.nome and residenze.residenza = ‘Padova’

Titolo Autore

Poesie Rossi

(17)

Join

select *

from Autori join Opere

on (Autori.nome=Opere.autore)

tabelle Attributi da correlare

Autori(nome, data_nascita, genere)

Opere(titolo, autore, anno, genere)

Riferimenti

Documenti correlati

tipo CHAR(10) qualifica CHAR(15) facolta CHAR(10) nome CHAR(20) cognome CHAR(20) codice CHAR(4) Docente.

Un tale noleggio può essere rappresentato mediante un array ciascun elemento del quale è una struttura con un campo carattere che identifica il modello di bici e un campo

CREATE TABLE Video ( colloc DECIMAL(4), titolo VARCHAR(30), regista VARCHAR(20), tipo CHAR DEFAULT 'd' );.. 5 Correttezza

• val1, val2, …, valN sono espressioni costanti assegnabili al tipo del selettore (se il tipo del selettore è una classe involucro, devono essere espressioni del tipo

[r]

Scrivere un metodo che, dati un array di interi a (contenente almeno due elementi), un intero v ed un intero k (k>0), restituisce true se in a esistono almeno k coppie di interi,

• mette il flag di stato del nick a connesso e crea una FIFO, se non esiste già, il cui nome corrisponde al nick specificato nel messaggio, questa FIFO

➢ il padre deve richiamare la funzione media_file passando come argomento il valore argv[2], visualizzare il proprio pid e l’esito della chiamata