Denne vejledning er en del af serien Lær grundlæggende SQL-forespørgsler ved hjælp af MySQL. I det forrige selvstudie har vi diskuteret SQL-forespørgslerne til at hente rækkerne eller læse data fra en tabel i MySQL. SELECT-kommandoen returnerer alle rækkerne i en tabel, medmindre vi angiver grænsen som vist i de foregående øvelseseksempler. I flere situationer skal vi filtrere de resulterende rækker for at få de begrænsede rækker til at opfylde visse betingelser. Vi kan filtrere rækkerne ved at bruge WHERE-sætningen ved at angive filterbetingelsen. Vi kan også angive flere betingelser ved hjælp af søgeordene AND, OR.
Hvor-klausul
HVOR klausul kan bruges til at læse filtrerede rækker fra en tabel baseret på de givne betingelser. Hvis du er eksternt logget ind på databasen, skal du også bruge SELECT-privilegiet for tabellen for at læse rækkerne fra en tabel.
# SELECT - Syntax - WHERE
SELECT column_1,column_2,... FROM table_name WHERE <single or multiple conditions>;
Forespørgselsforklaring
MySQL-kommandoen SELECT kan bruges til at læse rækker eller data fra det givne tabelnavn, hvor det valgte udtryk og navnet på tabellen er obligatorisk.
Vi kan filtrere det resulterende forespørgselssæt, der returneres af den valgte forespørgsel, ved hjælp af WHERE-sætningen. Vi kan angive enten enkelte eller flere betingelser for at filtrere resultaterne. Søgeordene OG og ELLER kan bruges til at anvende flere betingelser. Vi kan også bruge søgeordene IN og IKKE I for at begrænse kolonneværdierne til et sæt værdier.
Operatører
Vi kan bruge operatørerne nedenfor til at udføre sammenligninger, mens vi anvender filterbetingelserne. Sammenligningen vil blive udført ved hjælp af den givne værdi og værdierne gemt i tabelkolonnen.
= Den kan bruges til at kontrollere, om værdierne af de to operander er ens eller ej.
!= Den kontrollerer, om værdierne af de to operander ikke er ens.
> Den kontrollerer, om værdien af den venstre operand er større end værdien af den højre operand.
< Den kontrollerer, om værdien af venstre operand er mindre end værdien af højre operand.
>= Den kontrollerer, om værdien af den venstre operand er større end eller lig med værdien af den højre operand.
<= Den kontrollerer, om værdien af den venstre operand er mindre end eller lig med værdien af den højre operand.
Eksempler
Dette afsnit giver eksempler på at læse filtrerede data fra tabellen ved hjælp af SELECT kommandoen med WHERE klausul. Brug nedenstående forespørgsel til at oprette brugertabellen med kolonnerne id, fornavn og efternavn til at gemme brugerdata.
# Create the User Table
CREATE TABLE `user` (
`user_id` bigint(20) NOT NULL,
`first_name` varchar(45),
`last_name` varchar(45)
);
Nedenstående forespørgsel kan bruges til at indsætte data i brugertabellen.
# Insert Rows - All Columns
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`) VALUES
( 1, 'John', 'Smith' ),
( 2, 'Rick', 'Jones' ),
( 3, 'Catherine', 'Ponting' ),
( 4, 'Harsh', 'Upadhyay' ),
( 5, 'Tajwinder', 'Singh' ),
( 6, 'Leo', NULL ),
( 7, 'Leo', 'Murphy' ),
( 8, 'Ram', 'Choudhary' ),
( 9, 'Nicole', NULL ),
( 10, 'Ram', 'Choudhary' );
Ovennævnte forespørgsel vil indsætte 10 rækker i tabellen med id, fornavn og efternavn til at repræsentere 10 forskellige brugere.
Nu vil vi læse de filtrerede data indsat af os i brugertabellen. Det kan gøres ved at bruge SELECT-kommandoen som vist nedenfor.
# Filter - WHERE - Read all rows having first name set to Leo
SELECT * FROM `user` WHERE `first_name` = 'Leo';
# Result
6 Leo
7 Leo Murphy
# Filter - WHERE - AND - Read all rows having first name set to Leo and last name set to Murphy
SELECT * FROM `user` WHERE `first_name` = 'Leo' AND `last_name` = 'Murphy';
# Result
7 Leo Murphy
# Filter - WHERE - IS NOT - Read all rows having last name without NULL values
SELECT * FROM `user` WHERE `last_name` IS NOT NULL;
# Result
1 John Smith
2 Rick Jones
3 Catherine Ponting
4 Harsh Upadhyay
5 Tajwinder Singh
7 Leo Murphy
8 Ram Choudhary
10 Ram Choudhary
# Filter - WHERE - OR, IN - Read all rows having first name is either John or Harsh
SELECT * FROM `user` WHERE `first_name` = 'John' OR `first_name` = 'Harsh';
SELECT * FROM `user` WHERE `first_name` IN ( 'John', 'Harsh' );
# Result
1 John Smith
4 Harsh Upadhyay
Ovennævnte forespørgsler udfører forskellige filteroperationer på string værdier ved brug af enkelte eller flere betingelser. Sørg for at bruge de enkelte anførselstegn, mens du anvender filtrene for kolonner med strengdatatypen.
# Filter - WHERE - Read all rows having id lesser than 5
SELECT * FROM `user` WHERE `user_id` < 5;
# Result
1 John Smith
2 Rick Jones
3 Catherine Ponting
4 Harsh Upadhyay
# Filter - WHERE - LIMIT - Read all rows having id lesser than 5
SELECT * FROM `user` WHERE `user_id` < 5 LIMIT 2;
# Result
1 John Smith
2 Rick Jones
# Filter - WHERE - AND - Read all rows having id greater than 3 and lesser than 6
SELECT * FROM `user` WHERE `user_id` > 3 AND `user_id` < 6;
# Result
4 Harsh Upadhyay
5 Tajwinder Singh
Ovennævnte forespørgsler anvender betingelserne for numeriske datatyper. Vi kan også blande de forskellige typer værdier som vist nedenfor.
# Filter - WHERE - AND - Read all rows having first name set to Harsh, id greater than 2 and lesser than 5
SELECT * FROM `user` WHERE `first_name` = 'Harsh' AND `user_id` > 3 AND `user_id` < 6;
# Result
4 Harsh Upadhyay
Sådan kan vi læse de filtrerede data, der er gemt i MySQL-tabellerne ved hjælp af WHERE-sætningen.