• Non ci sono risultati.

STRUCTURED QUERY LANGUAGE

N/A
N/A
Protected

Academic year: 2021

Condividi "STRUCTURED QUERY LANGUAGE "

Copied!
21
0
0

Testo completo

(1)

ISTITUTO TECNICO INDUSTRIALE STATALE

"Leonardo da Vinci"

Rimini

ESAME DI STATO a. s. 2010 – 2011

Manuale di Informatica con i seguenti argomenti:

SQL MySQL HTML PHP

(2)

Indice

Indice ... 2

STRUCTURED QUERY LANGUAGE ... 4

Data Definition Language (DDL) ... 4

Operazioni sulle TABELLE ... 4

DDL ... 4

Definizione della Tabella ... 4

Inserimento di un nuovo Attributo ... 4

Cancellazione di un Attributo ... 4

Sostituzione del campo chiave con altro campo ... 4

Modificare il tipo di un campo ... 4

Creazione di un Indice ... 4

Cancellazione di una Tabella ... 4

Cancellazione di un Indice ... 4

Rinominare una tabella ... 4

Rinominare un campo ... 4

Manipolazione dei dati (DML) ... 5

Operazione sui DATI ... 5

DML ... 5

Inserimento di un nuovo Record ... 5

Cancellazione di un Record ... 5

Modifica di un Campo ... 5

Query Language (QL) ... 5

Interrogazione dei dati: comando SELECT ... 5

Struttura generale ... 5

Predicato ALL ... 5

Predicato DISTINCT ... 5

Clausola AS ... 5

Select con Parametri ... 6

Operazioni Relazionali ... 6

Selezione (opera una selezione delle righe) ... 6

Proiezione (opera una selezione delle colonne) ... 6

Congiunzione ... 6

Esempi di Selezione, Congiunzione e Proiezione insieme ... 6

Clausola INTO ... 6

Comando INSERT INTO ... 6

Funzioni di AGGREGAZIONE ... 7

Funzione COUNT ... 7

Funzione SUM ... 7

Funzione AVG ... 7

Funzione MIN e MAX ... 7

Ordinamenti ... 8

Clausola ORDER BY ... 8

Raggruppamenti ... 8

Clausola Group By ... 8

Clausola HAVING ... 8

Condizioni di ricerca ... 8

Operatore BETWEEN ... 8

Operatore IN ... 9

Operatore LIKE ... 9

(3)

Comandi per la sicurezza (DCL) ... 9

Comandi GRANT e REVOKE ... 9

Le VISTE ... 9

Comando CREATE VIEW e DROP VIEW ... 10

Interrogazioni nidificate ... 10

Alcuni esempi ... 10

Predicato ANY ... 10

Predicato ALL ... 11

Predicato IN ... 11

Predicato EXISTS ... 11

Età di una persona ... 11

JOIN in ACCESS ... 12

Predicato JOIN (2 tab)... 12

Predicato JOIN (3 o + tab) ... 12

HTML ... 13

Elementi di base di un documento HTML ... 13

Tabella ... 13

FORM ... 13

Elementi di un Form... 13

MySQL ... 14

Numerici ... 14

Data e ora ... 14

Stringhe ... 14

Le principali funzioni incluse in MySQL ... 15

Funzioni matematiche ... 15

Funzioni per le stringhe di caratteri ... 15

Funzioni data e ora ... 16

Altre Funzioni ... 17

PHP ... 18

Funzioni per la gestione degli array ... 18

Funzioni MySQL ... 18

Riempimento tabella HTML ... 20

Gestione delle sessioni ... 20

Altre funzioni ... 20

Istruzioni PHP ... 21

(4)

STRUCTURED QUERY LANGUAGE

Data Definition Language

Operazioni sulle TABELLE D

D L

Definizione della Tabella

CREATE TABLE nomeTabella (NomeCampo1 Tipo,

NomeCampo2, Tipo [not null]*, ……….

Primary Key(NomeCampo1),

Foreign Key (NomeCampox) references NomeTabellax(NomeCampoTabellax) [ON DELETE azione**]

[ON UPDATE azione**]

) ;

* in tutte le righe della tabella questa colonna deve essere riempita

** azione può essere

-CASCADE =in caso di cancellazione o modifica della chiave nella tabella padre vengono aggiornati o cancellati anche tutti i record collegati nella tabella figlia;

-SET NULL= in caso di modifica della chiave o cancellazione del record nella tabella padre, nei record collegati della tabella figlia la chiave esterna viene impostata a NULL;

-RESTRICT viene impedita la modifica della chiave o la cancellazione di un record che ha record collegati nella tabella figlia, E’ il valore di default.

Creazione della tabella Dipendenti con chiave primaria numerica che si incrementa automaticamente

CREATE TABLE Dipendenti (

Matricola int not null auto_increment, CodAz char(5),

Cognome char(30) not null, Nome char(30)

Livello smallint, Primary key(Matricola),

Foreign key (CodAz) references Aziende(CodAz)

ON DELETE RESTRICT ON UPDATE CASCADE );

Inserimento di un nuovo Attributo ALTER TABLE nomeTabella

ADD nomeAttributo Tipo [AFTER nomeCampo];

Aggiunta del campo Nascita dopo il campo Nome ALTER TABLE Personale

ADD Nascita date AFTER Nome;

Cancellazione di un Attributo ALTER TABLE nomeTabella

DROP nomeAttributo;

Eliminazione del campo Livello ALTER TABLE Personale DROP Livello;

Sostituzione del campo chiave con altro campo

ALTER TABLE nomeTabella Drop Primary Key, ADD Primary Key(nuovoCampoChiave);

Il campo chiave passa da Matricola a codice fiscale

ALTER TABLE Personale Drop Primary Key, ADD Primary Key(‘cod_fisc’);

Modificare il tipo di un campo ALTER TABLE nomeTabella

CHANGE nomeCampo nuovoTipo;

Il campo quant della tabella vendite passa da int a float ALTER TABLE vendite

CHANGE quant float;

Creazione di un Indice

CREATE [UNIQUE]* INDEX nomeIndice ON nomeTabella (Attributi1, Attrib2..);

* se non si vogliono valori duplicati

Creazione indice Ipers

CREATE UNIQUE INDEX Ipers ON Personale (Cognome, Nome);

Cancellazione di una Tabella DROP TABLE nomeTabella;

Cancellazione tabella Personale DROP TABLE Personale;

Cancellazione di un Indice

DROP INDEX nomeIndice ON nomeTabella;

Cancellazione indice Ipers

DROP INDEX Ipers ON Personale;

Rinominare una tabella

ALTER TABLE nomeVecchio RENAME nomeNuovo;

Rinominare la tabella Personale in Dipendenti

ALTER TABLE ‘Personale’ RENAME ‘Dipendenti’;

Rinominare un campo ALTER TABLE nomeTabella

Rinominare il campo Stipendio in StipBase ALTER TABLE Personale

(5)

Manipolazione dei dati (DML) Operazione sui DATI D

M L

Inserimento di un nuovo Record INSERT INTO nomeTabella

(Campo1, Campo2, …….. Campon) VALUES (‘Dato1’, ‘Dato2’, ………, Daton);

Inserimento di un nuovo dipendente INSERT INTO Personale

(Matricola, Cognome, Nome, Livello) VALUES (‘AB541’, ‘Rossi’, ‘Mario’, ‘Impiegato’);

Cancellazione di un Record

DELETE FROM nomeTabella WHERE

[campoChiave=’ValoreChiave’]; Condizion

Cancellazione record per cui la matricola è AQ123 DELETE FROM Personale

WHERE matricola=’AQ123’;

---

Cancellazione dei record per cui lo stipendio è inferiore a 750 DELETE FROM Personale

WHERE stipendio < 750;

Modifica di un Campo UPDATE nomeTabella SET campo=’dato’

WHERE

[campoChiave=’ValoreChiave’];

CONDIZIONE

Cambiare il livello del dipendente con matricola AA345 UPDATE Personale

SET Livello = 6

WHERE Matricola = ‘AA345’;

---

Aumentare lo stipendio del 5% a tutti i dipendenti con livello superiore a 5

UPDATE Personale

SET Stipendio=Stipendio*1.05 WHERE Livello > 5;

Query Language

Interrogazione dei dati: comando SELECT

Struttura generale

SELECT [*] Campo1, Campo2, ….. Campon FROM Tabella1, Tabella2, ……. Tabellan WHERE Condizione; **

* Mettendo l’* si intendono tutti gli attributi

** Si possono combinare più condizioni con gli operatori OR, AND e NOT

Elenco degli Impiegati della provincia di Milano * SELECT Cognome, Nome

FROM Personale

WHERE Funzione=’Impiegato’ AND Prov = ‘MI’;

*Interessa sapere solo il Cognome e Nome

Predicato ALL

Indica la richiesta di tutte le righe che soddisfano le condizioni del comando. Essendo di default non è necessario specificarlo

Elenco dei dipendenti di Milano SELECT ALL * FROM Personale

WHERE Prov = ’MI’; è equivalente a…..

SELECT * FROM Personale WHERE Prov = ’MI’;

Predicato DISTINCT

Le righe che risultano doppie sono ridotte a una.

SELECT DISTINCT nomeCampo FROM nomeTabella;

Elenco di tutte le Funzioni

SELECT DISTINCT Funzione FROM Personale;

Clausola AS

I nome dei campi della tabella risultante

dall’interrogazione tramite Select sono uguali ai campi che sono stati selezionati. Se si vogliono cambiare si usa AS.

SELECT campoTabPartenza AS campoTabArrivo FROM TabPartenza;

Supporta anche il calcolo di espressioni

Elenco delle provincie di provenienza dei dipendenti SELECT DISTINCT Prov AS PROVINCIA FROM Personale;

Elenco dei stipendi attuali e aumentati del 5%

SELECT Cognome, Nome, Stipendio As Attuale, Stipendio * 1,05 AS Nuovo

FROM Personale;

(6)

Select con Parametri

SELECT Campo1, Campo2, ……. Campon FROM nomeTabella

WHERE nomeCampo=[parametro]

Elenco dei dipendenti in relazione alla Funzione scelta dall’utente SELECT Cognome, Nome

FROM Personale

WHERE Funzione = [TipoFunzione];

Operazioni Relazionali

Selezione (opera una selezione delle righe) Si usa la clausola WHERE del comando Select

Elenco di tutti i Dirigenti SELECT * FROM Personale

WHERE Funzione = ‘Dirigente’;

Proiezione (opera una selezione delle colonne) Si scelgono solo alcuni dei campi della tabella

Elenco solo di Cognome e Nome di tutti i dipendenti SELECT Cognome, Nome

FROM Personale;

Congiunzione

La congiunzione tra più tabelle si ottiene

elencando le tabelle dopo il FROM, separate dalla virgola e nella clausola WHERE l’uguaglianza degli attributi in comune.

Si utilizza la notazione punto per > chiarezza:

NomeTabella.NomeCampo

Self-join: congiunzione della tabella con se stessa (ad es. si vuole aggiungere un nuovo campo che contiene valori di altri campi). Per risolverlo si usa l’alias per il nome della tabella, si definiscono cioè 2 nomi diversi (con AS) per la stessa tabella

Elenco di tutti i dipendenti con descrizione e indirizzo della filiale ove lavorano

SELECT *

FROM Personale, Dipendenza WHERE Filiale = CodFiliale

* con il segno = si chiama equi-join che in Access si chiama inner-join

---

Elenco per ciascun dipendente, del proprio dirigente

SELECT Tab1.Cognome, Tab1.Nome, Tab2.Cognome FROM Personale AS Tab1, Personale As Tab2 WHERE Tab1.Dirigente = Tab2.Matricola;

Esempi di Selezione, Congiunzione e Proiezione insieme

Elenco degli Impiegati con la relativa sede di appartenenza (descrizione e indirizzo)

SELECT Personale.Cognome, Personale.Nome, Filiale.Descrizione, Filiale.Indirizzo

FROM Personale, Filiale WHERE Personale.Filiale = Dipendenza.CodFiliale

AND Personale.Funzione = ’Impiegato’;

Clausola INTO

Consente di memorizzare il risultato dell’operazione in una tabella SELECT * INTO NuovaTabella FROM VecchiaTabella WHERE Condizione

Creazione della tabella dei Dirigenti a partire dai dipendenti SELECT * INTO Manager

FROM Personale

WHERE Funzione = ‘Dirigente’;

Comando INSERT INTO

Consente di aggiungere nuovi record provenienti da un’altra tabella

INSERT INTO VecchiaTabella SELECT *

FROM NuovaTabella;

Aggiunta nella tabella Personale di nuovi dipendenti provenienti dalla tabella NuoviAssunti

INSERT INTO Personale SELECT *

FROM NuoviAssunti;

(7)

Funzioni di AGGREGAZIONE

Funzione COUNT

Conta il nr. di righe presenti in una tabella. Essa vuole un parametro che può essere il nome di un campo oppure l’*. Con il nome del campo le celle contenenti NULL non vengono contate. Invece se si usa * vengono contate anche le celle contenenti NULL.

Consente di ottenere il nr. delle righe che soddisfano la condizione.

COUNT(DISTINCT x)

Consente di ottenere il nr. dei valori diversi tra loro nella colonna x che soddisfano la condizione scritta dopo WHERE.

La clausola Distinct non può essere usata nel formato Count(*).

Il risultato del conteggio può essere descritto con un’opportuna intestazione aggiungendo la clausola AS.

Contare il nr. di righe presenti nella tab. Personale

SELECT COUNT(*) restituisce la cardinalità della tab.

FROM Personale;

---

Contare i dipendenti per cui il livello è specificato SELECT COUNT(Livello)

FROM Personale;

--- Contare il nr. di dipendenti milanesi SELECT COUNT(*)

FROM Personale WHERE Prov = ‘MI’;

---

A quanti diversi livelli appartengono i dipendenti milanesi ? SELECT COUNT(DISTINCT Livello)

FROM Personale WHERE Prov = ‘MI’;

---

SELECT COUNT(DISTINCT Livello) AS Livelli FROM Personale

WHERE Prov = ‘MI’;

Funzione SUM

Restituisce la somma di tutti i valori contenuti in una colonna specificata come argomento della funzione.

Se nel comando SELECT è presente la condizione WHERE, la funzione somma solo le righe che soddisfano la condizione. NULL viene considerato 0 SELECT SUM(DISTINCT Stipendi)

Consente di sommare solo gli stipendi diversi tra loro.

L’argomento può essere anche un’espressione numerica.

Somma degli stipendi dei dipendenti del livello 5 SELECT SUM(Stipendi)

FROM Personale WHERE Livello = 5;

---

Se il totale delle fatture viene calcolato come Quantità * Prezzo allora il Totale può essere così calcolato:

SELECT SUM(PrezzUnit * Quant) AS Totale FROM Fatture;

Funzione AVG

Restituisce la media dei valori (numerici) contenuti in una colonna. L’argomento può essere anche

un’espressione numerica. Essa non include nel calcolo i valori di tipo NULL si può aggiungere l’opzione Distinct.

Calcolo dello stipendio medio degli Impiegati SELECT AVG(StipBase)

FROM Personale

WHERE Funzione = ‘Impiegati’;

Funzione MIN e MAX

Restituisce il valore minimo/massimo tra quelli di una determinata colonna specificata come argomento.

Può essere utilizzata anche per campi di tipo carattere.

Si può utilizzare la clausola Where. L’argomento può essere un’espressione numerica ignorano i campi con valore NULL.

Calcolo dello stipendio minimo e massimo dei dipendenti SELECT MIN(StipBase), MAX(StipBase) FROM Personale;

--- Il primo e l’ultimo cognome dei dipendenti

SELECT MIN(Cognome), MAX(Cognome) FROM Personale;

(8)

Ordinamenti

Clausola ORDER BY

Consente di ottenere i risultati dell’interrogazione ordinati secondo i valori di 1 o + colonne tra quelle elencate nella Select. L’ordinamento è crescente (ASC) per default quindi è necessario specificarlo solo per il decrescente (DESC).

SELECT Campo1, Campo2,….. Campon FROM Personale

ORDER BY Campo1, Campon;

Per gli ordinamenti complessi occorre specificare Desc per i campi ordinati in senso decrescente.

Generalmente la clausola Order By è l’ultimo elemento di 1 comando SQL.

Elenco alfabetico dei dipendenti

SELECT Cognome, Nome, Nascita FROM Personale

ORDER BY Cognome, Nome; *

* l’ordinamento è su 2 campi: a parità di cognome i dipendenti vengono ordinati per nome.

---

Elenco dei dipendenti in ordine decrescente di stipendio SELECT Cognome, StipBase

FROM Personale

ORDER BY StipBase DESC, Cognome;

Raggruppamenti

Clausola Group By

Con le f. di aggregazione (Sum, Count) è possibile estendere la struttura del comando Select con l’aggiunta di Group By. Si crea quindi una riga per ogni raggruppamento.

Se la Select non contiene 1 f. di aggregazione i valori di raggruppamento non vengono prodotti in output. Tutti gli attributi che compaiono accanto alla Select devono essere inclusi nel Group By oppure devono essere argomenti di 1 f. di aggregazione.

Elenco delle funzioni dei dipendenti con la somma degli stipendi e il numero dei dipendenti appartenenti alle diverse funzioni.

SELECT Funzione, SUM(StipBase), COUNT(*) FROM Personale

GROUP BY Funzione;

---

Elenco dei livelli esistenti tra i dipendenti che svolgono la f. di Impiegato con il nr. di dipendenti per ciascun livello.

SELECT Livello, COUNT(Livello) AS Conteggio FROM Personale

WHERE Funzione = ‘Impiegato’

GROUP BY Livello;

Clausola HAVING

La Select con raggruppamento può essere ampliata con Having: essa sottopone al controllo di 1 o + condizioni i gruppi creati con Group By. La condizione dopo Having normalmente controlla il valore restituito dalle f. di aggregazione (Count, Sum, Avg, ecc.). In genere, quindi, Having viene usata insieme a Group By: dopo che Group By ha formato i raggruppamenti di righe, Having serve a visualizzare le righe che soddisfano alle condizioni scritte accanto a Having. Se la Select contiene la clausola Where, i valori vengono raggruppati dopo aver operato la selezione sulle righe che rispettano le condizioni scritte accanto a Where. Quindi Where agisce sulle righe della tabella mentre Having sulle righe contenenti i risultati delle f. di aggregazione.

Lista delle funzioni dei dipendenti con lo stipendio medio per ciascuna funzione, dopo aver raggruppato i dipendenti per funzione, purché i dipendenti con quella funzione siano + di 2.

SELECT Funzione, AVG(StipBase) FROM Personale

GROUP BY Funzione HAVING COUNT(*) > 2;

--- Elenco delle filiali con + di 10 impiegati

SELECT Filiale, COUNT(Filiale) AS Conteggio FROM Personale

WHERE Funzione = ‘Impiegato’

GROUP BY Filiale

HAVING COUNT(*) > 10;

Condizioni di ricerca

Sono utilizzate insieme alle clausole Where e Having per determinare i criteri di selezione rispettivamente delle righe e dei raggruppamenti. Si utilizzano gli operatori relazionali (>, =, <, <=, ecc.) e booleani (And, Not, Or) e altre parole del linguaggio SQL che rendono la ricerca più raffinata; vedere di seguito.

Operatore BETWEEN

Controlla se un valore è compreso all’interno di 1 intervallo di valori, estremi inclusi. NOT Between valuta la condizione opposta.

Elenco dei dipendenti assunti tra 1/1/95 e 31/12/99 SELECT Cognome, Nome, Funzione

FROM Personale

WHERE Assunto BETWEEN 01/01/95 AND 31/12/99.

(9)

Operatore IN

Controlla se un valore appartiene ad un insieme specificato di valori. Anche IN può essere preceduto da NOT.

SELECT Campo1, Campo2, …… Campon FROM Tabella

WHERE Campox IN (elenco);

Elenco di tutti i dati dei dipendenti che risiedono nelle provincie di Milano, Mantova, Brescia e Como

SELECT *

FROM Personale

WHERE Prov IN (‘MI’, ‘MN’, ‘BS’, ‘CO’);

Operatore LIKE

Confronta il valore di un attributo di tipo carattere con un modello di stringa che può contenere i caratteri jolly (_ : un carattere qualsiasi; %: una stringa qualsiasi).

Like ‘xyz%’: la stringa inizia per xyz Like ‘%xyz’: la stringa finisce per xyz Like ‘%xyz%’: la stringa contiene xyz Like ‘_xyz’: 4 caratteri di cui xyz di fine.

Like senza caratteri jolly equivale a =. Anche Like può essere preceduto da NOT.

Elenco dei dipendenti aventi il cognome che inizia per ‘Ros’ e della relativa filiale

SELECT Cognome, Filale FROM Personale

WHERE Cognome LIKE ‘Ros%’;

Operatore IS NULL

Tale predicato confronta il valore in una colonna con il valore Null. Questo è il solo modo per controllare la presenza del valore Null. Anch’esso può contenere NOT.

Elenco dei dipendenti per i quali è indicata la provincia SELECT Cognome, Nome

FROM Personale

WHERE Prov IS NOT NULL;

Comandi per la sicurezza (DCL)

Comandi GRANT e REVOKE

Concede i permessi, specificando il tipo di accesso, le tabelle sulle quali è consentito l’accesso e

l’elenco degli utenti ai quali è permesso di

accedere. I permessi che possono essere concessi (revocati) agli utenti sono indicati con le parole chiave che vanno specificate dopo Grant o Revoke - ALTER (aggiungere/eliminare colonne o

modificare i tipi di dati)

- DELETE (eliminare righe dalle tabelle) - INDEX (creare indici)

- INSERT (inserire nuove righe nelle tabelle) - SELECT (per trovare dati nelle tabelle)

- UPDATE (cambiare i dati contenuti nelle tab.) - ALL (tutti i permessi precedenti).

I permessi con le opzioni Select e Update, nei comandi Grant e Revoke, diventano + restrittivi specificando tra parentesi e separati da virgola, i nomi delle colonne che l’utente può vedere o modificare.

Per concedere il diritto di modifica sulla tabella dei dipendenti agli utenti denominati User1 e User2

GRANT UPDATE ON Personale TO User1, User2;

---

Revoca dei permessi con annullamento dei diritto di accesso del comando precedente

REVOKE UPDATE ON Personale TO User1, User2;

---

Concessione del diritto di modifica del livello e dello stipendio dei dipendenti all’utente User3.

GRANT UPDATE (Livello, StipBase) ON Personale

TO User3;

Le VISTE

Il linguaggio SQL consente di decidere le modalità con le quali gli utenti possono vedere le tabelle del database, creando una finestra, detta VIEW (vista), su alcuni o su tutti i dati contenuti in 1 o + tabelle.

(10)

Comando CREATE VIEW e DROP VIEW La limitazione della vista ad una visione parziale della tabella consente di eliminare il rischio di modifiche indesiderate su dati che non competono ad un determinato utente. La vista viene considerata quindi come se fosse una tabella e quindi le

modifiche fatte sulla vista si riflettono sulla tabella originale (finestre dinamiche). Le viste che

contengono risultati di funzioni di aggregazioni non sono aggiornabili/modificabili.

Il comando Drop View consente l’eliminazione della vista.

Il creatore della vista, usando il comando Grant, fornisce all’utente il diritto di accesso ai dati attraverso l’utilizzo della vista.

Quindi i sottoschemi e le autorizzazioni per utenti diversi su un database relazione possono essere definiti con l’SQL usando in modo combinato i comandi Create View e Grant.

Creazione di una vista di nome Impieg contenente i dati degli Impiegati.

CREATE VIEW Impieg AS SELECT *

FROM Personale

WHERE Funzione = ‘Impiegato’;

--- Eliminazione della vista precedente.

DROP VIEW Impieg;

---

Concessione all’utente User3 al diritto di accedere alla vista Impieg GRANT SELECT

ON Impieg TO User3;

Interrogazioni nidificate

All’interno di un comando Select è possibile inserire un altro comando Select (interrogazione all’interno di un’altra interrogazione: subquery). Da qui Structured della sigla SQL perché il linguaggio consente di costruire interrogazioni complesse e ben strutturate.

Alcuni esempi

Il comando Select nidificato restituisce il valore calcolato del valor medio degli stipendi; questo nr.

viene usato poi nell’interrogazione principale per il confronto con i valori dell’attributo StipBase nel criterio di selezione delle righe della tabella, scritto dopo Where.

La condizione scritta dopo Where confronta il valore di un attributo con il risultato di un altro comando Select. Una subquery può restituire un valore singolo, nessun valore oppure un insieme di valori, ma deve comunque avere una singola colonna o espressione accanto alla sua Select.

L’interrogazione si ottiene con la congiunzione tra le 2 tabelle Personale e Dipendenza, realizzata attraverso l’attributo comune del codice filiale; la condizione di selezione sulle righe risultanti confronta lo stipendio di ogni dipendente con il valore ottenuto da una sottointerrogazione che restituisce 1 nr., ottenuto calcolando con la f. Max il valore massimo tra tutti i valori di StipBase.

Elenco con cognome e nome dei dipendenti che hanno lo stipendio inferiore allo stipendio medio di tutti i dipendenti

SELECT Cognome, Nome FROM Personale WHERE StipBase <

(SELECT AVG(StipBase) FROM Personale);

---

Elenco dei dipendenti, elencati in ordine alfabetico cognome, nome e descrizione della filiale dove lavorano, per i quali lo stipendio risulta uguale al valore massimo tra tutti gli stipendi dei dipendenti con la funzione di impiegato.

SELECT Cognome, Nome, Descrizione FROM Personale, Dipendenza, WHERE Filiale = CodFil AND StipBase = (SELECT MAX(StipBase) FROM Personale

WHERE Funzione = ‘Impiegato’) ORDER BY Cognome, Nome;

Predicato ANY

Indica che la subquery può restituire zero, oppure 1, oppure 1 insieme di valori, e che la condizione di ricerca è vera se il confronto è vero per almeno 1 dei valori restituiti. La condizione di ricerca è falsa se la subquery restituisce 1 insieme vuoto oppure se il confronto è falso per ciascuno dei valori restituiti dalla subquery.

Elenco dei dipendenti che non sono impiegati e che hanno lo stipendio superiore a quello di uno qualsiasi tra gli impiegati.

SELECT Cognome, Nome, Funzione FROM Personale

WHERE Funzione <> ‘Impiegato’ AND StipBase > ANY (SELECT StipBase FROM Personale

WHERE Funzione = ‘Impiegato’);

(11)

Predicato ALL

Indica che la subquery può restituire zero, oppure 1, oppure 1 insieme di valori, e che la condizione di ricerca è vera se il confronto è vero per ciascuno dei valori restituiti. La condizione di ricerca è falsa se il confronto è falso per almeno 1 tra i valori restituiti dalla subquery.

Ovviamente l’interrogazione con ALL restituisce 1 nr inferiore di righe rispetto a ANY.

Le clausole Any e All possono essere tralasciate nelle espressioni di confronto se si è in grado di stabilire che la subquery restituirà sicuramente un solo valore. In questo caso la condizione di ricerca è vera se è vero il confronto tra il valore dell’attributo e il valore restituito dalla subquery.

Elenco di tutti di dipendenti che non sono impiegati e che hanno lo stipendio superiore a quello di tutti gli impiegati.

Basta sostituire ALL a ANY

SELECT Cognome, Nome, Funzione FROM Personale

WHERE Funzione <> ‘Impiegato’ AND StipBase > ALL (SELECT StipBase FROM Personale

WHERE Funzione = ‘Impiegato’);

Predicato IN

Serve a controllare se il valore di un attributo è compreso tra quelli restituiti dalla subquery.

È possibile utilizzare NOT IN per estrarre solo le righe della tabella principale per le quali nessuna riga della tabella ottenuta con la subquery contiene un valore =.

Le seguenti condizioni di ricerca sono equivalenti:

WHERE Attributo IN (SELECT ……..) WHERE Attributo NOT IN (SELECT ……..)

Elenco con cognome e nome dei dipendenti che lavorano nelle filiali che hanno più di 10 dipendenti

SELECT Cognome, Nome FROM Personale

WHERE Filiale IN (SELECT Filiale FROM Personale GROUP BY Filiale

HAVING COUNT(*) >10);

WHERE Attributo = ANY (SELECT ……..) WHERE Attributo <> ALL (SELECT……..) Predicato EXISTS

Controlla se vengono restituite righe dall’esecuzione della subquery: la condizione di ricerca è vera se la Select nidificata produce 1 o + righe come risultato, è falsa se la subquery restituisce un insieme vuoto.

Tale predicato è il solo che non confronta un valore con 1 o + altri valori. Le colonne utilizzate nella subquery di una clausola Exists sono irrilevanti: quindi per brevità si utilizza Select * nella subquery. Exists può essere negato: Not Exists.

Elenco dei dipendenti con cognome e nome solo se esistono dipendenti di sesto livello

SELECT Cognome, Nome FROM Personale

WHERE EXISTS (SELECT * FROM Personale WHERE Livello = 6);

Età di una persona

Mostra l’età (in anni) di una persona dalla data corrente. CURDATE fornisce “aaaa-mm-dd” e RIGHT(stringa, n) estrae n caratteri partendo dalla parte destra della stringa.

SELECT nome, datanas, CURDATE(), ( YEAR(CURDATE())-YEAR(datanas) )

- (RIGHT(CURDATE(),5) < RIGHT(datanas,5)) AS eta FROM clienti;

(12)

JOIN in ACCESS

Proprietario Assicurazione

Codice Nome Descrizione ID Nome Tariffa Classe

101 Marco Dir. Gen. ENI S.p.a. 101 Sara 200 A

102 Laura Segretaria Eni S.p.a. 102 Generali 105 AA

103 Zurich 150 B

Veicolo

Codice Targa Descrizione

101 AX 541 OP Maserati

102 BC 650 PP Lancia Ypsilon

Predicato JOIN (2 tab) Congiunzione tra due tabelle (INNER JOIN) e proiezione su alcuni campi congiungendo le due tabelle tramite (ON) l'uguaglianza dell'attributo in comune (Codice)

Elenco di tutti i proprietari con i rispettivi veicoli

SELECT Proprietario.Descrizione, Veicolo.Descrizione FROM Proprietario INNER JOIN Veicolo

ON Proprietario.Codice=Veicolo.Codice;

Predicato JOIN (3 o + tab) Congiunzione tra tre tabelle (INNER JOIN) e proiezione su alcuni campi congiungendo le tre tabelle, prese a gruppi di due, tramite (ON) l'uguaglianza dell'attributo in comune delle prime due (Codice)e poi tramite l'uguaglianza dell'attributo in comune della terza tabella (ID)

Elenco di tutti i proprietari con i rispettivi veicoli e tariffa SELECT

Proprietario.Descrizione, Veicolo.Descrizione, Assicurazione.Tariffa FROM (Proprietario INNER JOIN Veicolo

ON Proprietario.Codice=Veicolo.Codice) INNER JOIN Assicurazione ON Veicolo.Codice=Assicurazione.ID;

(13)

HTML Elementi di base di un

documento HTML:

<html>

<head>

<title>Titolo della pagina</title>

</head>

<body>

<!-- qui si crea la pagina vera e propria -->

</body>

</html>

Tabella

PARAMETRO WIDTH definisce la larghezza dell'oggetto in percentuale rispetto alla risoluzione dello schermo.

TAG TH

indica l'intestazione delle colonne (scritta COLONNA1 in grassetto) PARAMETRO BORDER definisce la dimensione del bordo della tabella.

Link

<TABLE width="50%" border="1">

<TR width="25%">

<th>Colonna1</th>

<th>Colonna2</th>

<th>Colonna3</th>

<th>Colonna4</th>

</TR>

<TR>

<td width="25%">dato01</td>

<td>dato02</td>

<td>dato03</td>

<td>dato04</td>

</TR>

</TABLE>

<a href="MenuPrincipale.html">Ritorna al menù principale </a>

FORM:

(contenitore di oggetti quali: Text Box, Combo Box, Pulsanti, ... )

<form name="nomeForm" action="fileScript.php" method="POST ">

<!-- qui si inseriscono gli elementi -->

</form>

Elementi di un Form:

Text Box

Check Box

Radio Button

Combo Box (Selezione)

Pulsanti

<INPUT type=“TEXT" name="Utente">

<INPUT type=“PASSWORD" name="PwdUtente">

<INPUT type=”CHECKBOX” name=”N”>Nuoto

<INPUT type=”CHECKBOX” name=”T”>Tennis

<INPUT type=”RADIO” name="Nazione" value=”Italia”> ITALIA

<INPUT type=”RADIO” name ="Nazione" value=”Francia”> FRANCIA

<SELECT name="NomeCombo">

<OPTION value="Citta1" SELECTED>Roma</OPTION>

<OPTION value="Citta2">Rimini</OPTION>

<OPTION value="Citta3">Ravenna</OPTION>

</SELECT>

<INPUT type="SUBMIT" value="Invia">

<INPUT type="RESET" value="Annulla">

<INPUT type="BUTTON" name="B1" value="Calcola"

onClick="nomeProcedura">

(14)

Tipi di dati MySql

Numerici

B Tipo valore minimo Valore massimo

1 BIT [(M)]

1 TINYINT [(M)] [UNSIGNED] [ZEROFILL] -128 (0) +128 (255) 2 SMALLINT [(M)] [UNSIGNED] [ZEROFILL] -32768 (0) +32767 (65535) 3 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] -8988608 (0) +8988607 (16777215) 4 INT [(M)] [UNSIGNED] [ZEROFILL] -2147483648 (0) +2147483647

8 BIGINT [(M)] [UNSIGNED] [ZEROFILL] -263 (0) +263 -1 (+264 -1) 4 FLOAT [(M,D)] [UNSIGNED] [ZEROFILL]

8 DOUBLE [(M,D)] [UNSIGNED] [ZEROFILL]

DECIMAL [(M[,D])] [UNSIGNED] [ZEROFILL]

Bit (si può usare anche Bool) è sinonimo di TINYINT(1): 0=FALSE, 1=TRUE.

L’opzione UNSIGNED specifica che il numero è senza segno (questo comporta la possibilità di memorizzare solo numeri positivi ma si recupera il bit del segno e quindi si possono memorizzare numeri più grandi), mentre l’opzione ZEROFILL indica al server di memorizzare i numeri con degli zeri davanti nel caso in cui la lunghezza sia inferiore a quella massima prevista.

I dati di tipo TINYINT, SMALLINT, MEDIUMINT, INT e BIGINT rappresentano numeri interi composti rispettivamente da 1, 2, 3, 4 e 8 bytes. I tipi FLOAT e DOUBLE rappresentano i numeri in virgola mobile. Il tipo DECIMAL corrisponde ai numeri rappresentati nel formato virgola fissa (4 bit ogni cifra), con M cifre totali di cui D decimali.

Esiste anche il tipo BOOL che corrisponde a TINYINT (0=falso, un valore diverso da 0=vero).

Data e ora

3 DATE

8 DATETIME da '1000-01-01 00:00:00' a '9999-12-31 23:59:59' 4 TIMESTAMP[(M)]

3 TIME da ’-838:59:59’ a ’+838:59:59’

1 YEAR [(2|4)] da 70 a 69 o da 1970 a 2155

Stringhe

detta L la lunghezza della stringa Byte occupati

[NATIONAL] CHAR(M) [BINARY | ASCII | UNICODE] (M byte se ACII)

[NATIONAL] VARCHAR(M) [BINARY] 0<=M<=65535 (L+1 byte se L<255 o L+2) BINARY(M) 0<=M<=255 (L+1 byte)

VARBINARY(M) 0<=M<=65535 (L+1 byte se L<255 o l*2) TINYBLOB max 255 caratteri L+1

TINYTEXT max 255 caratteri L+1 BLOB [(M)] max 65535 char l+2 TEXT [(M)] max 65535 char l+2 MEDIUMBLOB max 16777215 char L+3 MEDIUMTEXT max 16777215 char L+3

LONGBLOB max 4GB L+4

LONGTEXT max 4GB Lè4

ENUM ('valore1','valore2',...) 1 o 2 bytes

SET ('valore1','valore2',...) 1,2,3,4 o 8 bytes

Il tipo CHAR è una stringa di lunghezza fissa (M) riempita con spazi a destra al momento della memorizzazione. L’opzione NATIONAL indica che la stringa deve usare il set di caratteri di default.

L’attributo BINARY fa diventare case sensitive. Il tipo VARCHAR è una stringa di lunghezza variabile. I tipi BINARY e VARBINARY corrispondono a CHAR e VARCHAR, ma memorizzano stringhe di byte invece che di caratteri. I tipi BLOB e TEXT sono utilizzati rispettivamente per valori binari e di testo. Un tipo ENUM può contenere uno solo dei valori elencati nella definizione (max 65535), oppure NULL (in realtà contiene un numero di 1 o 2 byte). Un tipo SET, può contenere 1 o più dei max 64 valori possibili.

(15)

Le principali funzioni incluse in MySQL

Le funzioni e, più in generale, le espressioni possono essere utilizzate per la definizione di campi calcolati nelle query (dopo SELECT) oppure nelle clausole where, having e anche group by, order by.

Funzioni matematiche

Con MySQL nei calcoli, oltre ai normali operatori +, - , *, / si possono utilizzare:

% (resto della divisione intera), MOD (sempre resto della divisione intera), DIV (divisione intera);

le operazioni sui bit del linguaggio C: & (AND), | (or), ^ (XOR), ~ (inversione dei bit), << (scorrimento a sinistra dei bit), >> (scorrimento a destra)

Nome Descrizione Esempi

abs(x) Calcola il valore assoluto di x select abs(2.5), abs(-37) 2,5 37 ceiling(x) Restituisce il più piccolo intero >= x,

corrisponde all’arrotondamento per eccesso

select ceiling(2.3), ceiling(-1.2)

3 -1

floor(x) Restituisce il più grande intero <= x (arrotondamento per difetto)

select floor(2.3), floor(-1.2)

2 -2

exp(x) Calcola ex (dove e è la base dei logaritmi naturali) select exp(2), exp(-2) 7.3890560989307 LN(x) Calcola il logaritmo naturale di x

log()

log(x) oppure log(B,x)

se richiamato con un solo parametro corrisponde a LN(x) altrimenti calcola il logaritmo in base B di x

select log(2), log(10,100) 0.693147180 2

round()

round(x) oppure round(x,D)

con un parametro arrotnda il numero x all’intero più vicino mentre con due parametri restituisce il numero x con solo D cifre decimali arrotondandolo l’ultima cifra decimale.

select round(2.3), round(2.6),round(2.5)

2 3 3

select round(2.234,2) round(2.567,2) 2.23 2.57

pow(x,y) calcola x elevato a y con x e y numeri qualsiasi (anche con la virgola)

select pow(2,4), pow(81, 0.5)

16 9

sqrt(x) calcola la radice quadrata di x select sqrt(81), sqrt(4)

9 2

Funzioni per le stringhe di caratteri

Con MySQL l’operatore + converte le stringhe in numeri quindi per effettuare la concatenazione di due o più stringhe di caratteri si deve usare la funzione CONCAT().

Nei confronti tra stringhe di caratteri non c’è differenza tra maiuscole e minuscole.

Le stringhe costanti possono essere racchiuse tra due virgolette doppie (es. “Prova”) o tra due apostrofi (codice ASCII 39 es.

‘Prova’) mentre la virgoletta singola ` (codice ASCII 96) viene utilizzata per delimitare i nomi dei campi e delle tabelle.

Nome Descrizione Esempi

concat()

concat(stringa1, stringa2 [, …])

crea una nuova stringa unendo tutte le stringhe passate come parametri.

select concat(‘Anna’,’Maria’);

AnnaMaria

length()

length(stringa)

restituisce la lunghezza in byte della stringa fornita come parametro

select length(‘Informatica’);

11 left() left(stringa1,n)

restituisce n caratteri della stringa stringa1 a partire da sinistra

select left(“Informatica”,4);

Info right() right(stringa1,n)

restituisce n caratteri della stringa stringa1 a partire da destra

select right(“Informatica”,4);

tica instr()

intrstr(stringa1,stringa2)

cerca stringa2 all’interno di stringa1, se la trova restituisce la posizione in cui è stata trovata altrimenti zero.

select instr(‘corso di informatica’,’Info’);

10

select instr(‘corso di informatica’,’Infa’);

0 locate() locate(stringa2,stringa1)

come instr() ma gli argomenti sono invertiti lcase()

lower()

lcase(stringa1) oppure lower(stringa1) trasforma la stringa in minuscolo

select lcase(“PROva”);

prova ucase()

upper()

ucase(strina1) oppure upper(stringa1) trasforma la stringa in maiuscolo

selecr upper(“PROva”);

PROVA

substr(stringa1,p,n) oppure substr(stringa1,p) select mid(‘Informatica’,3,2);

(16)

stringa1 tutti i caratteri a partire da quello in posizione p fino alla fine.

matica

replace()

replace(stringa1, sub1, sub2)

cerca tutte le occorrenze della sottostringa sub1 in stringa1 e la rimpiazza con sub2, in questo caso la ricerca è case sensitive.

select replace(‘la casa di Mario’,’Mario’,’Pia’);

la casa di Pia

select replace(“lascia A”,”a”,”o”);

loscio A lpad()

lpad(stringa1, lun, str)

restituisce la stringa1 con esattamente lun caratteri tagliandola se è troppo lunga o aggiungendo la stringa str a sinistra tante volte se è troppo corta

select lpad(‘345’,6,’0’), lpad(‘CD’,7,’axy’);

000345 axyaxCD rpad() come lpad ma la stringa string1 viene allungata a destra

(aggiungendo la stringa str) se è troppo corta

select lpad(‘45’,6,’0’),lpad(‘CD’,7,’axy’);

450000 CDaxyax repeat() repeat(str, cont)

ripete la stringa str esattamente count volte

select repeat(‘MySQL’,3);

MySQLMySQLMySQL

trim()

trim(stringa1)

elimina gli spazi iniziali e finali da stringa1

oppure trim(BOTH ! LEADING | TRAILING car FROM stringa1)

elimina i caratteri car all’inizio (LEADING) oppure alla fine (TRAILING) o entrambi (BOTH) nella stringa stringa1

select trim( ‘ ciao ‘);

‘ciao’

select trim(leading ‘x’ from ‘xxxciaoxx’);

‘ciaoxx’

Funzioni data e ora

Una data può essere inserita utilizzando una stringa nel formato anno-mese-giorno, per esempio ‘2011-04-10’ oppure

‘1970/3/21’, si può utilizzare il separatore che si preferisce e si può inserire anche l’anno con due cifre sapendo che

• da 70 a 99 verrà trasformato in 1970 fino a 1999 es. ‘70/3/4’ 1970-03-04

• da 00 a 69 verrà trasformato in 2000 fino a 2069 es. ’21-4-15’ 2021-04-15 Le date valide vanno da ‘1000-01-01’ fino a ‘9999-12-31’

Un’ora viene inserita invece nel formato HH:MM:SS (ore minuti secondi) anche qui si può utilizzare un separatore a piacere.

Si può operare con le date e le ore anche con espressioni aritmetiche del tipo:

‘2011-04-06’ + INTERVAL 50 day – INTERVAL 6 week

in alternativa all’uso delle funzioni date_add() e date_sub() con gli stessi effetti.

Nome Descrizione Esempi

curdate() curdate() da come risultato la data corrente presa dall’orologio del sistema

select curdate();

2011-04-07 curtime() curtime() da come risultato l’ora corrente presa

dall’orologio del sistema

select curtime();

17:14:55 now() now() da come risultato la data e l’ora corrente presa

dall’orologio del sistema

select now();

2011-04-07 17:16:32

date_add() date_sub()

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Date_ADD aggiunge un intervallo di tempo ad una date mentre date_sub serve per sottrarre un certo intervallo di tempo da una data. Il risultato è sempre una nuova data.

L’intervallo può essere espresso in giorni, settimane, mesi, anni, e anche ore, minuti, secondi scrivendo al posto di expr_unit: DAY, WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND

select date_add(‘2011-4-2’, INTERVAL 2 month);

2011-06-02

select date_add(‘2011-4-2’, INTERVAL 100 day);

2011-07-11

select date_sub(‘2011-4-2’ INTERVAL 3 day);

2001-03-30

datediff()

datedif(data1,data2)

fa la differenza tra due date, data1-data2, il risultato è espresso in giorni

select datediff('2011/04/05', '2011/03/08');

28 day()

month() year()

day(data1) month(data1) year(data1)

servono per estrarre rispettivamente il giorno, il mese e l’anno da una data o da una dataora

select year(now());

2011

hour() hour(dataora1) minute(dataora1) second(dataora1) select second(now());

(17)

second() (o solo ora)

dayOfWeek WeekDay

dayOfWeek(data1) oppure weekDay(data1) restituisce il giorno della settimana

DayOfWeek() restituisce 1=Domenica, 2=lunedì ..

7=sabato

WeekDay restituisce 0=lunedì, 1= martedì, … 6=domenica

select dayofweek('2011-04-10');

1

select weekDay('2011-04-10');

6

Altre Funzioni

Nome Descrizione Esempi

if()

if(condizione, espr1,espr2) se la condizione è vera da come risultato il risultato dell’espressione espr1, altrimenti il risultato dell’espressione espr2

select if(10>7,1,0) 1

select count(if (sesso=’F’,1,NULL)) conta il numero delle femmine (anche 0)

cast() convert()

cast(espr AS tipo) oppure convert(espr,tipo)

Converte il risultato dell’espressione espr nel tipo specificato che può essere: CHAR, DATE, DATETIME, TIME, DECIMAL, SIGNED, UNSIGNED, BINARY (stringa con l’attributo binary)

password()

password(stringa)

Calcola con un algoritmo segreto uno stringa di 41 cifre esadecimale dipendenti dalla stringa fornita come parametro.

Non esiste l’algoritmo inverso, due stringhe diverse

potrebbero dare lo stesso risultato ma la probabilità e molto bassa. E’ il sistema utilizzato da MySQL per crittografare le password degli utenti.

select password(‘prova’);

'*5A5DBAE1C258F3E8D037F02A6 B16BE6570821C5B'

sha() sha1()

sha(str) oppure sha1(str)

produce una stringa di 40 cifre esadecimali (160 bit) in output calcolate con l’algoritmo SHA1 a partire dalla stringa str di lunghezza arbitraria. Può esser usato per crittografare una stringa, per esempio una password e il risultato è più sicuro che con la funzione MD5(), non è disponibile la funzione inversa ma si tratta di un algoritmo standard ben conosciuto.

SHA e SHA1 sono uguali.

select sha(‘prova’);

‘46c3d962f31452b970069e96ba6d 741b4fd276a5'

md5()

md5(str)

come sha ma il risultato sono 128 bit (32 cifre esad)

select MD5(‘prova’);

'27c749230e8f93b76fa0a4b9dc3cc 450'

encode() decode()

encode(str,pass_str) decode(str,pass_str)

serve a crittografare e a decrittografare una stringa di caratteri (str) utilizzando come chiave di crittografia la stringa pass_str.

Il risultato è una stringa binaria della stessa lunghezza della stringa da crittografare.

select encode(‘Prova’,’123’);

'b„ ó?'

select decode(‘'b„ ó?', '123’) ‘Prova’

(18)

PHP

Funzioni per la gestione degli array

Un array in php può avere come indice un valore numerico o alfanumerico, in quest’ultimo caso si dice associativo.

In ogni caso possiamo immaginare l’array come una tabella con due colonne: chiave e valore. La chiave è l’indice dell’array, ad ogni chiave corrisponde un valore, ogni riga comprende una coppia chiave-valore.

Il motore PHP mantiene internamente per ogni array un puntatore alla posizione corrente. E’ possibile accedere alla chiave e al valore della posizione corrente con le funzioni key() e current(), si può spostare il puntatore in avanti con next(), indietro con prev(), si può riportare all’inizio dell’array con reset() e alla fine con end()

Nome Descrizione Esempi

key() key(vettore) restituisce la chiave (indice) della posizione corrente del vettore

Visualizza tutti i campi di un modulo inviato al server con il metodo post.

reset($_POST);

for ($i=0;$i<count($_POST);

$i++)

{echo key($_POST).' = '.

current($_POST).' <br> ';

next($_POST); } current() current(vettore) restituisce il valore della

posizione corrente del vettore

next() next(vettore) sposta il puntatore corrente avanti di una posizione

prev() prev(vettore) sposta il puntatore corrente indietro di una posizione

end() end(vettore) sposta il puntatore corrente sull’ultima posizione del vettore

reset() reset(vettore) sposta il puntatore corrente alla prima posizione del vettore

count() count(vettore) fornisce il numero degli elementi del vettore

each()

each(vettore) restituisce un vettore di due elementi: chiave e valore della posizione corrente e sposta la posizione corrente in avanti

list($chiave,$valore)=each(vett);

// estrae la chiave e il valore dell’elemento // corrente del vettore associativo vett

list()

list(var1, var2, var3,….)=vettore

copia gli elementi del vettore nelle variabili var1, var2, var3 ecc. Se il numero delle variabili è minore degli elementi del vettore copia solo i primi elementi.

Funziona con i vettori numerici

<?php

$vett=array('Primo','secondo','terzo');

list($a,$b)=$vett;

// $a=Primo $b=secondo

array()

array(valore1, valore2, valore3, ….)

restituisce un vettore con indice numerico contenente tutti i valori forniti come parametri

$vett=array('Primo','secondo','terzo');

//vett diventa un vettore inizializzato con // i tre elementi ‘Primo’,’secondo’,’terzo’

Funzioni MySQL

Nome Descrizione Esempi

mysql_connect()

mysql_connect([string_server[,string_nome_utente[, strig_password[bool nuova_conn]]]])

Apre una connessione ad un server MySql.

Restituisce un identificativo di connessione in caso di successo o FALSE in caso di errore.

Se si apre due volte la stessa connessione viene restituito lo stesso identificativo a meno che non si mette TRUE al parametro nuova_conn

<?php

$conn = mysql_connect("localhost",

"utente_mysql", "password_mysql") or die("Connessione non riuscita: "

. mysql_error());

print ("Connesso con successo");

mysql_close($conn);

?>

mysql_close()

mysql_close($conn)

Chiude la connessione al server relativa all’identificativo di connessione specificato.

La connessione viene anche automaticamente chiusa al termine dello script.

mysql_close($conn);

mysql_select_db()

mysql_select_db(string nome_database [,$conn])

Imposta il database attivo fra quelli gestiti dal server MySql. Restituisce TRUE in caso di successo e FALSE in caso di fallimento. Se non si specifica la

mysql_select_db("aziende") or die (“Impossibile aprire il database: “.

mysql_error());

(19)

Invia una query al database. Se si omette la

connessione viene presa l’ultima aperta.. Se la query è una Select (o una SHOW, EXPLAIN, Describe) fornisce come risultato un identificativo di risorsa in caso di successo, per gli altri tipi di query restituisce TRUE in caso di successo, in caso di insuccesso restituisce sempre FALSE.

cod=’RN’”;

if (!($ris=mysql_query($sql))) { echo "Errore nel comando: <br />

$sql <br />";

echo mysql_error();

exit();

} mysql_insert_id()

si utilizza dopo aver eseguito una query INSERT INTO e restituisce il numero generato

automaticamente per l’eventuale campo auto_increment del database

$sql=”Insert into ….”;

mysql_query($sql));

$codice=mysql_insert_id();

mysql_fetch_array ()

mysql_fetch_array ( resource ris)

restituisce un array sia numerico che associativo contenete una riga della tabella ris che deve essere il risultato dell’esecuzione di una query (Select).

Ogni volta che viene eseguito prende la riga successiva nella tabella. Se non ci sono più righe restituisce il valore FALSE. Si può tornare indietro o saltare delle righe utilizzando mysql_data_seek.

$ris=mysql_query($sql);

$riga=mysql_fetch_array($ris);

mysql_num_rows ()

mysql_num_rows ( resource ris )

restituisce il numero di righe della tabella risultato in seguito all’esecuzione di un comando sql SELECT con mysql_query

$sql= “Select * form aziende where cod=’RN’”;

$ris=mysql_query($sql);

$num=mysql_num_rows(ris);

echo “Numero di aziende di Rimini

= $num”;

mysql_affected_ro ws()

mysql_affected_rows ( [$conn]) Restituisce il numero di righe coinvolte dall’esecuzione di un comando SQL come DELETE, INSERT, UPDATE. Il parametro facoltativo $conn è l’identificativo di

connessione, se non specificato si considera l’ultima aperta.

mysql_data_seek

mysql_data_seek ( resource ris, int numriga ) Sposta il puntatore interno alla riga di una tabella ottenuta come risultato di una SELECT con mysql_query().La successiva chiamata a

mysql_fetch_array() dovrebbe restituire questa riga.

Il numero numriga deve essere compreso tra 0 e mysql_num_rows -1. Restituisce TRUE se lo spostamento riesce e FALSE altrimenti.

addslashes()

addslashes ( string sql )

restituisce la stessa stringa passata come

parametro con in più il carattere backslash “\”

aggiunto prima dei caratteri che richiedono il quoting nelle stringhe sql ovvero prima dei caratteri ‘, “, \ e NULL. Serve per preparare la query prima di eseguirla.

stripslashes()

stripslashes ( string str )

restituisce la stessa stringa passata come parametro ma elimina i caratteri backslash “\”

precedentemente aggiunti con funzioni tipo addslashes.

(20)

Riempimento tabella HTML Riempimento di

una tabella HTML dal risultato di una query applicata ad un DB MySQL, utilizzando il ciclo WHILE.

<TABLE WIDTH="80%" BORDER="1">

<TR>

<TH WIDTH="25%">Cognome</TH>

<TH WIDTH="25%">Nome</TH>

<TH WIDTH="25%">Residenza</TH>

<TH WIDTH="25%">Telefono</TH>

</TR>

<TR>

<?php ...

$risultati=mysql_query($sql);

while( ($record = mysql_fetch_array($risultati) ) {

//stampo tabella

echo "<TD>" . $record["Cognome"] . "</TD>";

echo "<TD>" . $record[1] . "</TD>";

echo "<TD>" . $record["Residenza "] . "</TD>";

echo "<TD>" . $record[3] . "</TD>";

} ...

?>

Gestione delle sessioni

Nome Descrizione Esempi

session_start() session_start()

riprende una sessione esistente o avvia una nuova sessione

session_start();

session_unset()

session_unset()

cancella tutte le variabili di sessione. Si può fare anche con:

$_SESSION=array();

//chiude la sessione session_unset();

session_destroy();

session_destroy

session_destroy()

distrugge e chiude la sessione. Il prossimo accesso apre una nuova sessione

vedi sopra

Altre funzioni

Nome Descrizione Esempi

isset() isset($variabile)

restituisce vero se la variabile è stata inizializzata

if (isset($codice)) $codice++

else $codice=1;

date()

date ( string formato [, int timestamp] )

restituisce una stringa contenente la data (ed eventualmente ora) formattata secondo il formato specificato. Se non si fornisce il secondo parametro che rappresenta la data e l’ora nel formato timestamp di unix, verrà visualizzata la data di sistema.

Il primo parametro è una stringa contenente caratteri speciali che indicano come costruire la stringa contenente la data e/o ora. I principali caratteri speciali sono:

d giorno del mese con due cifre m mese dell’anno con due cifre y anno con due cifre

Y anno con 4 cifre

h ore nel formato a 12 ore da “00” a “12”

H ore nel formato a 24 ore da “00” a “23”

i minuti da “00” a “59”

echo date("Y-m-d H:i:s");

2011-06-04 17:23:48

(21)

w giorno della settimana da “0” domenica a “6” sabato z giorno dell’anno da “0” a “365”

mktime()

mktime ( int ora, int minuti, int secondi, int mese, int giorno, int anno [, int is_dst] )

restituisce un numero intero corrispondente al valore timestamp di unix per la data e ora specificati come parametri

l’ultimo parametro facoltativo indica se applicare o meno l’ora legale (is_dst=1 per l’ora legale, 0 ora solare e -1 in automatico)

echo(“Y-m-d”,mktime(0,0, 0,6,5,2011))

2011-06-05

Istruzioni PHP

Nome Descrizione Esempi

include require

include $nomefile

Serve per includere nel punto dove è inserita l’istruzione il file con codice php o html avente come nome quello specificato dal parametro $nomefile che può essere una stringa costante.

L’unica differenza tra include e require è che nel primo caso se il file non c’è lo script prosegue, mentre nel secondo caso viene interrotto.

Il codice php nei file da includere deve essere sempre racchiuso tra

<?php e ?>.

Il file verrà cercato nelle directory indicate nel parametro include_path del file di configurazione php.ini.

vars.php

<?php

$colore = 'verde';

$frutto = 'mela';

?>

test.php

<?php $a='Una';

include 'vars.php';

echo "$a $frutto $color e";

// Una mela verde

?>

Riferimenti

Documenti correlati

MAZZEI VILMANO MZZVMN58D23G912G VILMANO.MAZZEI@PEC.IT 0565917812 Primo Revisore Estratto STELLA ROMUALDO STLRLD62E30A390C ROMUALDO@PEC.STUDIOSTELLAGIGLI.IT 3335846672 Prima

[r]

accessoria economiche consulenze ecc di risultato 898 ABBINANTE CRESCENZA MEDDIRAS - Dirigente Medico con incarico ex art.. accessoria economiche consulenze ecc di risultato

Cristina Valgardena -

[r]

[r]

[r]

POLICARO GIUSEPPE ANTONIO NOVARA ORDINE