In questa pagina vediamo i comandi principali per operare con MySQL, dopo le spiegazioni ci sono anche degli esempi pratici ampiamente utilizzati nel mondo informatico. Vedremo la Query SELECT con JOIN, la creazione di una tabella e inserimento di dati, funzioni di aggregazione e GROUP BY, CASE WHEN.
Indice dei contenuti
MySQL: elenco comandi di prompt
Prima di iniziare ricorda:
- Per connettersi al server è necessario fornire login e password
- host è l’hostname dove risiede MySQL
- user è lo username di un utente che possiede un account sul server
- -p specifica al server la richiesta della password all’utente.
- Per accedere alll’help: C:>mysql – help
- La creazione di un account viene eseguita dall’utente root, mediante il comando GRANT
- Il Query Browser permette l’esecuzione dei vari tipi di query
Ecco di seguito tutti i comandi utili.
mysql
Il comando “mysql” avvia l’interfaccia della riga di comando di MySQL, consentendo agli utenti di connettersi al server MySQL e interagire con i database utilizzando query SQL.
CREATE DATABASE
Il comando “CREATE DATABASE” viene utilizzato per creare un nuovo database all’interno del server MySQL. È possibile specificare il nome del database da creare dopo il comando “CREATE DATABASE”.
USE
Il comando “USE” consente di selezionare un database specifico come database corrente, su cui eseguire tutte le operazioni successive. Viene utilizzato per specificare il database su cui eseguire le query.
CREATE TABLE
Il comando “CREATE TABLE” viene utilizzato per creare una nuova tabella all’interno di un database specificato. È necessario specificare il nome della tabella e le definizioni delle colonne e dei tipi di dati all’interno delle parentesi graffe.
INSERT INTO
Il comando “INSERT INTO” viene utilizzato per inserire nuovi record (righe) all’interno di una tabella esistente. È necessario specificare il nome della tabella e i valori da inserire nelle colonne corrispondenti.
SELECT
Il comando “SELECT” viene utilizzato per recuperare dati da una o più tabelle nel database. È possibile specificare le colonne da selezionare e utilizzare il comando “WHERE” per applicare condizioni per filtrare i risultati.
UPDATE
Il comando “UPDATE” viene utilizzato per aggiornare i dati esistenti all’interno di una tabella. È necessario specificare il nome della tabella e i valori da aggiornare nelle colonne corrispondenti. È possibile utilizzare il comando “WHERE” per applicare condizioni per aggiornare solo i record desiderati.
DELETE
Il comando “DELETE” viene utilizzato per eliminare dati (record) da una tabella. È necessario specificare il nome della tabella e utilizzare il comando “WHERE” per applicare condizioni per eliminare solo i record desiderati.
ALTER TABLE
Il comando “ALTER TABLE” viene utilizzato per modificare la struttura di una tabella esistente. È possibile aggiungere, modificare o eliminare colonne, indici e vincoli utilizzando questo comando.
DROP TABLE
Il comando “DROP TABLE” viene utilizzato per eliminare una tabella dal database. Una volta eseguito il comando, tutti i dati e la struttura della tabella verranno eliminati definitivamente.
SHOW DATABASES
Il comando “SHOW DATABASES” mostra l’elenco di tutti i database disponibili nel server MySQL.
SHOW TABLES
Il comando “SHOW TABLES” mostra l’elenco di tutte le tabelle presenti nel database corrente.
DESCRIBE
Il comando “DESCRIBE” o “DESC” fornisce informazioni sulla struttura di una tabella, inclusi i nomi delle colonne, i tipi di dati e gli eventuali vincoli.
GROUP BY
Il comando “GROUP BY” viene utilizzato per raggruppare le righe di una tabella in base ai valori di una o più colonne specificate. È spesso utilizzato in combinazione con funzioni di aggregazione come “SUM” o “COUNT”.
ORDER BY
Il comando “ORDER BY” viene utilizzato per ordinare i risultati delle query in base ai valori di una o più colonne specificate. È possibile specificare l’ordine di ordinamento (crescente o decrescente).
CREATE INDEX
Il comando “CREATE INDEX” viene utilizzato per creare un indice su una o più colonne di una tabella. Gli indici migliorano le prestazioni delle query, consentendo di trovare i dati più rapidamente.
GRANT
Il comando “GRANT” viene utilizzato per concedere privilegi agli utenti su database, tabelle o colonne specifiche. Questo comando consente di controllare l’accesso e le operazioni consentite agli utenti.
REVOKE
Il comando “REVOKE” viene utilizzato per revocare i privilegi concessi in precedenza agli utenti su database, tabelle o colonne specifiche. Questo comando consente di rimuovere i privilegi dagli utenti.
COMMIT
Il comando “COMMIT” viene utilizzato per confermare le modifiche apportate al database da una transazione. Una transazione è un gruppo di operazioni di database che devono essere eseguite in modo atomico e coerente.
ROLLBACK
Il comando “ROLLBACK” viene utilizzato per annullare le modifiche apportate al database da una transazione. Se una transazione non è stata confermata con “COMMIT”, “ROLLBACK” riporta il database allo stato precedente alla transazione.
HAVING
Il comando “HAVING” viene utilizzato per filtrare i risultati di una query dopo l’applicazione di una funzione di aggregazione utilizzando il comando “GROUP BY”. Questo permette di specificare condizioni per filtrare gruppi di dati basati sul risultato delle funzioni di aggregazione.
UNION
Il comando “UNION” viene utilizzato per combinare i risultati di due o più query in un singolo set di risultati. Le query coinvolte devono avere lo stesso numero di colonne e tipi di dati corrispondenti.
UNION ALL
Il comando “UNION ALL” è simile a “UNION”, ma include anche tutte le righe duplicate dai risultati combinati. A differenza di “UNION”, “UNION ALL” non rimuove le righe duplicate.
LIKE
Il comando “LIKE” viene utilizzato per eseguire una ricerca basata su modelli all’interno di una colonna. È possibile utilizzare caratteri speciali come “%” (qualsiasi sequenza di caratteri) e “_” (qualsiasi singolo carattere) per specificare modelli di ricerca.
IN
Il comando “IN” viene utilizzato per verificare se un valore è presente in un elenco specificato. È spesso utilizzato in combinazione con l’operatore “NOT” per verificare se un valore non è presente nell’elenco.
EXISTS
Il comando “EXISTS” viene utilizzato per verificare se una sottoquery restituisce risultati. Viene spesso utilizzato in combinazione con “IN” o “NOT IN” per verificare l’esistenza di dati corrispondenti.
AS
Il comando “AS” viene utilizzato per assegnare un alias (nome alternativo) a una colonna o a una tabella in una query. Gli alias possono rendere le query più leggibili e consentire di riferirsi alle colonne con nomi personalizzati nei risultati della query.
GROUP_CONCAT
La funzione “GROUP_CONCAT” viene utilizzata per concatenare i valori di una colonna in un singolo valore separato da una virgola o da un altro delimitatore specificato. Questa funzione è spesso utilizzata in combinazione con “GROUP BY” per ottenere risultati aggregati più compatti.
DATE_FORMAT
La funzione “DATE_FORMAT” viene utilizzata per formattare date e orari in una forma leggibile. È possibile specificare un formato personalizzato utilizzando i caratteri di formattazione, ad esempio “%Y” per l’anno a quattro cifre o “%m” per il mese.
COUNT
La funzione “COUNT” viene utilizzata per calcolare il numero di righe o valori in una colonna. È spesso utilizzata in combinazione con “GROUP BY” per contare il numero di righe in ogni gruppo.
SUM
La funzione “SUM” viene utilizzata per calcolare la somma dei valori in una colonna numerica. È spesso utilizzata con “GROUP BY” per ottenere la somma dei valori in ogni gruppo.
AVG
La funzione “AVG” viene utilizzata per calcolare la media dei valori in una colonna numerica. Come “SUM” e “COUNT”, è spesso utilizzata con “GROUP BY” per ottenere la media dei valori in ogni gruppo.
MAX
La funzione “MAX” viene utilizzata per trovare il valore massimo in una colonna. Può essere utilizzata anche con “GROUP BY” per ottenere il valore massimo in ogni gruppo.
MIN
La funzione “MIN” viene utilizzata per trovare il valore minimo in una colonna. Può essere utilizzata anche con “GROUP BY” per ottenere il valore minimo in ogni gruppo.
ORDER BY
Il comando “ORDER BY” viene utilizzato per ordinare i risultati di una query in base ai valori di una o più colonne specificate. È possibile specificare l’ordine di ordinamento (crescente o decrescente) utilizzando le parole chiave “ASC” e “DESC”.
LIMIT
Il comando “LIMIT” viene utilizzato per limitare il numero di righe restituite da una query. È possibile specificare il numero massimo di righe da restituire, ad esempio “LIMIT 10” restituirà solo le prime 10 righe.
JOIN
Il comando “JOIN” viene utilizzato per combinare le righe di due o più tabelle in base a una condizione specificata, creando risultati basati su colonne comuni tra le tabelle coinvolte. Ci sono diversi tipi di JOIN, tra cui INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN.
LEFT JOIN
Il comando “LEFT JOIN” restituisce tutte le righe della tabella sinistra (prima tabella specificata) e le righe corrispondenti dalla tabella destra (seconda tabella specificata). Se non ci sono corrispondenze nella tabella destra, vengono restituite righe NULL.
RIGHT JOIN
Il comando “RIGHT JOIN” restituisce tutte le righe della tabella destra (seconda tabella specificata) e le righe corrispondenti dalla tabella sinistra (prima tabella specificata). Se non ci sono corrispondenze nella tabella sinistra, vengono restituite righe NULL.
FULL JOIN
Il comando “FULL JOIN” restituisce tutte le righe sia della tabella sinistra che della tabella destra. Se non ci sono corrispondenze, vengono restituite righe NULL.
PRIMARY KEY
La clausola “PRIMARY KEY” viene utilizzata per definire una chiave primaria per una tabella. Una chiave primaria è univoca per ogni riga della tabella e garantisce l’identificazione univoca di ogni record.
FOREIGN KEY
La clausola “FOREIGN KEY” viene utilizzata per definire una chiave esterna per una tabella, che stabilisce una relazione tra due tabelle. La chiave esterna fa riferimento a una chiave primaria in un’altra tabella, stabilendo un vincolo di integrità referenziale.
INDEX
La clausola “INDEX” viene utilizzata per creare un indice su una o più colonne di una tabella. Gli indici migliorano le prestazioni delle query, consentendo di trovare i dati più rapidamente.
CREATE VIEW
Il comando “CREATE VIEW” viene utilizzato per creare una vista, che è una query salvata come oggetto all’interno del database. Le viste possono semplificare le query complesse e consentono di accedere facilmente a determinati dati.
DROP VIEW
Il comando “DROP VIEW” viene utilizzato per eliminare una vista dal database. Una volta eliminata una vista, la definizione della vista e i dati ad essa associati vengono eliminati.
GROUP BY WITH ROLLUP
La clausola “GROUP BY WITH ROLLUP” viene utilizzata con il comando “GROUP BY” per includere righe di sintesi aggiuntive nei risultati della query. Queste righe di sintesi rappresentano i totali aggregati per ogni gruppo.
COALESCE
La funzione “COALESCE” viene utilizzata per restituire il primo valore non NULL tra un elenco di valori. Se tutti i valori sono NULL, viene restituito NULL.
IFNULL
La funzione “IFNULL” viene utilizzata per restituire un valore alternativo se il valore specificato è NULL. Se il valore non è NULL, viene restituito il valore originale.
CASE
La funzione “CASE” viene utilizzata per eseguire valutazioni condizionali all’interno di una query SQL. È simile a un’istruzione “IF” e consente di restituire valori diversi in base a condizioni specifiche.
TRIGGER
Il comando “TRIGGER” viene utilizzato per creare un trigger, che è un’azione automatica attivata da eventi specifici (ad esempio, INSERT, UPDATE o DELETE) che si verificano in una tabella. I trigger possono essere utilizzati per implementare logica personalizzata all’interno del database.
Esempi per query e comandi MySQL
Di seguito vediamo alcuni casi d’uso per utilizzare al meglio i comandi MySQL. Questi comandi sono spesso usati dall’IT Support e da Database Administrator.
Creazione di una tabella e inserimento di dati
-- Creazione di una tabella "users" con chiave primaria "id", nome, cognome e età. CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(50), last_name VARCHAR(50), age INT ); -- Inserimento di dati nella tabella "users". INSERT INTO users (first_name, last_name, age) VALUES ('John', 'Doe', 30), ('Jane', 'Smith', 25), ('Mike', 'Johnson', 40);
Query SELECT con JOIN
Supponiamo di avere due tabelle: “orders” e “customers”, e vogliamo ottenere l’elenco degli ordini con il nome del cliente associato.
-- Creazione delle tabelle "orders" e "customers". CREATE TABLE customers ( customer_id INT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(100) ); CREATE TABLE orders ( order_id INT PRIMARY KEY AUTO_INCREMENT, order_date DATE, customer_id INT, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); -- Inserimento di dati nelle tabelle. INSERT INTO customers (customer_name) VALUES ('John Doe'), ('Jane Smith'), ('Mike Johnson'); INSERT INTO orders (order_date, customer_id) VALUES ('2023-07-30', 1), ('2023-07-31', 2), ('2023-08-01', 3); -- Query per ottenere l'elenco degli ordini con il nome del cliente associato. SELECT order_id, order_date, customer_name FROM orders JOIN customers ON orders.customer_id = customers.customer_id;
Funzioni di aggregazione e GROUP BY
Supponiamo di avere una tabella “products” con i prezzi dei prodotti e vogliamo calcolare la media, la somma e il numero totale di prodotti con lo stesso prezzo.
-- Creazione della tabella "products". CREATE TABLE products ( product_id INT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(100), price DECIMAL(10, 2) ); -- Inserimento di dati nella tabella "products". INSERT INTO products (product_name, price) VALUES ('Laptop', 800), ('Smartphone', 500), ('Tablet', 500), ('Headphones', 100); -- Query per calcolare la media, la somma e il numero di prodotti con lo stesso prezzo. SELECT price, COUNT(*) AS num_products, AVG(price) AS avg_price, SUM(price) AS total_price FROM products GROUP BY price;
CASE WHEN
Supponiamo di avere una tabella “employees” con l’età dei dipendenti e vogliamo creare una colonna aggiuntiva per indicare se un dipendente è giovane (età inferiore a 30 anni) o anziano (età maggiore o uguale a 30 anni).
-- Creazione della tabella "employees". CREATE TABLE employees ( employee_id INT PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(50), last_name VARCHAR(50), age INT ); -- Inserimento di dati nella tabella "employees". INSERT INTO employees (first_name, last_name, age) VALUES ('John', 'Doe', 25), ('Jane', 'Smith', 32), ('Mike', 'Johnson', 28); -- Aggiunta della colonna "age_group" utilizzando CASE WHEN. ALTER TABLE employees ADD COLUMN age_group VARCHAR(10) DEFAULT NULL; -- Aggiornamento della colonna "age_group" in base all'età dei dipendenti. UPDATE employees SET age_group = CASE WHEN age < 30 THEN 'Young' ELSE 'Old' END;
Approfondire MySQL
Libri
- MySQL Cookbook di Paul DuBois
- High Performance MySQL di Baron Schwartz, Peter Zaitsev, e Vadim Tkachenko
- MySQL 8.0 Reference Manual
Articoli Accademici e Paper
- “A Performance Evaluation of Open Source Database Management Systems” – IEEE Transactions on Knowledge and Data Engineering
- “Scaling Web Databases in a Shared-Nothing Architecture Using MySQL“