SQL WHERE-erklæring Introduktion
- WHERE-sætning bruges til at inkludere en betingelse, mens data hentes fra tabeller.
- Når du skal angive en betingelse, der skal overholdes, mens data hentes fra tabeller, i det tilfælde hvor klausulen bruges.
- Hvor klausul bruges til at filtrere de poster, du henter fra select-sætningen, så du får en mindre delmængde af data.
- Hvor klausul også bruges til at udføre join-operationer.
- Hvor klausul kun returnerer de poster fra tabellen, som opfylder den betingelse, der er angivet med den.
- Denne klausul bruges ikke kun med SELECT Query, men kan også bruges med UPDATE og DELETE Queries.
- Brug af where-sætning med SELECT-forespørgsel
- Where-sætning med SELECT-forespørgsel for at hente alle kolonnerne fra en tabel.
- For at hente alle poster fra en tabel, stjerne (*) symbol bruges.
Syntaks:
SELECT *FROM TABLE_NAME WHERE condition;
Eksempel:
Først vil vi oprette en database med navnet "bookdb". Så i den database vil vi oprette en tabel "bog" og indsætte poster i tabellen. Vi vil overveje den samme database og også den samme tabel for efterfølgende eksempler.
Nu vil vi anvende where-sætning med SELECT-forespørgsel for at hente alle kolonnerne fra tabellen, hvor prisen på bogen er lig 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)
Der er kun én post med Book_ID =4, hvis pris er lig med 200. Derfor vises alle kolonnerne i den pågældende post.
- Where-sætning med SELECT-forespørgsel for at hente en eller mere end én specifik kolonne fra en tabel.
- For at hente specifikke kolonner fra en tabel skal navnene på alle de kolonner, der skal hentes, angives i selve forespørgslen.
- De specifikke kolonnenavne, som skal hentes, vil blive adskilt med komma.
Syntaks:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Eksempel:
Vi anvender where-klausul med SELECT-forespørgsel for at hente specifikke kolonner (Book_ID, Book_Price) fra bogen tabel, hvor prisen på bogen er lig 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)
Der er kun én post med Book_ID =4, hvis pris er lig med 200. Derfor vises Book_ID og Book_Price for den pågældende post.
- Brug af where-sætning med UPDATE-forespørgsel
Syntaks:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Eksempel:
Vi vil anvende where-klausul med UPDATE-forespørgsel på bogtabellen for at opdatere Book_Name og Book_Author for en bestemt post ved at angive Book_ID som en betingelse i where-klausulen.
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)
Der er kun én post med Book_ID =3, vi har ændret bognavnet og bogforfatteren for denne post. Derfor vises en opdateret tabel.
- Brug af where-sætning med DELETE-forespørgsel
Syntaks:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Eksempel:
Vi vil anvende where-klausulen med DELETE-forespørgsel på bogtabellen til
slet en bog med et bestemt Book_ID ved at angive Book_ID som en betingelse i where-klausulen.
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)
Der er kun én post med Book_ID =5, vi har slettet hele den post fra bogtabellen. Derfor vises en opdateret tabel.
Operatører med WHERE-erklæring
Du kan bruge operatorer med where-sætningen. Disse operatorer kan bruges sammen med where-klausulen i SELECT-, UPDATE- og DELETE-forespørgsler.
- Lige(=)
Når operatoren lig med (=) bruges med where-klausulen, vil den hente disse poster fra tabellen, hvor værdien af kolonnenavnet i en tabel er lig med værdien af kolonnenavnet angivet i forespørgslen.
Eksempel:
Vi anvender where-klausulen med SELECT-forespørgsel for at hente disse poster fra tabellen, hvor prisen på bogen er lig 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)
Der er kun én post med Book_ID =4, hvis pris er lig med 200. Derfor vises alle kolonnerne i den pågældende post.
- Større end(>)
Når operatoren større end (>) bruges med Where-klausulen, vil den hente disse poster fra tabellen, hvor værdien af kolonnenavnet i en tabel er større end værdien af kolonnenavnet angivet i forespørgslen.
Eksempel:
Vi anvender where-klausulen med SELECT-forespørgsel for at hente disse poster fra tabellen, hvor prisen på bogen er større end 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)
Der er tre poster med Book_ID =1, 3 og 4, hvis priser er større end 150. Derfor vises alle kolonnerne i disse poster.
- Mindre end (<)
Når mindre end(<)-operatoren bruges med where-klausulen, vil den hente disse poster fra tabellen, hvor værdien af kolonnenavnet i en tabel er mindre end værdien af kolonnenavnet angivet i forespørgslen.
Eksempel:
Vi anvender where-klausulen med SELECT-forespørgsel for at hente disse poster fra tabellen, hvor prisen på bogen er mindre end 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)
Der er to poster med Book_ID =1 og 2, hvis priser er mindre end 200. Derfor vises alle kolonnerne i disse poster.
- Større end eller lig med (>=)
Når operatoren larger than eller equal(>=) bruges med where-sætningen, vil den hente disse poster fra tabellen, hvor værdien af kolonnenavnet i en tabel er større end eller lig med værdien af kolonnenavnet angivet i forespørgsel.
Eksempel:
Vi anvender where-klausulen med SELECT-forespørgsel for at hente de poster fra tabellen, hvor prisen på bogen er større end eller lig 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, at der er fire poster med Book_ID =1, 2, 3 og 4, hvis priser er større end eller lig med 150. Derfor vises alle kolonnerne i disse poster.
- Mindre end eller lig med (<=)
Når mindre end eller lig (<=) operator bruges med where-sætning, vil den hente disse poster fra tabellen, hvor værdien af kolonnenavnet i en tabel er mindre end eller lig med værdien af kolonnenavnet angivet i forespørgslen.
Eksempel:
Vi anvender where-klausulen med SELECT-forespørgsel for at hente de poster fra tabellen, hvor prisen på bogen er mindre end eller lig 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)
Der er tre poster med Book_ID =1, 2 og 4, hvis priser er mindre end eller lig med 200. Derfor vises alle kolonnerne i disse poster.
- Ikke ens (<>)
Når ikke equal(<>)-operatoren bruges med where-sætning, vil den hente disse poster fra tabellen, hvor værdien af kolonnenavnet angivet i forespørgslen ikke stemmer overens med værdien af kolonnenavnet, der findes i en tabel.
Eksempel:
Vi vil anvende where-klausulen med SELECT-forespørgsel for at hente de poster fra tabellen, hvor prisen på bogen ikke er lig 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)
Der er tre poster med Book_ID =1, 2 og 4, hvis priser ikke er lig med 250. Derfor vises alle kolonnerne i disse poster.