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

SQLServerの一部のオペレーターの説明

    SQL Serverでは、SOMEを使用できます スカラー値をサブクエリによって返される単一列の値のセットと比較する論理演算子。

    1列の結果セットを持つサブクエリで使用できます。

    SOME 演算子はANYと同等です 論理演算子。

    2つのテーブルがあると想像してください。 Cats およびDogs

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 1       | Meow      |
    | 2       | Fluffy    |
    | 3       | Scratch   |
    +---------+-----------+

    +---------+-----------+
    | DogId   | DogName   |
    |---------+-----------|
    | 1       | Fetch     |
    | 2       | Fluffy    |
    | 3       | Wag       |
    +---------+-----------+

    次に、ANYを使用してサブクエリを実行しましょう オペレーター。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName = SOME (SELECT DogName FROM Dogs);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    SOME vs ANY

    前述のように、SOME ANYと同等です 。

    したがって、ANYを使用するようにクエリを変更できます。 SOMEの代わりに 。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName = ANY (SELECT DogName FROM Dogs);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    SOME vs IN

    INを使用するようにクエリを変更しても、同じ結果が得られます。 SOMEの代わりに演算子 。

    ここではINを使用しています オペレーター。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName IN (SELECT DogName FROM Dogs);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    SOME vs EXISTS

    EXISTSでも同じことができます オペレーター。

    ここでは、EXISTSを使用しています オペレーター。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
    WHERE c.CatName = d.DogName);

    結果:

    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 2       | Fluffy    |
    +---------+-----------+

    エラー116?

    SOMEの使用時にエラー116が発生した場合 、サブクエリで複数の列を選択していることが原因である可能性があります。 SOME 演算子は、結果セットが1列のサブクエリでのみ使用できます。

    このエラーの原因の例を次に示します。

    SELECT 
        CatId,
        CatName
    FROM Cats c 
    WHERE c.CatName = SOME (SELECT * FROM Dogs);

    結果:

    Msg 116, Level 16, State 1, Line 5
    Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

    INでも同じエラーが発生します 。サブクエリで複数の列を返す必要がある場合は、EXISTSを使用してください 。


    1. SQLServerのストアドプロシージャでテキストを検索する

    2. MySQLのJSON_MERGE_PATCH()とJSON_MERGE_PRESERVE():違いは何ですか?

    3. ストアドプロシージャはPostgresのデータベーストランザクションで実行されますか?

    4. 最小値または最大値ではなく、年に従ってシーケンスをリセットします