【SQL Server】論理演算子 EXISTS の使い方

SQL Server
この記事は約3分で読めます。

【SQL Server】論理演算子 EXISTS の使い方

「EXISTS」は英語で『存在する』という意味です。クエリで使う場合は、WHERE句の中で使用し、以下条件が存在するならば=TRUEになるならばっという意味です。

基本形
SELECT [表示要素名] FROM [テーブル名]
WHERE EXISTS (サブクエリ)
SELECT [表示要素名] FROM [テーブル名]
WHERE NOT EXISTS (サブクエリ)

事前準備

--テーブル1作成
CREATE TABLE [dbo].[T1](
[Id] INT ,
[Name] NVARCHAR(20) ,
)

-- テーブル1データ登録
INSERT INTO T1 SELECT 1,N'荒川太郎';
INSERT INTO T1 SELECT 2,N'荒川次郎';
INSERT INTO T1 SELECT 3,N'佐藤花子';

--テーブル2作成
CREATE TABLE [dbo].[T2](
[Id] INT,
[Age] INT,
)

-- テーブル2登録
INSERT INTO T2 SELECT 1,18;
INSERT INTO T2 SELECT 3,17;

テーブルを2個用意します。

EXISTSクエリ

SELECT * FROM T1
WHERE EXISTS (
       SELECT 1 FROM T2 WHERE T1.Id= T2.Id
)

意味は、『T1とT2の同じIdを持つT1のデータを取得せよ』です。

サブクエリの結果取得を「1」にしているのは、サブクエリの取得データを使用しないためです。サブクエリの結果が『TRUE』なのか『FALSE』なのかが重要です。別に「*」でもかまいません。

NOT EXISTSクエリ

SELECT * FROM T1
WHERE NOT EXISTS (
          SELECT 1 FROM T2 WHERE T1.Id= T2.Id
)

「NOT」なので意味は、『T1とT2の同じIdを持たないT1のデータを取得せよ』です。

SELECT * FROM T1
WHERE EXISTS (
SELECT 1 FROM T2 HAVING T1.Id= MAX(T2.id)
)

SELECT * FROM T1
WHERE NOT EXISTS (
SELECT 1 FROM T2 HAVING T1.Id= MAX(T2.id)
)

サブクエリの中で集計関数とHAVING句を使うこともできます。

テーブル同士の紐づけをしない場合

SELECT * FROM T1
WHERE EXISTS (
      SELECT 1 FROM T2 
)


SELECT * FROM T1
WHERE EXISTS (
      SELECT 1 FROM T2 WHERE 1 = 2
)

あたりまえですが、必ず全レコード「TRUE」または「FALSE」になります。

 

コメント

タイトルとURLをコピーしました