Telemat Lab's home page


Copyrigtht © 1996, 1997 Universita' di Firenze. All rights reserved.

Free license available.

 

Database Relazionali & Internet

SQL

a cura di: Alessandro Fiorenzi
Revisori:
Prof. F.Pirri, Ing. M. Lunghi, Ing. C. Vestri

 


HYPER HOME Indice Locale

 

SQL: Structured Query Language

   
Indice gen.
Indice DB & Internet
Prima Slide
Successiva
Testo Correlato

 

Il linguaggioSQL (Structured Query Language) era inizialmente progettato per essere usato in modo convenzionale, ponendo frasi d'interrogazione e/o d'elaborazione inviate da un terminale al DBMS, al terminale arrivavano i risultati. In seguito fu integrato con chiamate a DB all'interno di linguaggi di alto livello.

SQL è un linguaggio che definisce in sè un linguaggio di definizione dei dati DDL (Data Definition Language), è un linguaggio di manipolazione dei dati DML (Data Manipulating Language). Il linguaggio SQL non è un linguaggio procedurale; con SQL mediante frasi sintatticamente molto semplici, si richiede al DBMS di operare specifiche elaborazioni su la base di dati. SQL offre meccanismi di "protezione" mediante il concetto di vista. Infatti, in relazione all'utente, si ha una specifica vista del Db. Per esempio, il magazziniere non ha interesse, e non deve accedere ai dati della contabilità, a lui sono quindi assegnati dei diritti per leggere, leggere/scrivere, su specifiche aree del DB e non su altre.

Vediamo alcuni degli statement più significativi di SQL

Indice gen.
Indice DB & Internet
Prima Slide
Successiva
Data Definition Language Data Manipulating Language Data Controll Data Query
Istruzione CREATE Istruzione INSERT Istruzione GRANT Istruzione SELECT
  Istruzione UPDATE Istruzione REVOKE  
  Istruzione DELETE    

 

È chiaro che il set istruzioni di SQL è molto più ampio, ma gli statement visti sono alla base di strutturazione delle operazioni di accesso alla base di dati

 

 

Ultimo Aggiornamento 23 Settembre 1998


Telemat Lab's home page

HYPER HOME Indice Locale

 

Indice gen.
Indice DB & Internet
Prima Slide
Successiva
 

Istruzione CREATE

L'istruzione CREATE TABLE serve per create tabelle.

CRETE TABLE nome_tabella
(
   nome_colonna tipo_colonna costrizioni_colonna
   [, nome_colonna tipo_colonna costrizioni_colonna]
   [ ... ]
)
  • nome_tabella è in nome che viene dato alla tabella;
  • nome_colonna è il nome di una colonna della tabella;
  • tipo_colonna è il tipo della colonna specificata col nome_colonna e, se necessario, seguito dalla dimensione;
  • costrizioni_colonna consentono di specificare alcune caratteristiche della colonna considerata:
    • NOT NULL
      significa che la colonna considerata non può assumere valore nullo,
    • CONSTRAINT nome_constraint_colonna UNIQUE (nome_colonna)
      significa che la costrizione nome_constraint_colonna identifica la colonna nome_colonna in cui i dati contenuti devono essere unici, cioè non ci possono essere due tuple della tabella con lo stesso valore nella colonna nome_colonna,
    • CONSTRAINT nome_primary_key_colonna PRIMARY KEY (nome_colonna)
      significa che la costrizione nome_primary_key_colonna identifica la colonna nome_colonna come una chiave primaria,
    • CONSTRAINT nome_foreign_key_colonna FOREIGN KEY (nome_colonna)
      significa che la costrizione nome_foreign_key_colonna identifica la colonna nome_colonna come una foreign key.

 

 

 


 

Istruzione INSERT


L'istruzione INSERT serve per aggiungere nuove righe in una tabella o in una vista basata su tabelle. L'istruzione è:

INSERT INTO {nome_tabella | nome_vista}
[(lista_colonne)]
{ VALUES (lista_valori) | subquery}
  • È necessario mettere il nome della tabella od il nome della vista in cui fare l'inserimento;
  • lista_colonne è la lista delle colonne in cui dovranno essere inseriti i nuovi valori, è importante l'ordine; se non viene messa tale lista, i valori inseriti vengono messi nelle colonne nell'ordine in cui queste ultime sono state definite durante la creazione della tabella;
  • i valori inseriti possono essere elencati esplicitamente nella lista_valori o attraverso una subquery.

Esempio

INSERT INTO anagrafica
VALUES ('Fontana', 'Giorgio', 'XYZ826K', null, null, 'taichi')

In questo modo si inserisce nella tabella anagrafica una nuova riga attribuendo ai campi, nell'ordine in cui sono stati definiti, i valori elencati nella clausola VALUE.

 

 

 


 

Istruzione UPDATE


L'istruzione UPDATE serve per cambiare valori esistenti in una tabella o in una vista.

UPDATE {nome_tabella | nome_vista}
SET
   nome_colonna = {espressione | subquery}
   [, nome_colonna = {espressione | subquery}]
   [, ...]
[WHERE condizione]
  • È necessario mettere il nome della tabella od il nome della vista in cui aggiornare i dati;
  • nome_colonna è il nome della colonna a cui si associa un nuovo valore ottenuto come risultato di un'espressione o di una subquery posta a destra del segno di uguaglianza;
  • è possibile mettere condizioni sulle tuple da aggiornare usando la clausola WHERE.

Esempio.

UPDATE anagrafica
SET
  età=25,
  sport='pattinaggio'
WHERE cognome='Feltri' and nome='Daniela'

Tale istruzione consente di modificare informazioni già presenti nella tabella anagrafica; in particolare, le tuple che soddisfano la condizione vengono aggiornate ponendo 25 come età e pattinaggio come sport.

 

 

 


 

Istruzione DELETE


L'istruzione DELETE serve per cancellare righe da una tabella o da una vista.

DELETE FROM {nome_tabella | nome_vista}
[WHERE condizione]
  • È necessario mettere il nome di una tabella od il nome di una vista;
  • si usa la clausola WHERE se si vogliono cancellare solo righe che soddisfano certe condizioni.

Esempio

DELETE FROM anagrafica
WHERE cognome='Feltri'

Con tale istruzione si eliminano dalla tabella anagrafica tutte le tuple che hanno 'Feltri' come valore del campo cognome

 

 

 


 

Istruzione GRANT


Il proprietario di un oggetto può accordare privilegi su di esso ad altri utenti tramite l'istruzione GRANT.

La sintassi del comando per SQL di Oracle è la seguente:

GRANT {ALL | privilegio [lista_colonne] [, privilegio [lista_colonne] ] [, ...] }
ON oggetto
TO {lista_utenti | PUBLIC}
[WITH GRANT OPTION]
  • ALL concede tutti i privilegi sull'oggetto all'utente.
  • Privilegio è il privilegio sull'oggetto che viene concesso e può essere: ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE. Tale privilegio, se è seguito dalla lista delle colonne dell'oggetto, viene concesso solo sulle colonne listate, altrimenti viene concesso su tutto l'oggetto.
  • Oggetto è l'oggetto su cui si danno i privilegi.
  • TO è seguito da PUBLIC, se si vogliono concedere i privilegi sull'oggetto a tutti gli utenti, altrimenti da lista_utenti, che è l'elenco di utenti a cui si vogliono concedere i privilegi.
  • La clausola WITH GRANT OPTION permette agli utenti che ricevono i privilegi di concederli a loro volta ad altri.

Esempio:

GRANT SELECT (cognome, nome)
ON anagrafica
TO PUBLIC

In questo modo si concede a tutti gli utenti di poter eseguire sulla tabella anagrafica delle SELECT solo sui campi cognome e nome.

Esempio.

GRANT SELECT
ON anagrafica (cognome, nome)
TO PUBLIC

È l'istruzione analoga a quella vista per SQL di Oracle.

 

 

 


 

Istruzione REVOKE


L'istruzione REVOKE serve per revocare i privilegi sugli oggetti agli utenti.

La sintassi del comando per SQL di Oracle è la seguente:

REVOKE {ALL | privilegio [, privilegio] [, ...] }
ON oggetto
FROM {lista_utenti | PUBLIC}
  • ALL revoca tutti i privilegi sull'oggetto all'utente.
  • Privilegio è il privilegio sull'oggetto che viene revocato su tutto l'oggetto e può essere: ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE.
  • Oggetto è l'oggetto su cui si tolgono i privilegi.
  • FROM è seguito da PUBLIC, se si vogliono revocare i privilegi sull'oggetto a tutti gli utenti, altrimenti da lista_utenti, che è l'elenco di utenti a cui si revocano i privilegi.

Esempio.

REVOKE SELECT
ON anagrafica
FROM PUBLIC

In questo modo si revoca a tutti gli utenti il privilegio di poter eseguire sulla tabella anagrafica delle SELECT solo sui campi cognome e nome.

La sintassi del comando per Transact-SQL di SQL Server è:

REVOKE {ALL | lista_privilegi}
ON { nome_tabella [lista_colonne] | nome_vista [lista_colonne] }
FROM {lista_utenti | PUBLIC}
  • ALL revoca tutti i privilegi sull'oggetto all'utente.
  • Lista_privilegi è l'elenco dei privilegi revocati su una tabella o su una vista e possono essere: SELECT, INSERT, DELETE, UPDATE.
  • ON è seguito dal nome della tabella o della vista su cui si revocano i privilegi. Dopo di che, se segue la lista delle colonne dell'oggetto, il privilegio viene revocato solo su tali colonne, altrimenti viene revocato su tutto l'oggetto.
  • FROM è seguito da PUBLIC, se si vogliono revocare i privilegi sull'oggetto a tutti gli utenti, altrimenti da lista_utenti, che è l'elenco di utenti a cui si vogliono revocare i privilegi.

Esempio.

REVOKE SELECT
ON anagrafica (cognome, nome)
TO PUBLIC

Tale istruzione revoca il privilegio di eseguire la SELECT sulle colonne cognome e nome della tabella anagrafica a tutti gli utenti.

 

 

 


 

Istruzione SELECT

L'istruzione SELECT serve per estrarre informazioni dal database.
La sua sintassi è la seguente:

SELECT [ ALL | DISTINCT ] lista_scelte
FROM lista_tabelle
[ WHERE condizioni ]
[ GROUP BY lista_attributi ]
[ HAVING condizioni ]
[ ORDER BY lista_attributi ]

Si osservi che la clausola SELECT realizza l'operatore di proiezione dell'algebra relazionale, non quello di selezione; quest'ultimo è realizzato dalla clausola WHERE.

ALL significa che vengono restituite tutte le tuple ottenute dall'interrogazione; in genere, ALL è di default.

DISTINCT significa che restituisce solo le tuple che sono uniche nel risultato, cioè produce una "relazione" e non solamente una "tabella".

Nella lista_scelte sono contenute quali informazioni devono essere fornite in uscita che possono essere:

  • Asterisco (*) che rappresenta tutte le colonne di ogni tabella presente nella clausola FROM, nell'ordine in cui sono state definite nelle tabelle e secondo l'ordine in cui sono listate le tabelle nella clausola FROM.
  • Una lista di nomi di colonne, specificate nell'ordine in cui si vogliono vedere; se la lista_scelte contiene nomi di colonne multiple, esse devono essere separate da virgole.
  • Una o più espressioni che possono essere: nomi di colonna (o campo), costanti, funzioni o combinazioni di nomi di colonne, costanti, e funzioni connesse tra loro attraverso operatori, o subquery (query innestate).

La clausola FROM è seguita dalla lista di tabelle, separate da virgole, che vengono usate nell'istruzione SELECT. In più, è possibile dare un alias alle tabelle. Tali alias, in genere, vengono usati nei riferimenti relativi a nomi di colonne che possono essere ambigui in quanto più tabelle possono avere colonne con stessi nomi colonne.

WHERE serve per specificare le restrizioni o condizioni che devono essere soddisfatte dalle tuple per far parte della tabella risultate.

Con la clausola GROUP BY si possono raggruppare le tuple per valori omogenei degli attributi specificati nella lista_attributi.

HAVING è l'equivalente del WHERE applicata ai gruppi di tuple, quindi, deve far riferimento agli attributi di GROUP BY.

ORDER BY serve per ordinare le tuple risultati dall'interrogazione in base alla lista_attributi che può contenere solo attributi che compaiono nella lista_scelte (anche implicitamente se si usa *).

 

HYPER HOME Indice Locale