SQL

In SQL (Structured Query Language) te ne sbatti dell’interrogazione, vari modi ma alla fine SQL è ottimizzato di suo e non ti fai tutte le pippe mentali dell’algebra relazionale.. che ha diversi sbatti. conclusioni su SQL:

  • è molto di più del SELECT-FROM-WHERE
  • Tramite viste, vincoli, procedure e trigger si costruisce una base di dati ricca dal punto di vista semantico.
  • Tramite grant e revoke si costruiscono sistemi protetti dal punto di vista del controllo degli accessi
  • Le procedure (object-orientation) e i trigger (database attivi) verranno ulteriormente studiati nel corso di Basi di Dati 2.

Keywords sommario

  • SELECT : utilizzato per recuperare i dati da una tabella del database. SELECT * FROM customers;
  • WHERE:
SELECT * FROM customers WHERE city = 'Pavia';
  • JOIN:
SELECT customers.name, orders.order_date FROM customers JOIN orders ON customers.id = orders.customer_id;`
  • ORDER BY viene utilizzata per ordinare il set di risultati in ordine crescente o decrescente.
SELECT _column1_, _column2, ...
FROM _table_name_   
ORDER BY _column1, column2, ... ASC|DESC;
  • La parola chiave TOP: viene utilizzata per limitare il numero di righe restituito in una query, simile a LIMIT <integer>. NO LIMIT é di default.
SELECT TOP 1 * FROM orders ORDER BY order_date; 
-- simile a LIMIT  
SELECT * FROM customers LIMIT 5;`
  • La parola chiave COUNT: viene utilizzata per contare il numero di righe in una tabella o colonna
SELECT COUNT(name) FROM customers
  • GROUP BY: viene utilizzata per raggruppare i risultati di una query per una o più colonne.
SELECT COUNT(name), city FROM customers GROUP BY city;
  • La parola chiave HAVING: viene utilizzata per filtrare i risultati di una query dopo che sono stati raggruppati.
SELECT COUNT(name), city FROM customers GROUP BY city HAVING COUNT(name) > 10;
  • Esempio a caso:
SELECT name, (SELECT COUNT(*) FROM orders WHERE customer_id = customers.id) as order_count
FROM customers
WHERE city = 'Starbase'
ORDER BY order_count DESC;

Vincoli d’integrità

  • Vincolo d’integrità referenziale: è il vincolo interrelazionale più utilizzato. Gli attributi di una data tabella (slave) possono assumere soltanto dei valori specificati in un’altra tabella (master). Affinché sia rispettata l’integrità referenziale, ogni campo in una tabella che sia stato dichiarato come foreign key può contenere solo valori della chiave primaria o chiave candidata di una tabella “madre” relazionata.
  • Vincolo di tupla: un vincolo che può essere valutato su ciascuna tupla indipendentemente dalle altre.
  • Vincolo di dominio: applicabile su ogni singolo attributo.
  • Vincolo di primary key, verificabile solo osservando tutte le tuple di una tabella
  • Vincoli d’integrità più complessi (esprimibili (in SQL) con parole quali ‘CREATE ASSERTION’, ‘CHECK’, ‘NOT EXISTS’, ‘ALL’)