SQL WHERE-instructie Inleiding
- WHERE-component wordt gebruikt om een voorwaarde op te nemen tijdens het ophalen van gegevens uit tabellen.
- Als u een voorwaarde moet specificeren waaraan moet worden voldaan terwijl gegevens uit tabellen worden gehaald, in dat geval wordt een clausule gebruikt.
- Waar-clausule wordt gebruikt om de records te filteren die u ophaalt uit de select-instructie, zodat u een kleinere subset met gegevens krijgt.
- Waar de clausule ook wordt gebruikt om join-bewerkingen uit te voeren.
- De Where-clausule retourneert alleen die records uit de tabel die voldoen aan de opgegeven voorwaarde.
- Deze clausule wordt niet alleen gebruikt met SELECT-query's, maar kan ook worden gebruikt met UPDATE- en DELETE-query's.
- Waar-clausule gebruiken met SELECT-query
- Waar-clausule met SELECT-query om alle kolommen uit een tabel op te halen.
- Om alle records uit een tabel op te halen, sterretje (*) symbool wordt gebruikt.
Syntaxis:
SELECT *FROM TABLE_NAME WHERE condition;
Voorbeeld:
Eerst zullen we een database maken met de naam "bookdb". Vervolgens zullen we in die database een tabel "boek" maken en records in de tabel invoegen. We zullen dezelfde database en ook dezelfde tabel beschouwen voor volgende voorbeelden.
Nu gaan we de waar-clausule toepassen met de SELECT-query om alle kolommen uit de tabel op te halen waar de prijs van het boek gelijk is aan 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)
Er is slechts één record met Book_ID =4, waarvan de prijs gelijk is aan 200. Vandaar dat alle kolommen van dat specifieke record worden weergegeven.
- Waar-clausule met SELECT-query om een of meer specifieke kolommen uit een tabel op te halen.
- Als u specifieke kolommen uit een tabel wilt ophalen, moeten de namen van alle kolommen die moeten worden opgehaald, in de query zelf worden opgegeven.
- De specifieke kolomnamen die moeten worden opgehaald, worden gescheiden door komma's.
Syntaxis:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Voorbeeld:
We zullen waar-clausule toepassen met SELECT-query om specifieke kolommen (Book_ID, Book_Price) uit het boek op te halen tabel waarin de prijs van het boek gelijk is aan 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)
Er is slechts één record met Book_ID =4, waarvan de prijs gelijk is aan 200. Daarom worden Book_ID en Book_Price van dat specifieke record weergegeven.
- Waar-clausule gebruiken met UPDATE-query
Syntaxis:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Voorbeeld:
We passen de where-clausule toe met de UPDATE-query op de boektabel om de Book_Name en Book_Author van een bepaald record bij te werken door de Book_ID op te geven als een voorwaarde in de where-clausule.
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)
Er is maar één record met Book_ID =3, we hebben de Book_name en Book_Author van dat record gewijzigd. Daarom wordt de bijgewerkte tabel weergegeven.
- Waar-clausule gebruiken met DELETE-query
Syntaxis:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Voorbeeld:
We zullen waar-clausule met DELETE-query op boekentafel toepassen op
verwijder een boek met een bepaalde Book_ID door de Book_ID op te geven als een voorwaarde in de where-clausule.
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)
Er is maar één record met Book_ID =5, we hebben dat hele record uit de boekentabel verwijderd. Daarom wordt de bijgewerkte tabel weergegeven.
Operators met WHERE-verklaring
U kunt operators gebruiken met de waar-clausule. Deze operators kunnen samen met de waar-clausule worden gebruikt in SELECT-, UPDATE- en DELETE-query's.
- Gelijk(=)
Wanneer de operator gelijk aan (=) wordt gebruikt met de where-clausule, worden die records uit de tabel opgehaald waar de waarde van de kolomnaam in een tabel gelijk is aan de waarde van de kolomnaam die is opgegeven in de query.
Voorbeeld:
We zullen waar-clausule toepassen met SELECT-query om die records op te halen uit de tabel waar de prijs van het boek gelijk is aan 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)
Er is slechts één record met Book_ID =4, waarvan de prijs gelijk is aan 200. Vandaar dat alle kolommen van dat specifieke record worden weergegeven.
- Groter dan(>)
Als de operator groter dan (>) wordt gebruikt met de Where-component, worden die records uit de tabel opgehaald waar de waarde van de kolomnaam in een tabel groter is dan de waarde van de kolomnaam die in de query is opgegeven.
Voorbeeld:
We zullen de waar-clausule toepassen met de SELECT-query om die records op te halen uit de tabel waar de prijs van het boek hoger is dan 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)
Er zijn drie records met Book_ID =1, 3 en 4 waarvan de prijzen hoger zijn dan 150. Vandaar dat alle kolommen van die records worden weergegeven.
- Minder dan(<)
Wanneer de operator less than(<) wordt gebruikt met de where-clausule, worden die records uit de tabel opgehaald wanneer de waarde van de kolomnaam in een tabel kleiner is dan de waarde van de kolomnaam die in de query is opgegeven.
Voorbeeld:
We zullen de waar-clausule toepassen met de SELECT-query om die records op te halen uit de tabel waar de boekprijs lager is dan 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)
Er zijn twee records met Book_ID =1 en 2 waarvan de prijzen lager zijn dan 200. Daarom worden alle kolommen van die records weergegeven.
- Groter dan of gelijk aan (>=)
Wanneer de operator groter dan of gelijk aan (>=) wordt gebruikt met de clausule Where, worden die records uit de tabel opgehaald waar de waarde van de kolomnaam in een tabel groter is dan of gelijk is aan de waarde van de kolomnaam die is opgegeven in de vraag.
Voorbeeld:
We zullen de Where-clausule met SELECT-query toepassen om die records uit de tabel op te halen waar de prijs van het boek groter is dan of gelijk is aan 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)
We kunnen zien dat er vier records zijn met Book_ID =1, 2, 3 en 4 waarvan de prijzen groter dan of gelijk zijn aan 150. Vandaar dat alle kolommen van die records worden weergegeven.
- Minder dan of gelijk aan (<=)
Als de operator kleiner dan of gelijk aan (<=) wordt gebruikt met de where-clausule, worden die records uit de tabel opgehaald waar ooit de waarde van de kolomnaam in een tabel kleiner is dan of gelijk is aan de waarde van de kolomnaam die is opgegeven in de vraag.
Voorbeeld:
We zullen de waar-clausule toepassen met de SELECT-query om die records op te halen uit de tabel waar de prijs van het boek kleiner is dan of gelijk is aan 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)
Er zijn drie records met Book_ID =1, 2 en 4 waarvan de prijzen kleiner of gelijk zijn aan 200. Vandaar dat alle kolommen van die records worden weergegeven.
- Niet gelijk (<>)
Wanneer de operator not equal(<>) wordt gebruikt met de where-clausule, worden die records uit de tabel opgehaald waar de waarde van de kolomnaam die in de query is opgegeven, niet overeenkomt met de waarde van de kolomnaam in een tabel.
Voorbeeld:
We zullen waar-clausule toepassen met SELECT-query om die records op te halen uit de tabel waar de prijs van het boek niet gelijk is aan 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)
Er zijn drie records met Book_ID =1, 2 en 4 waarvan de prijzen niet gelijk zijn aan 250. Vandaar dat alle kolommen van die records worden weergegeven.