Structured Query Language (SQL) è un linguaggio di programmazione standardizzato e specifico utilizzato per interagire con i sistemi di gestione dei database relazionali (RDBMS), come MySQL, SQL Server, IBM Db2, PostgreSQL e Oracle Database.
Le query SQL (note anche come comandi SQL o istruzioni SQL) consentono agli utenti di aggiungere, recuperare, aggiornare, eliminare, aggregare e, in generale, gestire con facilità i dati in un database relazionale (o SQL database). In questi sistemi, i dati strutturati sono ordinati in righe e colonne, che insieme formano delle tabelle. I dati sono in genere strutturati in più tabelle correlate che possono essere collegate tramite chiavi primarie o esterne.
A differenza di altri linguaggi di programmazione, SQL è un linguaggio dichiarativo, il che significa che descrive cosa l'utente vuole che il computer faccia piuttosto che come raggiungere il risultato. Si distingue quindi dai linguaggi imperativi o procedurali (come Java e COBOL), che invece richiedono istruzioni dettagliate passo passo.
Ad esempio, quando gli utenti scrivono una query SQL per recuperare i dati, non devono sottolineare i passaggi che il database dovrebbe seguire per raccogliere tali dati; descrivono invece come deve essere il risultato.
SELECT name, email
FROM customers
WHERE city = 'New York' ;
SQL è uno strumento fondamentale e versatile nel moderno stack tecnologico ed è apprezzato per le sue capacità di manipolazione dei dati, l'elaborazione rapida delle query e le solide funzionalità di sicurezza. Offre inoltre compatibilità tra diversi sistemi, scalabilità per gestire le crescenti esigenze di dati e un solido supporto open source da parte della community.
Negli anni '70, gli scienziati IBM Donald Chamberlin e Raymond Boyce hanno sviluppato e introdotto SQL. Ha avuto origine dal concetto di modelli relazionali e all'inizio era stato definito come Structured English Query Language (SEQUEL), prima di essere abbreviato in SQL. È diventato disponibile in commercio nel 1979 e da allora si è affermato come lo standard globale per i sistemi di gestione di database relazionali.
SQL è stato standardizzato dall'American National Standards Institute (ANSI) nel 1986 e dall'International Organization for Standardization (ISO) nel 1987. Nonostante sia uno standard, SQL ha vari dialetti, come T-SQL per Microsoft SQL Server e PL/SQL per Oracle Database. Questi dialetti SQL soddisfano esigenze di sistema specifiche garantendo al contempo la conformità ai comandi standard ANSI di base come SELECT, UPDATE, DELETE, INSERT e WHERE.
Newsletter di settore
Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e altro con la newsletter Think. Leggi l'Informativa sulla privacy IBM.
L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.
Dal suo sviluppo negli anni '70, SQL è diventato il fondamento dei moderni sistemi di database.
A differenza dei linguaggi di programmazione generici, SQL è progettato appositamente per i database relazionali e i database relazionali sono, a loro volta, ottimizzati per SQL. Questa coerenza strutturale reciproca rende SQL uno strumento di gestione dei dati altamente efficiente.
La natura dichiarativa di SQL lo rende accessibile anche agli utenti con poca esperienza nella programmazione, e quindi un linguaggio ideale per i principianti. Il suo utilizzo diffuso e l'integrazione con altri linguaggi di programmazione come Python e Java lo rendono una competenza preziosa anche in ambienti di programmazione e dati più ampi.
Analisti dei dati, data scientist e amministratori di database utilizzano regolarmente SQL perché è particolarmente efficace in attività come l'elaborazione dei dati, la definizione dei dati, il controllo degli accessi, la condivisione dei dati, l'integrazione dei dati e la big data analytics.
Nella data science, SQL viene utilizzato per creare database in cui vengono memorizzati grandi set di dati necessari per l'analisi dei dati. La sua capacità di manipolare e recuperare dati da questi grandi set di dati strutturati è fondamentale anche nello sviluppo di applicazioni di intelligenza artificiale (AI) e machine learning (ML), che richiedono dati di alta qualità per il loro addestramento.
Seguendo le proprietà ACID (atomicità, coerenza, isolamento e durabilità) SQL contribuisce a garantire un'elaborazione affidabile delle transazioni, anche nei casi d'uso critici e nella gestione di dati sensibili. Supporta inoltre processi decisionali basati sui dati più accurati, analytics avanzate e business intelligence più efficace.
SQL offre molti vantaggi, che lo rendono uno dei linguaggi di programmazione più utilizzati e duraturi.
I semplici comandi di SQL (come GROUP BY, ORDER BY, GRANT e REVOKE) consentono agli utenti di ogni livello di competenza di lavorare con i database.
Gli indici SQL e le tecniche di ottimizzazione delle query migliorano la velocità di recupero dei dati e, di conseguenza, migliorano le prestazioni del database.
I database SQL includono funzionalità di sicurezza come l'autenticazione degli utenti, il controllo degli accesso e la crittografia per proteggere i dati.
SQL aderisce agli standard ANSI e ISO SQL, che contribuiscono a garantire la compatibilità con vari sistemi e piattaforme, inclusi gli ambienti cloud e gli strumenti per big data.
SQL è in grado di gestire in modo efficace database di piccole e grandi dimensioni, adattandosi alle crescenti esigenze di dati senza una significativa perdita in termini di prestazioni.
Numerosi database SQL sono open source e sono supportati da una comunità ampia e attiva che contribuisce al miglioramento costante e alla risoluzione dei problemi.
Un database relazionale organizza i dati in tabelle (righe e colonne) e facilita la creazione di relazioni tra tabelle diverse. Ad esempio, un database del servizio clienti potrebbe utilizzare tabelle separate per informazioni su clienti, acquisti, codici prodotto e contatti, collegate da chiavi come un ID cliente univoco.
SQL consente agli utenti di scrivere query (e sottoquery) per manipolare questi dati. I comandi vengono eseguiti attraverso diversi componenti software durante il processo SQL:
Un parser verifica la correttezza delle istruzioni SQL e le converte in un formato comprensibile per il database, ad esempio simboli tokenizzati. Questo passaggio prevede l'analisi della sintassi e il controllo semantico. Il parser consente inoltre di garantire che l'utente sia autorizzato a eseguire l'operazione.
Quindi, un motore relazionale, noto anche come ottimizzatore di query, pianifica le strategie più efficienti di recupero, modifica o aggiunta dei dati. Per fare ciò, valuta diversi piani di esecuzione delle query. Scrive il piano in bytecode, che è un linguaggio per macchine virtuali. Questo passo è fondamentale per ottimizzare le prestazioni e l'uso delle risorse del database.
Infine, un motore di storage elabora il bytecode, esegue l'istruzione SQL e gestisce il data storage fisico. Gestisce la rappresentazione fisica dei dati, inclusi i formati di file e il buffering dei dati. Inoltre, restituisce il risultato all'utente o all'app. Questo passaggio aiuta a garantire un accesso efficiente ai dati e gli aggiornamenti sul disco. Questo collegamento spesso implica relazioni, come uno-a-molti o molti-a-molti, stabilite utilizzando chiavi primarie ed esterne per contribuire a garantire l'integrità dei dati.
I sistemi di gestione dei database relazionali (chiamati anche sistemi SQL) sono costituiti da molti componenti, tra cui:
I comandi SQL vengono tradizionalmente suddivisi nelle seguenti categorie:
Il data definition language gestisce oggetti di database come tabelle, viste e indici. Definisce la struttura e l'organizzazione dei dati memorizzati e le relazioni tra gli elementi di dati memorizzati.
Il data manipulation language gestisce i dati all'interno dei database attraverso operazioni come INSERT, UPDATE e OUTER JOIN, che aggiungono, modificano e combinano dati.
Il data control language controlla l'accesso ai dati tramite comandi come GRANT (per concedere le autorizzazioni) e REVOKE (per rimuovere le autorizzazioni). Può limitare la capacità di un utente di recuperare, aggiungere e modificare i dati.
Il data query language esegue query di dati per recuperare le informazioni, di solito utilizzando il comando SELECT. Può recuperare elementi di dati specifici o una serie di elementi.
Il transaction control language gestisce le modifiche alle transazioni per contribuire a garantire l'integrità dei dati e supporta le operazioni ROLLBACK e COMMIT per annullare o salvare le modifiche, rispettivamente. Viene utilizzato per coordinare la condivisione dei dati da parte di utenti simultanei.
I database SQL supportano varie istruzioni SQL per le operazioni sui dati. Tuttavia, i comandi SQL possono variare a seconda del database, che può utilizzare una propria sintassi SQL.
I comandi SQL di base includono:
Recupera i dati da una o più tabelle.
SELECT name, email
FROM customers
WHERE city = 'New York' ;
Questa istruzione recupera il nome e l'indirizzo e-mail di tutti i clienti che vivono a New York dalla tabella dei clienti.
Aggiunge nuove righe a una tabella.
INSERT INTO customers (name, email, city)
VALUES ('Jane Doe', 'jane.doe@example.com', 'Los Angeles') ;
Questa istruzione aggiunge una nuova riga alla tabella dei clienti con il nome "Jane Doe", l'e-mail "jane.doe@example.com" e la città "Los Angeles".
Aggiorna i dati esistenti in una tabella.
UPDATE customers
SET email = 'new.email@example.com'
WHERE name = 'John Doe' ;
Questa dichiarazione aggiorna l'e-mail del cliente con nome "John Doe" nella tabella dei clienti in "new.email@example.com".
Elimina righe da una tabella in base a una condizione.
DELETE FROM customers
WHERE city = 'Boston' ;
Questa istruzione elimina tutte le righe dalla tabella dei clienti in cui la città è "Boston".
Crea una nuova tabella e la sua struttura.
CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2) ) ;
Questa istruzione crea una nuova tabella denominata prodotti con tre colonne: product_id come chiave primaria intera, nome come stringa di caratteri variabili fino a 100 caratteri e prezzo come decimale con dieci cifre e due cifre decimali.
Modifica la struttura di una tabella esistente.
ALTER TABLE customers
ADD COLUMN birthday DATE ;
Questa istruzione aggiunge una nuova colonna compleanno di tipo DATA alla tabella clienti esistente.
Elimina una tabella e tutti i suoi dati.
DROP TABLE old_customers ;
Questa istruzione elimina la tabella old_customers insieme a tutti i suoi dati.
Unisce le righe di due o più tabelle in base a una colonna correlata.
SELECT c.name, p.name AS product_name FROM customers c JOIN orders o ON c.customer_id = o.customer_id JOIN products p ON o.product_id = p.product_id WHERE c.city = 'New York' ;
L'istruzione SQL JOIN recupera i nomi dei clienti e i nomi dei prodotti che hanno ordinato. Unisce le tabelle di clienti, ordini e prodotti in base a customer_id e product_id, selezionando solo i clienti che vivono a New York.
I database SQL sono database relazionali, in cui i dati strutturati vengono memorizzati in righe e tabelle collegate in vari modi. SQL è il linguaggio standard per interagire con questi database.
I database NoSQL (o database non relazionali) sono nati alla fine degli anni 2000 per gestire dati meno strutturati. Questi tipi di database (come MongoDB) offrono modelli di dati più flessibili rispetto ai database SQL.
Le principali differenze includono:
I database NoSQL sono scalabili orizzontalmente e gestiscono un traffico più elevato aggiungendo più server. Al contrario, i database SQL sono scalabili verticalmente e richiedono un hardware più potente per gestire un carico maggiore.
I database SQL utilizzano una struttura basata su tabelle ideale per transazioni a più righe e query complesse su dati correlati, grazie a solide funzionalità di indicizzazione e unione. NoSQL offre varie strutture come archivi chiave-valore, documenti, grafici o colonne larghe per soddisfare esigenze diverse e consentire una maggiore flessibilità con dati semistrutturati o non strutturati.
I database SQL sono ottimizzati per query complesse con una rigorosa coerenza dei dati, rispettando i principi ACID. I database NoSQL, che seguono i principi BASE (basically available, soft state, eventual consistency), offrono prestazioni più veloci per tipi di dati specifici, ma con garanzie di coerenza diverse.
I database SQL vengono spesso scelti per applicazioni che richiedono transazioni complesse, dati coerenti e una rigorosa aderenza agli schemi, come i sistemi finanziari, le piattaforme di e-commerce o i database CRM. NoSQL è preferito per dati in rapida evoluzione, su larga scala o semistrutturati, come nei social network, nella real-time analytics o nei sistemi di gestione dei contenuti.
I database SQL hanno una gamma più ampia di risorse, come tutorial e supporto della community di SQL grazie alla loro storia più lunga e alla loro adozione diffusa. NoSQL spesso richiede meno progettazione iniziale e può essere più facile da scalare, ma spesso richiede uno sviluppo più personalizzato per query complesse e coerenza dei dati.
I database SQL richiedono un'attenta progettazione dello schema e possono essere impegnativi in termini di manutenzione per le modifiche allo schema. Un DBMS NoSQL offre scalabilità e adattabilità più semplici per le modifiche allo schema senza tempi di inattività o ristrutturazioni prolungate.
Nonostante i punti di forza in termini di sicurezza di molti database SQL, altre applicazioni aziendali possono essere vulnerabili a problemi di sicurezza, come autenticazione debole, progettazione non sicura e configurazione non corretta. A causa di queste vulnerabilità, l'SQL injection rimane una minaccia reale per le organizzazioni.
L'SQL injection si verifica quando i pirati informatici manipolano le query SQL per accedere o danneggiare le informazioni del database. Per salvaguardare i dati SQL è fondamentale conoscere queste vulnerabilità e implementare misure di sicurezza efficaci.
Usa le soluzioni di database di IBM per soddisfare varie esigenze di workload nell'hybrid cloud.
Esplora IBM DB2, un database relazionale che offre prestazioni, scalabilità e affidabilità elevate per l'archiviazione e la gestione di dati strutturati. È disponibile come SaaS su IBM Cloud o in self-hosting.
Sblocca il valore dei dati enterprise con IBM Consulting, creando un'organizzazione basata su insight in grado di generare vantaggi aziendali.