Structured Query Language è un linguaggio standard per database che viene usato per creare, mantenere e recuperare il database relazionale. Di seguito ci sono alcuni fatti interessanti su SQL.

  • SQL è case insensitive. Ma è una pratica raccomandata usare le parole chiave (come SELECT, UPDATE, CREATE, ecc) in lettere maiuscole e usare le cose definite dall’utente (come il nome della tabella, il nome della colonna, ecc) in lettere piccole.
  • Possiamo scrivere commenti in SQL usando “-” (doppio trattino) all’inizio di qualsiasi linea.
  • SQL è il linguaggio di programmazione per i database relazionali (spiegato sotto) come MySQL, Oracle, Sybase, SQL Server, Postgre, ecc. Altri database non relazionali (chiamati anche NoSQL) come MongoDB, DynamoDB, ecc. non usano SQL
  • Anche se esiste uno standard ISO per SQL, la maggior parte delle implementazioni varia leggermente nella sintassi. Quindi possiamo incontrare query che funzionano in SQL Server ma non in MySQL.
  • Che cos’è il database relazionale?

    Il database relazionale significa che i dati sono memorizzati e recuperati in forma di relazioni (tabelle). La tabella 1 mostra il database relazionale con una sola relazione chiamata STUDENT che memorizza ROLL_NO, NAME, INDIRIZZO, TELEFONO ed ETÀ degli studenti.

    STUDENTE

    ROLL_NO NOME INDIRIZZO PHONE ETÀ
    1 RAM DELHI 9455123451 18
    2 RAMESH GURGAON 9652431543 18
    3 SUJIT ROHTAK 9156253131 20
    4 SURESH DELHI 9156768971 18

    TABELLA 1

    Queste sono alcune importanti terminologie che sono usate in termini di relazione.

    Attributo: Gli attributi sono le proprietà che definiscono una relazione. ad esempio; ROLL_NO, NAME ecc.

    Tupla: Ogni riga nella relazione è conosciuta come tupla. La relazione di cui sopra contiene 4 tuple, una delle quali è mostrata come:

    1 RAM DELHI 9455123451 18

    Grado: Il numero di attributi nella relazione è noto come grado della relazione. La relazione STUDENT definita sopra ha grado 5.

    Cardinalità: Il numero di tuple in una relazione è noto come cardinalità. La relazione STUDENT definita sopra ha cardinalità 4.

    Colonna: La colonna rappresenta l’insieme dei valori di un particolare attributo. La colonna ROLL_NO è estratta dalla relazione STUDENT.

    ROLL_NO

    Le query per trattare con il database relazionale possono essere categorie come:

    Data Definition Language: Viene utilizzato per definire la struttura del database. ad esempio; CREATE TABLE, ADD COLUMN, DROP COLUMN e così via.

    Data Manipulation Language: È usato per manipolare i dati nelle relazioni. ad esempio; INSERT, DELETE, UPDATE e così via.

    Linguaggio di interrogazione dei dati: Si usa per estrarre i dati dalle relazioni. ad esempio; SELECT

    Prima consideriamo il linguaggio di interrogazione dei dati. Una query generica per recuperare da un database relazionale è:

  1. SELECT Attribute_List FROM R1,R2….RM
  2. ]
  3. ];

La parte della query rappresentata dalla dichiarazione 1 è obbligatoria se si vuole recuperare da un database relazionale. Le dichiarazioni scritte all’interno sono opzionali. Esamineremo le possibili combinazioni di query sulla relazione mostrata nella Tabella 1.

Caso 1: Se vogliamo recuperare gli attributi ROLL_NO e NAME di tutti gli studenti, la query sarà:

SELECT ROLL_NO, NAME FROM STUDENT;
ROLL_NO NOME
1 RAM
2 RAMESH
3 SUJIT
4 SURESH

Caso 2: Se vogliamo recuperare ROLL_NO e NAME degli studenti il cui ROLL_NO è maggiore di 2, la query sarà:

SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO NAME
3 SUJIT
4 SURESH

Caso 3: Se vogliamo recuperare tutti gli attributi degli studenti, possiamo scrivere * al posto di scrivere tutti gli attributi come:

SELECT * FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO NAME INDIRIZZO PHONE ETÀ
3 SUJIT ROHTAK 9156253131 20
4 SURESH DELHI 9156768971 18

Caso 4: Se vogliamo rappresentare la relazione in ordine crescente per ETÀ, possiamo usare la clausola ORDER BY come:

SELECT * FROM STUDENT ORDER BY AGE;
ROLL_NO NOME INDIRIZZO PHONE ETÀ
1 RAM DELHI 9455123451 18
2 RAMESH GURGAON 9652431543 18
4 SURESH DELHI 9156768971 18
3 SUJIT ROHTAK 9156253131 20

Nota: ORDER BY AGE è equivalente a ORDER BY AGE ASC. Se vogliamo recuperare i risultati in ordine decrescente di ETÀ, possiamo usare ORDER BY AGE DESC.

Caso 5: Se vogliamo recuperare i valori distinti di un attributo o di un gruppo di attributi, si usa DISTINCT come in:

SELECT DISTINCT ADDRESS FROM STUDENT;

INDIRIZZO

DELHI

GURGAON

ROHTAK

Se DISTINCT non è usato, DELHI sarà ripetuto due volte nel set di risultati. Prima di capire GROUP BY e HAVING, abbiamo bisogno di capire le funzioni di aggregazione in SQL.

FUNZIONI DI AGGREGAZIONE: Le funzioni di aggregazione sono usate per eseguire operazioni matematiche sui valori dei dati di una relazione. Alcune delle comuni funzioni di aggregazione usate in SQL sono:

  • COUNT: La funzione Count è usata per contare il numero di righe in una relazione. es;
SELECT COUNT (PHONE) FROM STUDENT;

COUNT(PHONE)

  • SUM: La funzione SUM è usata per aggiungere i valori di un attributo in una relazione. es;

SELECT SUM (AGE) FROM STUDENT;

SUM(AGE)

Nello stesso modo, MIN, MAX e AVG possono essere usati. Come abbiamo visto sopra, tutte le funzioni di aggregazione restituiscono solo 1 riga.

AVERAGE: Dà i valori medi delle tabelle. E’ anche definita come somma divisa per i valori di conteggio.
Sintassi:AVG(attributename)
O
Sintassi:SUM(attributename)/COUNT(attributename)
La sintassi di cui sopra recupera anche il valore medio dei tuppi.

MAXIMUM:Estrae il valore massimo tra l’insieme delle tartine.
Sintassi:MAX(attributename)

MINIMUM:Estrae il valore minimo tra l’insieme di tutte le tartine.
Sintassi:MIN(attributename)

GROUP BY: Group by è usato per raggruppare le tuple di una relazione sulla base di un attributo o di un gruppo di attributi. È sempre combinato con la funzione di aggregazione che è calcolata sul gruppo. ad esempio;

SELECT ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);

In questa query, SUM(AGE) sarà calcolata ma non per l’intera tabella ma per ogni indirizzo. cioè; somma di AGE per l’indirizzo DELHI(18+18=36) e similmente anche per altri indirizzi. L’output è:

INDIRIZZO SUM(AGE)
DELHI 36
GURGAON 18
ROHTAK 20

Se proviamo ad eseguire la query indicata di seguito, risulterà in un errore perché anche se abbiamo calcolato SUM(AGE) per ogni indirizzo, ci sono più di 1 ROLL_NO per ogni indirizzo che abbiamo raggruppato. Quindi non può essere visualizzato nel set di risultati. Abbiamo bisogno di usare le funzioni aggregate sulle colonne dopo l’istruzione SELECT per dare un senso all’insieme risultante quando usiamo GROUP BY.

SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS); 

NOTA: Un attributo che non fa parte della clausola GROUP BY non può essere usato per la selezione. Qualsiasi attributo che fa parte della clausola GROUP BY può essere usato per la selezione, ma non è obbligatorio. Ma potremmo usare gli attributi che non fanno parte della clausola GROUP BY in una funzione aggregata.
Quiz su SQL

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *