sql >> Database teknologi >  >> RDS >> Database

SQL LIKE Operator for begyndere

I SQL er LIKE operatør giver dig mulighed for at lave mønstertilpasning. Det bestemmer, om en specifik tegnstreng matcher et specificeret mønster.

Et mønster kan indeholde almindelige tegn og jokertegn.

Kildetabel

Følgende tabel bruges til eksemplerne på denne side.

SELECT * FROM Owners;

Resultat:

+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Eksempel

Her er et eksempel for at demonstrere, hvordan LIKE operatør arbejder.

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

Resultat:

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

I dette eksempel brugte jeg LIKE operator sammen med % wildcard-operatør for at returnere ejere, hvis e-mailadresser ender på .com .

LIKE kan også bruges med andre strengoperatorer, såsom _ , [] og [^] .

% Wildcard-operatør

% wildcard-operator matcher enhver streng med nul eller flere tegn. Det kan bruges som enten et præfiks eller et suffiks, og det kan også bruges i midten af ​​en streng.

Det plejer at være mere almindeligt brugt som et suffiks, og det har begrænset brug i midten af ​​mønstre, selvom der er nogle gyldige use-cases for at bruge det i midten af ​​et mønster, såsom følgende:

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

Resultat:

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

I dette tilfælde kendte vi ikke barts e-mailadresse, men vi vidste, at det startede med [email protected] og endte med .com . Derfor var vi i stand til at bruge LIKE i forbindelse med % wildcard-operatør for at udfylde resten.

Husk på, at denne teknik kan returnere en masse irrelevante rækker, afhængigt af dataene, og hvordan du konstruerer din SQL-sætning.

__ Wildcard-operatør

Understregningen (__ ) wildcard-operator matcher ethvert enkelt tegn.

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

Resultat:

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

[] Wildcard-operatør

Klammerne ([] ) jokertegnsoperator matcher ethvert enkelt tegn inden for det angivne interval eller sæt, der er angivet mellem parenteserne.

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

Resultat:

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

Her kombinerede jeg jokertegnet med parenteser med procenttegnet for at returnere alle ejere, hvis fornavn starter med enten b eller h .

Bemærk, at operatøren af ​​parenteser ikke har udbredt anvendelse i DBMS'er. Det understøttes i SQL Server, men det understøttes ikke i MySQL, Oracle, DB2 og SQLite. Tjek din DBMS-dokumentation for at se, om den understøtter denne operatør.

[^] Wildcard-operatør

Caret-tegnet (^ ) kan bruges til at negere resultaterne, når du bruger parentes-operatoren.

Så vi ændrer det forrige eksempel til kun at returnere de ejere, hvis fornavn ikke gør start med b eller h .

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

Resultat:

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

NULL-værdier

Procentdelen (% ) jokertegn matcher alt – næsten. En ting, den ikke matcher, er NULL .

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

Resultat:

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

I vores tabel er der to rækker med NULL i E-mail kolonne, men de returneres ikke her.

Ydeevne

Forespørgsler, der indeholder LIKE operatør kan køre meget langsommere end andre forespørgsler, og du bør nok undgå at bruge LIKE operatør, medmindre du virkelig har brug for det. Brug af % operator som præfiks kan være særlig langsom.

Dermed ikke sagt, at du slet ikke skal bruge det. LIKE operator er en integreret del af SQL, og du vil støde på mange scenarier, hvor det vil være den eneste mulighed (eller i det mindste den bedste mulighed).


  1. Indlejret PostgreSQL til Java JUnit-tests

  2. Færdiggørelse af SQL. Historier om succes og fiasko

  3. Databasevalg til oprettelse af to forbundne tabeller?

  4. Er det vigtigt at lukke mysql-forbindelsen?