sql >> Database >  >> RDS >> Database

SQL LIKE-operator voor beginners

In SQL is de LIKE operator stelt u in staat om patroonafstemming uit te voeren. Het bepaalt of een specifieke tekenreeks overeenkomt met een bepaald patroon.

Een patroon kan gewone tekens en jokertekens bevatten.

Brontabel

De volgende tabel wordt gebruikt voor de voorbeelden op deze pagina.

SELECT * FROM Owners;

Resultaat:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Voorbeeld

Hier is een voorbeeld om te demonstreren hoe de LIKE exploitant werkt.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%.com';

Resultaat:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
| Woody       | Eastwood   | [email protected] |
+-------------+------------+-------------------+

In dit voorbeeld heb ik de LIKE . gebruikt operator in combinatie met de % wildcard-operator om eigenaren te retourneren wiens e-mailadres eindigt op .com .

LIKE kan ook worden gebruikt met andere tekenreeksoperators, zoals _ , [] , en [^] .

De % Wildcard-operator

De % jokertekenoperator komt overeen met elke tekenreeks van nul of meer tekens. Het kan worden gebruikt als voorvoegsel of achtervoegsel, en het kan ook in het midden van een tekenreeks worden gebruikt.

Het wordt meestal als achtervoegsel gebruikt en wordt in beperkte mate gebruikt in het midden van patronen, hoewel er enkele geldige gebruiksscenario's zijn om het in het midden van een patroon te gebruiken, zoals de volgende:

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';

Resultaat:

+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
+-------------+------------+------------------+

In dit geval wisten we het e-mailadres van Bart niet, maar we wisten dat het begon met [email protected] en eindigde op .com . Daarom konden we LIKE . gebruiken in combinatie met de % jokertekenoperator om de rest in te vullen.

Houd er rekening mee dat deze techniek veel irrelevante rijen kan retourneren, afhankelijk van de gegevens en hoe u uw SQL-instructie opstelt.

De _ Wildcard-operator

Het onderstrepingsteken (_ ) jokertekenoperator komt overeen met elk afzonderlijk teken.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE FirstName LIKE 'b_rt';

Resultaat:

+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
| Burt        | Tyson      | [email protected] |
+-------------+------------+------------------+

De [] Wildcard-operator

De haakjes ([] ) jokertekenoperator komt overeen met elk afzonderlijk teken binnen het opgegeven bereik of de set die is opgegeven tussen de haakjes.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE FirstName LIKE '[bh]%';

Resultaat:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
| Boris       | Trump      | NULL              |
| Burt        | Tyson      | [email protected]  |
+-------------+------------+-------------------+

Hier heb ik de jokertekens tussen haakjes gecombineerd met het percentageteken om alle eigenaren terug te geven wiens voornaam begint met b of h .

Merk op dat de operator voor haakjes niet wijdverbreid wordt gebruikt in DBMS'en. Het wordt ondersteund in SQL Server, maar niet in MySQL, Oracle, DB2 en SQLite. Controleer uw DBMS-documentatie om te zien of deze deze operator ondersteunt.

De [^] Wildcard-operator

Het caret-teken (^ ) kan worden gebruikt om de resultaten te negeren bij gebruik van de haakjes-operator.

Dus, we veranderen het vorige voorbeeld om alleen die eigenaren terug te geven wiens voornaam niet . is begin met b of h .

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';

Resultaat:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Nancy       | Simpson    | NULL              |
| Woody       | Eastwood   | [email protected] |
+-------------+------------+-------------------+

NULL-waarden

Het percentage (% ) wildcard komt overeen met alles - bijna. Een ding dat niet overeenkomt is NULL .

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%';

Resultaat:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
| Woody       | Eastwood   | [email protected] |
| Burt        | Tyson      | [email protected]  |
+-------------+------------+-------------------+

In onze tabel zijn er twee rijen met NULL in de Email kolom, maar die worden hier niet geretourneerd.

Prestaties

Zoekopdrachten die de LIKE . bevatten operator kan veel langzamer lopen dan andere zoekopdrachten, en u moet waarschijnlijk het gebruik van de LIKE . vermijden operator, tenzij u het echt nodig hebt. De % . gebruiken operator als voorvoegsel kan bijzonder traag zijn.

Dat wil niet zeggen dat je het helemaal niet moet gebruiken. De LIKE operator is een integraal onderdeel van SQL en u zult veel scenario's tegenkomen waarin dit de enige optie is (of op zijn minst de beste optie).


  1. ExecuteNonQuery retourneert -1 bij gebruik van sql COUNT ondanks de querystring

  2. Hoe MySQL/MariaDB-servers te beveiligen

  3. Hoe MapReduce werkt in Hadoop

  4. Verklaringen voorbereiden en parameters binden in Postgresql voor C++