sql >> Databáze >  >> RDS >> Database

SQL LIKE operátor pro začátečníky

V SQL, LIKE operátor umožňuje provádět porovnávání vzorů. Určuje, zda určitý řetězec znaků odpovídá zadanému vzoru.

Vzor může obsahovat běžné znaky a zástupné znaky.

Tabulka zdrojů

Následující tabulka je použita pro příklady na této stránce.

SELECT * FROM Owners;

Výsledek:

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

Příklad

Zde je příklad, který ukazuje, jak LIKE operátor pracuje.

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

Výsledek:

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

V tomto příkladu jsem použil LIKE operátor ve spojení s % zástupný operátor pro návrat vlastníků, jejichž e-mailové adresy končí na .com .

LIKE lze použít i s jinými řetězcovými operátory, jako je _ , [] a [^] .

% Operátor zástupných znaků

% Operátor zástupných znaků odpovídá libovolnému řetězci nula nebo více znaků. Může být použit buď jako předpona, nebo jako přípona a může být také použit uprostřed řetězce.

Obvykle se používá jako přípona a má omezené použití uprostřed vzorů, ačkoli existují některé platné případy použití pro jeho použití uprostřed vzoru, jako například následující:

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

Výsledek:

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

V tomto případě jsme neznali bartovu e-mailovou adresu, ale věděli jsme, že začíná [email protected] a skončil na .com . Proto jsme mohli použít LIKE ve spojení s % zástupný operátor, který doplní zbytek.

Mějte na paměti, že tato technika může vrátit mnoho irelevantních řádků v závislosti na datech a na tom, jak vytvoříte svůj příkaz SQL.

_ Operátor zástupných znaků

Podtržítko (_ ) zástupný operátor odpovídá libovolnému jednotlivému znaku.

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

Výsledek:

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

[] Operátor zástupných znaků

Hranaté závorky ([] ) zástupný operátor odpovídá libovolnému jednotlivému znaku v určeném rozsahu nebo množině, která je uvedena v závorkách.

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

Výsledek:

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

Zde jsem zkombinoval zástupný znak v závorce se znakem procenta, abych vrátil všechny vlastníky, jejichž křestní jméno začíná buď b nebo h .

Všimněte si, že operátor hranatých závorek nemá v DBMS široké přijetí. Je podporován v SQL Server, ale není podporován v MySQL, Oracle, DB2 a SQLite. Zkontrolujte dokumentaci DBMS, abyste zjistili, zda podporuje tento operátor.

[^] Operátor zástupných znaků

Znak stříšky (^ ) lze použít k negaci výsledků při použití operátoru hranatých závorek.

Změníme tedy předchozí příklad tak, aby se vrátili pouze ti vlastníci, jejichž křestní jméno ne začněte b nebo h .

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

Výsledek:

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

Hodnoty NULL

Procento (% ) zástupný znak odpovídá čemukoli – téměř. Jedna věc, která se neshoduje, je NULL .

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

Výsledek:

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

V naší tabulce jsou dva řádky s NULL v Email sloupec, ale ty zde nejsou vráceny.

Výkon

Dotazy, které obsahují LIKE operátor může běžet mnohem pomaleji než jiné dotazy a pravděpodobně byste se měli vyhnout použití LIKE operátora, pokud jej opravdu nepotřebujete. Pomocí % operátor jako prefix může být obzvláště pomalý.

To neznamená, že byste to neměli používat vůbec. LIKE operátor je nedílnou součástí SQL a setkáte se s mnoha scénáři, kdy to bude jediná možnost (nebo alespoň ta nejlepší).


  1. Převeďte desetinný čas na hodiny a minuty

  2. Extrahujte měsíc z data v PostgreSQL

  3. Jak exportovat výsledky dotazu do souboru .txt při použití SQLcl (Oracle)

  4. SYSDATE() vs NOW() v MySQL:Jaký je rozdíl?