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ší).