Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di database » Alias, In e l' utilizzo delle Subquery

Alias, In e l' utilizzo delle Subquery




Visite: 1833Gradito:apreciate 5-stela [ Medio appunti ]
Leggi anche appunti:

Progetto del modulo di basi di dati


PROGETTO DEL MODULO DI BASI DI DATI "CATENA DI ALBERGHI" Pina Acierno Specifiche dei

Database


Database Il database viene usato fortemente nelle imprese per gestire le

Progetto per il Corso di Basi di Dati Autofficina


Progetto per il Corso di Basi di Dati Autofficina Auto
immagine di categoria

Scarica gratis Alias, In e l' utilizzo delle Subquery

Alias, In e l' utilizzo delle Subquery

In questa sezione parleremo dell' utilizzo degli  Alias, dell' In , dell' utilizzo delle  subquery, e come queste possono venire utilizzate nel nostro esempio di 3 tabelle. Per prima cosa diamo un' occhiata alla query riportata qui sotto, che ritorna i cognomi di quegli antiquari che hanno fatto un' ordine e che tipo di oggetto hanno ordinato, mostrando solo gli ordini in essere (se notate infatti esiste un' antiquario che ha ordinato un' oggetto di cui e' già in possesso):

SELECT PERS.CognomeAntiquario Cognome, ORD.OggettoRicercato Oggetto Ordinato
FROM Ordini ORD, Antiquari PERS

WHERE ORD.IDAntiquario = PERS.IDAntiquario
AND ORD.OggettoRicercato IN

(SELECT Oggetto
FROM Antichita);

Questa query ritorna questo risultato:

Cognome Oggetto Ordinato

Smith   Tavolo
Smith   Scrivania
Akins   Sedia
Lawson  Specchio

C'e' veramente un mucchio di cose da vedere in questa query. analizziamola nello specifico :

Per prima cosa, nella linea della clausola SELECT compaiono le parole 'Cognome' e 'Oggetto Ordinato' che forniscono l' intestazione delle colonne del report ritornato dalla query

Le parole PERS ed ORD sono alias; gli alias sono dei nomi alternativi per le due tabelle che compaiono nella clausola FROM e che vengono utilizzati come prefissi in tutta la dot notation delle colonne utilizzate nella query, in modo da eliminare le ambiguità , in particolar modo nella clausola WHERE dell' equijoin , dove entrambi le colonne si chiamano IDAntiquario e quindi la dot notation si renda indispensabile per evitare confusione tra i due 

Notate che la tabella Ordini e' quella che compare per prima nella clausola FROM; questo ci permette di essere sicuri che il report verrà tratto dai dati presenti in questa tabella e che la tabella Antiquari viene utilizzata solo per recuperare le informazioni dettagliate (i cognomi)

La cosa più importante; l' AND nella clausola WHERE forza a richiamare la subquery contenuta nella clausola IN ('= ANY' o '= SOME' sono due utilizzi equivalenti ad IN). Questo e' quello che fa: la subquery contenuta tra le parentesi viene eseguita, ritornando l' elenco di tutti gli oggetti contenuti nella tabella Antichita non essendoci nessuna clausola WHERE nella subquery; dopodiché, perché una riga nella   tabella degli ordini possa venire inserita nel report finale, il valore del campo OggettoRicercato deve essere all' interno della lista  degli oggetti restituita dalla subquery. Per chiarire meglio la cosa si può vederla in questo modo: la subquery ritorna un set di oggetti con i quali vengono confrontati gli oggetti presenti nella colonna OggettoRicercato e la condizione di inclusione diventa vera solo se il valore del campo OggettoRicercato è presente nella lista ritornata dalla subquery

Inoltre tenete ben presente che quando usate le clausole IN, '= ANY', o '= SOME' NON potete fare riferimento a più colonne diverse. sono i valori che vengono restituiti a potere essere differenti , e il confronto può venire fatto tra valori differenti contenuti in ogni RIGA ma NON in colonne differenti. il viceversa non e' possibile.

Ok, penso che abbiamo discusso in maniera ampia e dettagliata del comando SELECT e penso che dovreste essere a questo punto in grado di arrivare a fare query di selezione decisamente complesse, per cui passiamo agli altri comandi di SQL


Comandi SQL Vari

Funzioni di Aggregazione

In questa sezione introdurrò le cinque più importanti  Funzioni di Aggregazione: SUM, AVG, MAX, MIN, e COUNT. Queste funzioni vengono chiamate Di Aggregazione perché servono a calcolare valori dai risultati delle query invece che a ottenerne un listato di tutte le righe. Vediamo il significato di ogni funzione:

SUM () restituisce il totale di tutte le righe, che soddisfano ogni condizione, della colonna data, quando tale colonna contiene valori numerici

AVG () restituisce la media della colonna data

MAX () restituisce il valore più elevato della colonna data

MIN () restituisce il valore più piccolo della colonna data

COUNT(*) restituisce il numero di righe che soddisfano le condizioni

proviamo a fare un po' di esempi con le tabelle degli impiegati utilizzate all' inizio di questo documento. guardiamo questi tre esempi:

SELECT SUM(StipendioAnnuo), AVG(StipendioAnnuo)
FROM TabellaStatisticheImpiegati;

Questa query ritorna la somma totale di tutti gli stipendi annui presenti nella tabella e la media degli stessi

SELECT MIN(Benefici)
FROM TabellaStatisticheImpiegati
WHERE Posizione = 'Dirigente';

Questa query ritorna il valore del piu' basso importo annuo preso da un dirigente come beneficio accessorio (12 milioni).

SELECT COUNT(*)
FROM TabellaStatisticheImpiegati
WHERE POSITION = 'Impiegato';

Questa query risponde dandoci il numero di persone con la qualifica di impiegato (3).


Viste

In SQL si può normalmente avere la possibilità di crearsi delle proprie viste, cioè creare delle query 'perenni' che possono venire utilizzate come delle vere e proprie tabelle. normalmente questa funzione può venire usata da ogni singolo utente, che sarà colui che vedrà la vista se non specificato diversamente dal DBA (controllate il vostro DBMS e sentite dal vostro DB Administrator se gli utenti hanno questo diritto). per essere più precisi quello che fa una vista e' permettervi di assegnare i risultati di una query ad una nuova tabella 'personale' (cioè legata al vostro utente), che potete usare all' interno di altre query , ed il cui nome potete tranquillamente specificare nella clausola FROM come se fosse una qualunque tabella. Generalmente le viste sono dinamiche, cioè i valori nella tabella vengono rigenerati tutte le volte che accedete alla vista stessa. un esempio di creazione di una vista può essere il seguente:

CREATE VIEW VistaAnt AS SELECT OggettoRichiesto FROM Ordini;

A questo punto possiamo scrivere una query che usa questa vista come una tabella; tabella che in realtà sarà solo un' elenco di tutti gli oggetti richiesti proveniente dalla tabella Ordini:

SELECT IDVenditore
FROM Antichita, VistaAnt
WHERE OggettoRichiesto = Oggetto;

Questa query mostra il codice del venditore estratto dalla tabella antichità quando il campo OggettoRichiesto in quella tabella compare nella vista VistaAnt, che e' semplicemente la lista di tutti gli oggetti richiesti nella tabella degli ordini, eseguita al momento del lancio della query.Le viste possono essere utilizzate sia allo scopo di restringere la visibilità dei dati a determinati utenti che per semplificare delle query complesse.


Creare Nuove Tabelle

Tutte le tabelle all' interno di un database devono venire create prima o poi. vediamo come possiamo fare. a titolo di esempio prendiamo in esame la creazione della tabella Ordini:

CREATE TABLE Ordini
(IDAntiquario    INTEGER  NOT NULL,
OggettoRicercato CHAR(40) NOT NULL);

Questo comando dice al DBMS di creare una tabella, gli assegna un nome e definisce ogni colonna nella stessa. ATTENZIONE: notate che questo comando utilizza dei tipi di dato generici, e che i tipi di dato possono variare da DBMS a DBMS, quindi verificate i tipi di dato disponibili sul vostro. Alcuni tipi di dato generalmente disponibili su quasi tutti i DBMS sono:

Char(x) - una serie di caratteri alfanumerici (generalmente la tabella ASCII o EBCDIC) , in cui x specifica il numero massimo di caratteri permessi nella colonna (spesso conosciuta anche come stringa di caratteri di lunghezza x).

Integer - una colonna di numeri interi, positivi o negativi, i cui massimi dipendono da DBMS a DBMS.

Decimal(x, y) - Una colonna di numeri decimali, in cui x esprime il numero massimo di cifre permesso e y il numero di cifre dopo la virgola. per esempio il numero più alto esprimibile in un campo definito Decimal(4,2) e' 99,99.

Date - Una colonna contenente delle date nel formato tipico specifico del proprio DBMS.

Logical - Una colonna che può contenere solo uno dei due seguenti valori: TRUE (vero) o FALSE (falso).

Altra cosa da notare e' l' impiego della clausola NOT NULL. Questa clausola impone che il relativo campo non possa mai venire lasciato vuoto (deve sempre essere presente un valore per questo campo). Nel caso si voglia invece permettere l' inserimento di record con quel determinato campo vuoto si usa la clausola NULL o, in molti DBMS, se non viene specificato nulla viene associata per default la clausola NULL.


Modificare la struttura delle tabelle

Sempre con la logica di vedere i comandi all' interno di esempi pratici, vediamo come si puo' aggiungere una nuova colonna 'Prezzo' alla tabella antichita per permettere l' inserimento del prezzo di ogni articolo. vista la prossima introduzione dell' euro inseriamo invece che un valore Integer un valore Decimal di dimensioni tali da poterci permettere di esprimere il prezzo sia in lire che in euro:

ALTER TABLE Antichita ADD (Prezzo DECIMAL(12,2) NULL);

l' ovvio complemento della clausola ADD qui utilizzata per aggiungere una colonna e' la clausola REMOVE che permette di eliminare una colonna specificata. i dati in questa nuova colonna possono essere modificati o inseriti come specificato poco oltre.


Inserire dati in una tabella

Per inserire record (righe) in una tabella si usa il seguente comando (esempio riferito alla tabella Antichita a cui e' appena stato aggiunto il prezzo) :

INSERT INTO Antichita VALUES (21, 01, 'Ottomana', 2000000.00);

Questo comando inserisce una nuova riga nella tabella, nell' ordine dei campi predefinito e riempiendo tutti i campi. per poter variare l' ordine di inserimento dei campi e lasciare in bianco il campo Prezzo (che abbiamo precedentemente definito NULL e che quindi accetta valori nulli) si può fare così:

INSERT INTO Antichita (IDAcquirente, IDVenditore, Oggetto)
VALUES (01, 21, 'Ottomana');


Cancellare dati da una tabella

Adesso proviamo a cancellare la riga di dati che abbiamo appena inserito dalla tabella:

DELETE FROM Antichita
WHERE Oggetto = 'Ottomana';

Ma, in questo caso, se c'e' un' altra riga che contiene nel campo Oggetto la parla 'Ottomana' verrà cancellata anch'essa. per cui siamo un po' più specifici e cancelliamo la riga specificando tutti i dati che abbiamo appena inserito:

DELETE FROM Antichita
WHERE Oggetto = 'Ottomana' AND IDAcquirente = 01 AND IDVenditore = 21;


Modifica dei dati 

Proviamo ad aggiornare il valore di un prezzo in un record dove questo non e' stato inserito. ricordiamoci che in questo caso non si tratta di un inserimento ma di una modifica del valore NULL precedentemente impostato in quel campo, in quanto il record e' già presente nella tabella:

UPDATE Antichita SET Prezzo = 500000.00 WHERE Oggetto = 'Sedia';

Questo comando imposta il prezzo di tutte le sedie a 500.000£ . anche in questo caso possiamo fare riferimento alla sintassi della clausola WHERE del comando SELECT per essere più o meno specifici nella scelta dei record da modificare. inoltre, esattamente come nel comando SELECT, si possono modificare più colonne con la stessa sintassi usata in questo comando per indicare più colonne (elenco diviso da virgole dopo la clausola SET) .


Gli Indici

Gli indici permettono ad un DBMS di accedere ai dati più rapidamente (nota bene: questa funzionalità è non-standard/non disponibile su tutti i sistemi).Il sistema crea della strutture dati interne (gli indici) per la selezione più veloce di determinate righe quando la selezione è basata su colonne indicizzate. La struttura indica al DBMS dove si trova una certa riga su una tabella con colonne indicizzate, più o meno come il glossario di un libro indica la pagina in cui appare una determinata parola. Creiamo un indice per IDAntiquario nella tabella ANTIQUARI

CREATE INDEX OID_IDX ON ANTIQUARI (IDAntiquari);

Ora un indice sui nomi:

CREATE INDEX NAME_IDX ON ANTIQUARI (CognomeAntiquario, NomeAntiquario);

Per eliminare un indice si usa l'istruzione DROP:

DROP INDEX OID_IDX;

In più, si può usare l'istruzione DROP TABLE per eliminare una tabella (attenzione! Questo significa che la tua tabella viene cancellata). Nel secondo esempio, l'indice è relativo a due colonne, aggregate insieme; in questo caso, possono accadere strani comportamenti. consultare il manuale prima di eseguire questa operazione.

Alcuni DBMS non richiedono l'unicità della chiave primaria. In altre parole, se cercassi di inserire un'altra riga nella tabella ANTIQUARI con un IDAntiquario = 2, alcuni sistemi mi lascerebbero fare quest'operazione, anche se non è consigliabile, in quanto si suppone che il valore di questa colonna sia unico per ciascuna riga. Un modo per ovviare a possibili inconvenienti di questo genere è di creare un indice unico sulla colonna che noi vogliamo sia una chiave primaria, per forzare il sistema ad impedire la duplicazione di valori in quella colonna:

CREATE UNIQUE INDEX OID_IDX ON ANTIQUARI (IDAntiquario);


GROUP BY ed HAVING

Un uso speciale dell'istruzione GROUP BY è di associare una funzione di aggregazione (nella fattispecie COUNT; conta il numero di righe in ciascun gruppo) con dei gruppi di righe. Si assuma che la tabella ANTICHITA abbia la colonna PREZZO e che ciascuna riga abbia un valore inserito in questa colonna. Quello che ci interessa è di vedere il prezzo dell'oggetto più costoso comprato da ciascun acquirente. Si deve impartire via SQL l'ordine di raggruppare gli acquisti di ciascun acquirente, e di stampare il prezzo dell'acquisto più costoso:

SELECT IDAcquirente, MAX(Prezzo)
FROM ANTICHITA
GROUP BY IDAcquirente;

Ora, aggiungiamo l'istruzione di stampare il prezzo massimo di acquisto se supera i 100 dollari; in questo caso si usa l'istruzione HAVING:

SELECT IDAcquirente, MAX(Prezzo)
FROM ANTICHITA
GROUP BY IDAcquirente
HAVING Prezzo > 100;


Altre Subquery

Un altro uso comune delle Queries coinvolge l'uso di operatori per permettere ad una condizione di WHERE di includere l'output di una SELECT di una Query annidata. Dapprima, si mostri la lista degli acquirenti che hanno comprato un oggetto dispendioso (ovvero con il prezzo dell'articolo che superi di 100 dollari il prezzo medio di tutti gli oggetti comprati):

SELECT IDAcquirente
FROM ANTICHITA
WHERE Prezzo >

    (SELECT AVG(Prezzo) + 100
        FROM ANTICHITA);

La query annidata fra parentesi calcola il prezzo medio, somma 100, ed usando il risultato, si stampa un IDAcquirente per ciascun oggetto venduto di prezzo superiore. Si può usare DISTINCT IDAcquirente per visualizzare una sola riga per ciascun IDAcquirente selezionato.

Stampa i Cognomi della tabella ANTIQUARI, solo se hanno comprato un oggetto:

SELECT COGNOMEANTIQUARIO
FROM ANTIQUARI
WHERE IDAntiquario IN

    (SELECT DISTINCT IDAcquirente
        FROM ANTICHITA);

La query annidata (o sottoquery) seleziona una lista di acquirenti, e stampa il cognome di un Antiquario se e solo se il suo IDAntiquario appare nella lista selezionata dalla sottoquery (talvolta chiamata lista dei candidati). Nota: alcuni DBMS permettono di usare il segno uguale ('=') al posto di IN; per chiarezza, però, si preferisce l'uso di IN, in quanto la sottoquery non ritorna un valore singolo, bensì una lista.

Per un esempio relativo all' UPDATE, sappiamo che il gentiluomo che ha acquistato la libreria ha il Nome sbagliato nel database, e che il nome corretto è Giovanni:

UPDATE ANTIQUARI
SET NOMEANTIQUARIO = 'Giovanni'
WHERE IDAntiquario =

    (SELECT IDAcquirente
        FROM ANTICHITA
        WHERE OGGETTO = 'Libreria');

 In primis, la sottoquery cerca l'IDAcquirente per la persona o le persone che hanno acquistato la libreria, in secundis la query esterna aggiorna il Nome.

Regola delle sottoquery: quando si ha una sottoquery come parte di una condizione di WHERE, l'istruzione di SELECT deve avere un numero di colonne pari in numero e tipo a quelle contenute nella condizione di WHERE della query esterna. In altre parole, se si ha "WHERE NomeColonna = (SELECT..);" l'istruzione di Select deve avere solo una colonna, per trovare una corrispondenza con il NomeColonna della condizione di Where esterna; in più, il tipo deve essere il medesimo (due interi, due stringhe di caratteri, etc..).


EXISTS ed ALL

EXISTS usa una sottoquery come condizione: la condizione è Vera se la sottoquery ritorna almeno una riga, ed è Falsa se la sottoquery non ritorna nessuna riga. Questa è una funzionalità non intuitiva con quest'uso specifico. Comunque, se si vuole stampare un riassuntivo clienti solo se il negozio ha venduto Sedie, si può scrivere: 

SELECT NomeAcquirente, CognomeAcquirente
FROM ANTIQUARI
WHERE EXISTS

    (SELECT *
        FROM ANTICHITA
        WHERE Oggetto = 'Sedia');

Se nella colonna della tabella ANTICHITA c'è almeno una riga contenente l'articolo sedia, la sottoquery ritorna una o più righe, rendendo Vera la condizione EXISTS; di conseguenza la query stampa gli Antiquari. Se non ci sono righe con l'oggetto Sedia, la query esterna non  stamperà alcuna riga.

 ALL è un'altra funzionalità inusuale, in quanto la query che contengono l'istruzione ALL possono essere eseguite in altri modi, a volte anche più semplici; diamo un'occhiata alla query di esempio:

SELECT IDAcquirente, Oggetto
FROM ANTICHITA
WHERE Prezzo >= ALL

    (SELECT Prezzo
        FROM ANTICHITA);

Questa query ritorna l'oggetto con il prezzo più alto (o più di un oggetto se hanno un prezzo uguale e massimo), e l'Acquirente. La sottoquery ritorna una lista di tutti i prezzi nella tabella ANTICHITA, mentre la query esterna passa tutte le righe della tabella ANTICHITA, e se il prezzo è maggiore o uguale di qualunque altro oggetto (ALL = tutti), viene stampato, risultando così l'oggetto con il prezzo più alto. La ragione per cui viene usato il segno di "maggiore o uguale" è che il prezzo dell'oggetto più costoso sarà uguale al prezzo più alto della tabella.


UNION ed Outer Joins (rapida spiegazione non esaustiva)

Si possono presentare casi in cui si voglia vedere il risultato di diverse query insieme, combinando il loro output; in questi casi si usa l'espressione UNION. Per unire l'output delle due query seguenti, stampando tutti gli IDAcquirente, insieme con tutti quelli che hanno mandato un ordine, si esegua:

SELECT IDAcquirente
FROM ANTICHITA
UNION
SELECT IDAntiquario
FROM ORDINI;

 Si noti che SQL richiede che la lista di colonne di entrambe le Select siano uguali per tipo, colonna per colonna. In questo caso IDAcquirente ed IDAntiquario sono dello stesso tipo (Interi [integer]). Si noti inoltre che SQL elimina automaticamente le righe duplicate usando UNION (come fossero due set di dati); per le query singole si deve usare DISTINCT.

L'outer join, (join esterno) si usa quando una join fra tabelle viene "unita" con le righe non incluse nella condizione di join; questo risulta particolarmente utile se nella query sono contenute delle costanti di tipo testo. Per esempio:

SELECT IDAntiquario, 'presente in Ordini ed Antichita'
FROM ORDINI, ANTICHITA
WHERE IDAntiquario = IDAcquirente
UNION
SELECT IDAcquirente, 'presente solo in Antichita'
FROM ANTICHITA
WHERE IDAcquirente NOT IN
   
(SELECT IDAntiquario
        FROM ORDINI);

 La prima query fa una join per stampare tutti gli Antiquari in entrambe le tabelle, e per aggiungere un breve commento dopo ciascun ID. La UNION combina questa lista con la successiva, che viene generata anzi tutto richiamando gli ID non presenti nella tabella ORDINI, infine stampando gli ID esclusi dalla condizione di join. Quindi, ciascuna riga nella tabella ANTICHITA viene esaminata, e se l'IDAcquirente non è nella lista di esclusione, viene stampato con il commento fra apici. Ci possono essere modi più semplici per generare la stessa lista di ID, ma attaccare a ciascuna riga un commento fisso appropriato è ben più complesso se fatto in altri modi.

Questo concetto è utile in situazioni in cui una chiave primaria viene messa in condizione di join con una chiave secondaria, ma la chiave secondaria può essere NULL per alcune chiavi primarie. Ad esempio, in una tabella la chiave primaria è il venditore e in un'altra è il cliente, con il venditore riportato nella stessa riga. Se un venditore non ha clienti, il suo nome non appare nella tabella dei clienti. L'outer join si usa allora per ottenere la lista di tutti i venditori, insieme con i loro clienti, sia nel caso in cui il venditore abbia clienti sia nel caso in cui non ne abbia, cioè non venga stampato il nome del cliente (un valore di NULL logico) se il venditore non ha clienti, ma è nella tabella dei venditori. In caso contrario, il venditore sarà stampato insieme con ognuno dei suoi clienti.

Un altro punto importante riguardo ai NULL nelle condizioni di join: l'ordine delle tabelle nella lista successiva all'istruzione FROM è molto importante. La regola è che SQL aggiunge la seconda tabella alla prima; se la prima tabella presenta solo righe contenenti NULL nella colonna di join, e la seconda tabella ha una riga con NULL nella colonna di join, tale riga non risulta nella condizione di join, e pertanto deve venire inclusa con i dati di riga della prima tabella. Questa è un altro esempio in cui comunemente viene impiegato un outer join. Il concetto di NULL è importante, e può essere proficuo investigarlo in maniera più approfondita.

BASTA QUERY!!! O non ne avete ancora avuto abbastanza? . adesso si passa a qualcosa del tutto differente.


Sommario della Sintassi - Solo per veri masochisti

Qui potete trovare le forme generalizzate dei comandi discussi in questi appunti, più alcuni aggiuntivi che possono risultare comodi e la cui spiegazione e' data a latere. ATTENZIONE!!! non e' detto che tutti questi comandi siano esattamente in questa forma, controllate sul vostro sistema per avere la certezza del loro funzionamento e della loro disponibilità:

ALTER TABLE <Nome Tabella> ADD|DROP|MODIFY (Specifiche Colonna[e]vedere Create Table); --vi permette di aggiungere o cancellare una o più colonne da una tabella, o di cambiare i parametri di una colonna esistente (tipi di dato ecc..); questo comando e' utilizzato spesso anche per cambiare le specifiche fisiche di una tabella (dove e come viene salvata ecc.), ma in questo caso dipende direttamente dal DBMS che state usando, quindi vi rimando ai manuali del vostro database. Oltre che con questo comando le specifiche fisiche della tabella possono venire generalmente date all' interno del comando Create Table quando una tabella viene creata per la prima volta.

Begin Transaction; inizia a considerare i comandi seguenti come facenti parte di un' unico blocco (transazione) che vanno eseguiti in un blocco unico al raggiungimento di una istruzione di commit o scartati tutti insieme al raggiungimento di una istruzione rollback

COMMIT; effettua i cambiamenti fatti sul database dall' ultima istruzione Begin Transaction (in alcuni DBMS dall' ultima commit) e li rende permanenti -- questo blocco di istruzioni viene definito una Transazione

CREATE [UNIQUE] INDEX <Nome Indice>
ON <Nome Tabella> (<Lista Colonne>); -- UNIQUE e' opzionale e va usato senza parentesi quadre.

CREATE TABLE <Nome Tabella>
(<Nome Colonna> <Tipo di Dato> [(<Dimensione>)] <Limitazioni sulle colonne>,
altre colonne[PRIMARY KEY (colonna, colonna,)]); (sintassi valida anche per ALTER TABLE)
--dove Dimensione viene usato solo su alcuni tipi di dato, e le limitazioni includono quelle qui sotto riportate (controllate automaticamente dal dbms. una tentata violazione causa la generazione di un errore):

NULL o NOT NULL (vedi sotto)

UNIQUE obbliga a non avere due valori uguali all' interno della colonna

PRIMARY KEY dice al database che questa colonna e' la chiave primaria della tabella (utilizzato solo se la chiave primaria e' composta da una sola colonna, altrimenti una clausola  PRIMARY KEY (colonna, colonna, ) comparirà dopo l'ultima definizione di colonna.

CHECK permette ad una condizione di essere testata quando i dati vengono inseriti o aggiornati in una determinata colonna; per esempio, CHECK (Prezzo >= 0) impone al sistema di controllare che il prezzo sia maggiore o uguale a zero prima di accettare il valore; a volte viene implementato con l'istruzione CONSTRAINT.

DEFAULT inserisce il valore nel database per una determinata colonna se una riga viene inserita senza un valore per la colonna stessa; per esempio, BENEFITS INTEGER DEFAULT = 10000

FOREIGN KEY funziona esattamente come l'istruzione Primary Key, ma è seguita da: REFERENCES <Nome Tabella> (<Nome Colonna>), che riferisce la chiave riferita ad una chiave primaria.

CREATE VIEW <Nome Tabella> AS <Query>;

DELETE FROM <Nome Tabella> WHERE <Condizione>;

INSERT INTO <Nome Tabella> [(<Lista Colonne>)]
VALUES (<Lista Valori>);

ROLLBACK; -- Annulla le modifiche effettuare al database che sono state effettuate dopo l' ultimo comando COMMIT. ATTENZIONE! vedere il funzionamento delle istruzioni COMMIT, ROLLBACK e BEGIN TRANSACTION sui propri RDBMS particolari in quanto il funzionamento di tali comandi varia moltissimo da un sistema all' altro

SELECT [DISTINCT|ALL] <Lista Colonne, Funzioni, Costanti, ecc.>
FROM <Lista di tabelle o di viste>
[WHERE <Condizione/i>]
[GROUP BY <raggruppamento colonna/e>]
[HAVING <condizione>]
[ORDER BY <colonna/e di ordinamento> [ASC|DESC]]; --dove ASC|DESC permettono di fare in modo che l' ordinamento venga effettuato in ordine ascendente (ASC) o discendente (DESC)

UPDATE <Nome Tabella>
SET <Nome Colonna> = <Valore>
[WHERE <Condizione>]; -- se la clausola Where non e' specificata vengono aggiornate tutte le righe come specificate nella clausola SET


Scarica gratis Alias, In e l' utilizzo delle Subquery
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...