Istruzione SQL WHERE Introduzione
- La clausola WHERE viene utilizzata per includere una condizione durante il recupero dei dati dalle tabelle.
- Quando devi specificare una condizione che deve essere rispettata mentre i dati vengono estratti dalle tabelle, in quel caso in cui viene utilizzata la clausola.
- Dove viene utilizzata la clausola per filtrare i record recuperati dall'istruzione select in modo da ottenere un sottoinsieme di dati più piccolo.
- Dove la clausola viene utilizzata anche per eseguire operazioni di unione.
- Dove la clausola restituisce solo quei record della tabella che soddisfano la condizione specificata con essa.
- Questa clausola non viene utilizzata solo con SELECT Query, ma può essere utilizzata anche con UPDATE e DELETE Query.
- Utilizzo della clausola where con query SELECT
- Clausola Where con query SELECT per recuperare tutte le colonne da una tabella.
- Per recuperare tutti i record da una tabella, asterisco (*) viene utilizzato il simbolo.
Sintassi:
SELECT *FROM TABLE_NAME WHERE condition;
Esempio:
Per prima cosa creeremo un database con il nome "bookdb". Quindi in quel database creeremo una tabella "libro" e inseriremo i record nella tabella. Considereremo lo stesso database e anche la stessa tabella per gli esempi successivi.
Ora applicheremo la clausola where con query SELECT per recuperare tutte le colonne dalla tabella in cui il prezzo del libro è pari a 200.
mysql> CREATE DATABASE bookdb; Query OK, 1 row affected (0.07 sec) mysql> USE bookdb; Database changed mysql> CREATE TABLE book(Book_ID INT NOT NULL AUTO_INCREMENT, Book_Name VARCHAR(100) NOT NULL, Book_Author VARCHAR(40) NOT NULL, Book_Price INT NOT NULL, PRIMARY KEY(Book_ID)); Query OK, 0 rows affected (0.24 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("Learn MySQL","Abdul S", 180); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("MySQL Explained","Andrew Comeau", 150); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("MySQL Cookbook","Paul DuBois", 250); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("murach's MySQL","Joel Murach", 200); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("Head First SQL","Lynn Beighley", 300); Query OK, 1 row affected (0.07 sec) mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT *FROM book WHERE Book_Price=200; +---------+----------------+-------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+----------------+-------------+------------+ | 4 | murach's MySQL | Joel Murach | 200 | +---------+----------------+-------------+------------+ 1 row in set (0.00 sec)
Esiste un solo record con Book_ID =4, il cui prezzo è uguale a 200. Quindi vengono visualizzate tutte le colonne di quel particolare record.
- Clausola Where con query SELECT per recuperare una o più colonne specifiche da una tabella.
- Per recuperare colonne specifiche da una tabella, i nomi di tutte le colonne che devono essere recuperate devono essere specificati nella query stessa.
- I nomi delle colonne specifiche da recuperare saranno separati da una virgola.
Sintassi:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Esempio:
Applicheremo la clausola where con la query SELECT per recuperare colonne specifiche (Book_ID, Book_Price) dal libro tabella dove il prezzo del libro è pari a 200.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT Book_ID,Book_Price FROM book where Book_Price=200; +---------+------------+ | Book_ID | Book_Price | +---------+------------+ | 4 | 200 | +---------+------------+ 1 row in set (0.00 sec)
Esiste un solo record con Book_ID =4, il cui prezzo è uguale a 200. Quindi, vengono visualizzati Book_ID e Book_Price di quel particolare record.
- Utilizzo della clausola where con query UPDATE
Sintassi:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Esempio:
Applicheremo la clausola where con la query UPDATE sulla tabella del libro per aggiornare Book_Name e Book_Author di un particolare record specificando Book_ID come condizione nella clausola where.
mysql> SELECT *FROM book; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | MySQL Cookbook | Paul DuBois | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------+---------------+------------+ 5 rows in set (0.00 sec) mysql> UPDATE book SET Book_name="Database Management Systems", Book_Author="Raghu Ramakrishnan" WHERE Book_ID=3; Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------------------+--------------------+------------+ 5 rows in set (0.00 sec)
C'è solo un record con Book_ID =3, abbiamo cambiato Book_name e Book_Author di quel record. Viene quindi visualizzata la tabella aggiornata.
- Utilizzo della clausola where con query DELETE
Sintassi:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Esempio:
Applicheremo la clausola dove con la query DELETE sulla tabella del libro a
eliminare un libro con un particolare Book_ID specificando Book_ID come condizione nella clausola where.
mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------------------+--------------------+------------+ 5 rows in set (0.00 sec) mysql> DELETE FROM book WHERE Book_ID=5; Query OK, 1 row affected (0.23 sec) mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec)
C'è solo un record con Book_ID =5, abbiamo eliminato l'intero record dalla tabella del libro. Viene quindi visualizzata la tabella aggiornata.
Operatori con dichiarazione WHERE
È possibile utilizzare gli operatori con la clausola where. Questi operatori possono essere utilizzati insieme alla clausola where nelle query SELECT, UPDATE e DELETE.
- Uguale(=)
Quando viene utilizzato l'operatore uguale a (=) con la clausola where, recupererà quei record dalla tabella laddove il valore del nome della colonna presente in una tabella è uguale al valore del nome della colonna specificato nella query.
Esempio:
Applicheremo la clausola where con query SELECT per recuperare quei record dalla tabella in cui il prezzo del libro è pari a 200.
mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT *FROM book WHERE Book_Price=200; +---------+----------------+-------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+----------------+-------------+------------+ | 4 | murach's MySQL | Joel Murach | 200 | +---------+----------------+-------------+------------+ 1 row in set (0.00 sec)
Esiste un solo record con Book_ID =4, il cui prezzo è uguale a 200. Quindi vengono visualizzate tutte le colonne di quel particolare record.
- Maggiore di(>)
Quando viene utilizzato l'operatore maggiore di (>) con la clausola Where, recupererà quei record dalla tabella ogni volta che il valore del nome della colonna presente in una tabella è maggiore del valore del nome della colonna specificato nella query.
Esempio:
Applicheremo la clausola where con la query SELECT per recuperare quei record dalla tabella in cui il prezzo del libro è maggiore di 150.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price > 150; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 3 rows in set (0.00 sec)
Ci sono tre record con Book_ID =1, 3 e 4 i cui prezzi sono maggiori di 150. Quindi vengono visualizzate tutte le colonne di quei record.
- Meno di(<)
Quando viene utilizzato l'operatore minore di(<) con la clausola where, recupererà quei record dalla tabella ogniqualvolta il valore del nome della colonna presente in una tabella è inferiore al valore del nome della colonna specificato nella query.
Esempio:
Applicheremo la clausola where con la query SELECT per recuperare quei record dalla tabella in cui il prezzo del libro è inferiore a 200.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price < 200; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | +---------+-----------------+---------------+------------+ 2 rows in set (0.00 sec)
Ci sono due record con Book_ID =1 e 2 i cui prezzi sono inferiori a 200. Quindi vengono visualizzate tutte le colonne di quei record.
- Maggiore o uguale (>=)
Quando viene utilizzato l'operatore maggiore o uguale(>=) con la clausola where, recupererà quei record dalla tabella ogniqualvolta il valore del nome della colonna presente in una tabella è maggiore o uguale al valore del nome della colonna specificato nella interrogazione.
Esempio:
Applicheremo la clausola where con query SELECT per recuperare quei record dalla tabella in cui il prezzo del libro è maggiore o uguale a 150.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price >= 150; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec)
Possiamo vedere che ci sono quattro record con Book_ID =1, 2, 3 e 4 i cui prezzi sono maggiori o uguali a 150. Quindi vengono visualizzate tutte le colonne di quei record.
- Inferiore o uguale (<=)
Quando viene utilizzato l'operatore minore o uguale (<=) con la clausola where, recupererà quei record dalla tabella ogni volta che il valore del nome della colonna presente in una tabella è minore o uguale al valore del nome della colonna specificato in la domanda.
Esempio:
Applicheremo la clausola where con query SELECT per recuperare quei record dalla tabella in cui il prezzo del libro è inferiore o uguale a 200.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price <= 200; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------+---------------+------------+ 3 rows in set (0.00 sec)
Ci sono tre record con Book_ID =1, 2 e 4 i cui prezzi sono inferiori o uguali a 200. Quindi vengono visualizzate tutte le colonne di quei record.
- Non uguale (<>)
Quando viene utilizzato l'operatore non uguale(<>) con la clausola where, recupererà quei record dalla tabella ogni volta che il valore del nome della colonna specificato nella query non corrisponde al valore del nome della colonna presente in una tabella.
Esempio:
Applicheremo la clausola where con query SELECT per recuperare quei record dalla tabella in cui il prezzo del libro non è uguale a 250.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price <> 250; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------+---------------+------------+ 3 rows in set (0.00 sec)
Ci sono tre record con Book_ID =1, 2 e 4 i cui prezzi non sono uguali a 250. Quindi vengono visualizzate tutte le colonne di quei record.