SQL WHERE-uttalande Introduktion
- WHERE-satsen används för att inkludera ett villkor när data hämtas från tabeller.
- När du måste ange ett villkor som måste följas medan data hämtas från tabeller, i det fallet där klausul används.
- Där klausul används för att filtrera de poster som du hämtar från select-satsen så att du får en mindre delmängd av data.
- Där klausul också används för att utföra join-operationer.
- Där sats endast returnerar de poster från tabellen som uppfyller det villkor som anges med den.
- Denna klausul används inte bara med SELECT Query, utan kan också användas med UPDATE och DELETE Queries.
- Använda where-sats med SELECT-fråga
- Where-sats med SELECT-fråga för att hämta alla kolumner från en tabell.
- För att hämta alla poster från en tabell, asterisk (*) symbol används.
Syntax:
SELECT *FROM TABLE_NAME WHERE condition;
Exempel:
Först skapar vi en databas med namnet "bookdb". Sedan kommer vi i den databasen att skapa en tabell "bok" och infoga poster i tabellen. Vi kommer att överväga samma databas och även samma tabell för efterföljande exempel.
Nu kommer vi att tillämpa where-satsen med SELECT-frågan för att hämta alla kolumner från tabellen där bokens pris är lika med 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)
Det finns bara en post med Book_ID =4, vars pris är lika med 200. Därför visas alla kolumner i den specifika posten.
- Where-sats med SELECT-fråga för att hämta en eller flera specifik kolumn från en tabell.
- För att hämta specifika kolumner från en tabell bör namnen på alla kolumner som ska hämtas anges i själva frågan.
- De specifika kolumnnamnen som ska hämtas kommer att separeras med kommatecken.
Syntax:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta specifika kolumner (Book_ID, Book_Price) från boken tabell där priset på boken är lika med 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)
Det finns bara en post med Book_ID =4, vars pris är lika med 200. Därför visas Book_ID och Book_Price för just den posten.
- Använder where-sats med UPDATE-fråga
Syntax:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Exempel:
Vi kommer att tillämpa where-satsen med UPDATE-frågan på boktabellen för att uppdatera Book_Name och Book_Author för en viss post genom att ange Book_ID som ett villkor i where-satsen.
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)
Det finns bara en post med Book_ID =3, vi har ändrat Book_name och Book_Author för den posten. Därför visas uppdaterad tabell.
- Använder where-sats med DELETE-frågan
Syntax:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Exempel:
Vi kommer att tillämpa where-klausulen med DELETE-frågan på boktabellen till
ta bort en bok med ett visst Book_ID genom att ange Book_ID som ett villkor i where-satsen.
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)
Det finns bara en post med Book_ID =5, vi har tagit bort hela posten från boktabellen. Därför visas uppdaterad tabell.
Operatorer med WHERE-deklaration
Du kan använda operatorer med where-satsen. Dessa operatorer kan användas tillsammans med where-satsen i SELECT-, UPDATE- och DELETE-frågor.
- Lika (=)
När operatorn lika med (=) används med where-satsen, kommer den att hämta dessa poster från tabellen varhelst värdet på kolumnnamnet som finns i en tabell är lika med värdet på kolumnnamnet som anges i frågan.
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta dessa poster från tabellen där bokens pris är lika med 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)
Det finns bara en post med Book_ID =4, vars pris är lika med 200. Därför visas alla kolumner i den specifika posten.
- Större än(>)
När operatorn större än (>) används med Where-satsen, kommer den att hämta dessa poster från tabellen varhelst värdet på kolumnnamnet som finns i en tabell är större än värdet på kolumnnamnet som anges i frågan.
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta dessa poster från tabellen där bokens pris är högre än 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)
Det finns tre poster med Book_ID =1, 3 och 4 vars priser är högre än 150. Därför visas alla kolumner i dessa poster.
- Mindre än (<)
När operatorn less than(<) används med where-satsen, kommer den att hämta dessa poster från tabellen varhelst värdet på kolumnnamnet som finns i en tabell är mindre än värdet på kolumnnamnet som anges i frågan.
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta dessa poster från tabellen där bokens pris är mindre än 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)
Det finns två poster med Book_ID =1 och 2 vars priser är lägre än 200. Därför visas alla kolumner i dessa poster.
- Större än eller lika med (>=)
När operatorn larger than eller equal(>=) används med where-satsen, kommer den att hämta dessa poster från tabellen varhelst värdet på kolumnnamnet som finns i en tabell är större än eller lika med värdet på kolumnnamnet som anges i fråga.
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta de poster från tabellen där bokens pris är högre än eller lika med 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)
Vi kan se att det finns fyra poster med Book_ID =1, 2, 3 och 4 vars priser är större än eller lika med 150. Därför visas alla kolumner i dessa poster.
- Mindre än eller lika med (<=)
När operatorn mindre än eller lika (<=) används med where-satsen, kommer den att hämta dessa poster från tabellen där värdet på kolumnnamnet som finns i en tabell är mindre än eller lika med värdet på kolumnnamnet som anges i frågan.
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta dessa poster från tabellen där bokens pris är mindre än eller lika med 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)
Det finns tre poster med Book_ID =1, 2 och 4 vars priser är mindre än eller lika med 200. Därför visas alla kolumner i dessa poster.
- Inte lika (<>)
När operatorn inte equal(<>) används med where-satsen, kommer den att hämta dessa poster från tabellen varhelst värdet på kolumnnamnet som anges i frågan inte matchar värdet på kolumnnamnet som finns i en tabell.
Exempel:
Vi kommer att tillämpa where-satsen med SELECT-frågan för att hämta de poster från tabellen där bokens pris inte är lika med 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)
Det finns tre poster med Book_ID =1, 2 och 4 vars priser inte är lika med 250. Därför visas alla kolumner i dessa poster.