sql >> データベース >  >> RDS >> Mysql

LIKE演算子がMySQLでどのように機能するか

    MySQLでは、LIKE オペレーターは、SQLパターンを使用してパターンマッチングを実行します。

    文字列が提供されたパターンと一致する場合、結果は1になります。 、それ以外の場合は0

    パターンは必ずしもリテラル文字列である必要はありません。この関数は、文字列式とテーブル列で使用できます。

    構文

    構文は次のようになります:

    expr LIKE pat [ESCAPE 'escape_char']

    expr 入力文字列であり、pat 文字列をテストするパターンです。

    オプションのESCAPE 句を使用すると、エスケープ文字を指定できます。デフォルトのエスケープ文字は\です 、したがって、これを変更する必要がない場合は、この句を省略できます。

    例1-基本的な使用法

    SELECTでこの演算子を使用する方法の例を次に示します。 ステートメント:

    SELECT 'Charlie' LIKE 'Char%';

    結果:

    +------------------------+
    | 'Charlie' LIKE 'Char%' |
    +------------------------+
    |                      1 |
    +------------------------+
    

    この場合、戻り値は1です。 これは、入力文字列がパターンと一致したことを意味します。特に、入力文字列は Charで始まるように指定しました そして何でも終わります。 % 文字は任意の数の文字(ゼロ文字を含む)と一致します。

    %を削除するとどうなりますか :

    SELECT 'Charlie' LIKE 'Char';

    結果:

    +-----------------------+
    | 'Charlie' LIKE 'Char' |
    +-----------------------+
    |                     0 |
    +-----------------------+
    

    返される結果は0です。 これは一致しないことを意味します。これは、ワイルドカード文字を使用して他の文字を指定しなかったためです。

    例2– _ ワイルドカード

    _を使用するオプションもあります ワイルドカード文字を使用して、1文字のみを指定します。次に例を示します:

    SELECT 'Charlie' LIKE 'Ch_rlie';

    結果:

    +--------------------------+
    | 'Charlie' LIKE 'Ch_rlie' |
    +--------------------------+
    |                        1 |
    +--------------------------+
    

    必要に応じて、2つのワイルドカード文字をパターン内で組み合わせることができます。

    SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';

    結果:

    +--------+
    | Result |
    +--------+
    |      1 |
    +--------+
    

    さらにいくつかあります:

    SELECT 
      'Charlie likes donuts' LIKE 'Ch_rlie%donuts' AS 'Result 1',
      'Charlie likes donuts' LIKE 'Ch_rlie%nuts' AS 'Result 2',
      'Charlie likes donuts' LIKE 'Ch%rlie %likes %' AS 'Result 3',
      'Charlie likes donuts' LIKE '% likes %' AS 'Result 4';

    結果:

    +----------+----------+----------+----------+
    | Result 1 | Result 2 | Result 3 | Result 4 |
    +----------+----------+----------+----------+
    |        1 |        1 |        1 |        1 |
    +----------+----------+----------+----------+
    
    >

    その例にいくつかの変更を加えて、一致しない場合の例をいくつか見てみましょう。

    SELECT 
      'Charlie likes donuts' LIKE 'Ch%rlie_donuts' AS 'Result 1',
      'Charlie likes donuts' LIKE 'Charlie_nuts' AS 'Result 2',
      'Charlie likes donuts' LIKE 'Charlie _likes donuts' AS 'Result 3',
      'Charlie likes donuts' LIKE '_ likes _' AS 'Result 4';

    結果:

    +----------+----------+----------+----------+
    | Result 1 | Result 2 | Result 3 | Result 4 |
    +----------+----------+----------+----------+
    |        0 |        0 |        0 |        0 |
    +----------+----------+----------+----------+
    
    >

    例3–データベースの例

    LIKE 演算子は、WHERE内でよく使用されます SELECTの句 データベースを照会するときのステートメント。このように使用すると、一致するレコードのみに結果が絞り込まれますが、実際の結果が表示されます(1だけではありません)。 または0

    データベースクエリ内でこの演算子を使用する方法の例を次に示します。

    SELECT ArtistId, ArtistName
    FROM Artists
    WHERE ArtistName LIKE 'B%';
    

    結果:

    +----------+----------------+
    | ArtistId | ArtistName     |
    +----------+----------------+
    |        4 | Buddy Rich     |
    |       11 | Black Sabbath  |
    |       15 | Birds of Tokyo |
    |       16 | Bodyjar        |
    +----------+----------------+
    

    この場合、名前が文字 Bで始まるすべてのアーティストを返す単純なクエリでした。 。

    その表にあるアーティストの完全なリストは次のとおりです。

    SELECT ArtistId, ArtistName
    FROM Artists;
    

    結果:

    +----------+------------------------+
    | ArtistId | ArtistName             |
    +----------+------------------------+
    |        1 | Iron Maiden            |
    |        2 | AC/DC                  |
    |        3 | Allan Holdsworth       |
    |        4 | Buddy Rich             |
    |        5 | Devin Townsend         |
    |        6 | Jim Reeves             |
    |        7 | Tom Jones              |
    |        8 | Maroon 5               |
    |        9 | The Script             |
    |       10 | Lit                    |
    |       11 | Black Sabbath          |
    |       12 | Michael Learns to Rock |
    |       13 | Carabao                |
    |       14 | Karnivool              |
    |       15 | Birds of Tokyo         |
    |       16 | Bodyjar                |
    +----------+------------------------+
    

    例4–バックスラッシュ文字を使用したエスケープ

    ワイルドカード文字の1つが入力文字列に含まれていて、それに対して照合を実行する必要がある場合はどうなりますか?バックスラッシュ文字(\)でエスケープできます )。エスケープ文字を使用した場合と使用しない場合のこのような検索の例を次に示します。

    SELECT 
      'usr_123' LIKE 'usr_123' AS 'Without escape',
      'usr_123' LIKE 'usr\_123' AS 'With escape';

    結果:

    +----------------+-------------+
    | Without escape | With escape |
    +----------------+-------------+
    |              1 |           1 |
    +----------------+-------------+
    

    この場合、両方とも一致しましたが、理由は異なります。ワイルドカードが任意の文字が一致することを指定したため、最初の行が一致しました。 2行目も一致しましたが、これは入力文字列の正しい場所にアンダースコアが含まれているためです。

    別の結果が得られるように、入力文字列を少し変更してみましょう。

    SELECT 
      'usr+123' LIKE 'usr_123' AS 'Without escape',
      'usr+123' LIKE 'usr\_123' AS 'With escape';

    結果:

    +----------------+-------------+
    | Without escape | With escape |
    +----------------+-------------+
    |              1 |           0 |
    +----------------+-------------+
    

    ワイルドカードは、その場所に任意の文字を含めることができることを意味するため、エスケープされていないバージョンはポジティブを返しました。エスケープされたバージョンは、アンダースコア文字(_)のみを明示的に示しています )が一致します。入力文字列にはその場所にアンダースコア文字が含まれていなかったため、結果は否定的でした。

    例5– ESCAPE 条項

    ESCAPEを使用することもできます 独自のカスタムエスケープ文字を指定する句。次に例を示します:

    SELECT 
      'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1',
      'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';

    結果:

    +----------+----------+
    | String 1 | String 2 |
    +----------+----------+
    |        1 |        0 |
    +----------+----------+
    

    例6–数式

    LIKEのMySQL実装 演算子を使用すると、数式を使用できます。次に例を示します:

    SELECT 
      1234 LIKE '12%',
      1234 LIKE '12_';
    

    結果:

    +-----------------+-----------------+
    | 1234 LIKE '12%' | 1234 LIKE '12_' |
    +-----------------+-----------------+
    |               1 |               0 |
    +-----------------+-----------------+
    

    1. からOracle11データベースに接続する方法。ネット

    2. 条件付き注文

    3. OracleのSQLServerAPPLYに相当するものは何ですか?

    4. MariaDBコネクタ/Pythonベータ版が利用可能になりました