SQL Server での exists と except の使用法の概要

SQL Server での exists と except の使用法の概要

1. 存在する

1.1 説明

EXISTS (NOT EXISTS を含む) 句の戻り値は BOOL 値です。 EXISTS (SELECT ... FROM ...) 内にはサブクエリ ステートメントがあり、これを EXIST の内部クエリ ステートメントと呼びます。クエリ ステートメントは結果セットを返します。

EXISTS 句は、クエリ ステートメントの結果セットが空かどうかに応じてブール値を返します。

exists: は、何が返されるかではなく、結果セットが返されるかどうかを強調します。たとえば、 select name from student where sex = 'm' and mark exists(select 1 from grade where ...) 。exists によって導入された句が結果セットを返す限り、exists 条件は満たされます。返されるフィールドは常に 1 であることに注意してくださいselect 2 from grade where ...変更すると、返されるフィールドは 2 になります。この数字は無意味です。したがって、exists 句では何が返されるかは考慮されませんが、結果セットが返されるかどうかは考慮されます。 EXISTS = IN、意味は同じですが、構文が少し異なります。IN を使用すると、インデックスが実行されないため、効率が悪くなるようです。

内部結合と比較すると、exists の方がパフォーマンスが優れています。条件を満たす最初のレコードが見つかると、すぐに検索を停止し、TRUE を返します。

1.2 例

--存在する
--SQL:
family_memberから名前を選択
ここで、group_level > 0
かつ存在する(family_gradeから1を選択、family_member.name = family_grade.name)
グレード90以上)

 - 結果:
名前
チェリー

--存在しない
--SQL:
family_memberから名前を選択
ここで、group_level > 0
存在しない(family_grade から 1 を選択、family_member.name = family_grade.name)
グレード90以上)

 - 結果:
名前
迷路
うさぎ

1.3 交差/2017-07-21

intersect は exists と同様に機能します。

--交差する
--SQL:
グループレベル > 0 の family_member から名前を選択
交差する
グレードが 90 より大きい family_grade から名前を選択

 - 結果:
名前
チェリー

2. 除く

2.1 説明

クエリ結果では、EXCEPT = NOT EXISTS、INTERSECT = EXISTS ですが、EXCEPT/INTERSECT の「クエリ オーバーヘッド」は NOT EXISTS/EXISTS よりもはるかに大きくなります。

Except は重複を自動的に削除しますが、not in/not exists は削除しません。

2.2 例

 - を除外する
--SQL:
family_memberから名前を選択
ここで、group_level > 0
except(family_gradeから名前を選択)

 - 結果:
名前
うさぎ

--存在しない
--SQL:
family_memberから名前を選択
ここで、group_level > 0
存在しません(family_grade から名前を選択します。family_member.name = family_grade.name)

 - 結果:
名前
うさぎ
うさぎ

3. テストデータ

重複排除機能以外を検証すると、family_memberにrabbitが追加されます。

-- ----------------------------
-- family_grade のテーブル構造
-- ----------------------------
テーブル[mazeytop].[family_grade]を削除します
行く
テーブル[mazeytop].[family_grade]を作成します(
[id] int NOT NULL ,
[名前] varchar(20) NULL ,
[グレード] int NULL 
)


行く

-- ----------------------------
-- family_gradeの記録
-- ----------------------------
[mazeytop].[family_grade] ([id], [name], [grade]) に挿入します。VALUES (N'1', N'mazey', N'70')
行く
行く
[mazeytop].[family_grade] ([id], [name], [grade]) に挿入します。値 (N'2', N'cherrie', N'93')
行く
行く

-- ----------------------------
-- family_member のテーブル構造
-- ----------------------------
テーブル[mazeytop].[family_member]を削除します
行く
テーブル[mazeytop].[family_member]を作成します(
[id] int NOT NULL ,
[名前] varchar(20) NULL ,
[性別] varchar(20) NULL ,
[年齢] int NULL ,
[グループレベル] int NULL 
)


行く

-- ----------------------------
-- family_memberの記録
-- ----------------------------
[mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) に INSERT INTO VALUES (N'1', N'mazey', N'male', N'23', N'1') を挿入します
行く
行く
[mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) に INSERT INTO VALUES (N'2', N'cherrie', N'female', N'22', N'2') を挿入します。
行く
行く
[mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) に INSERT INTO VALUES (N'3', N'rabbit', N'female', N'15', N'3') を挿入します。
行く
行く
[mazeytop].[family_member] ([id], [name], [sex], [age], [group_level]) に INSERT INTO VALUES (N'4', N'rabbit', N'female', N'15', N'3') を挿入します。
行く
行く

-- ----------------------------
-- family_part のテーブル構造
-- ----------------------------
テーブル[mazeytop].[family_part]を削除します
行く
テーブル[mazeytop].[family_part]を作成します(
[id] int NOT NULL ,
[グループ] int NULL ,
[グループ名] varchar(20) NULL 
)


行く

-- ----------------------------
-- family_partの記録
-- ----------------------------
[mazeytop].[family_part] ([id], [group], [group_name]) に INSERT INTO VALUES (N'1', N'1', N'father') を挿入します。
行く
行く
[mazeytop].[family_part] ([id], [group], [group_name]) に INSERT INTO VALUES (N'2', N'2', N'mother')
行く
行く
[mazeytop].[family_part] ([id], [group], [group_name]) に INSERT INTO VALUES (N'3', N'3', N'daughter')
行く
行く

-- ----------------------------
-- テーブル family_grade のインデックス構造
-- ----------------------------

-- ----------------------------
-- テーブル family_grade の主キー構造
-- ----------------------------
ALTER TABLE [mazeytop].[family_grade] 主キーを追加します ([id])
行く

-- ----------------------------
-- テーブル family_member のインデックス構造
-- ----------------------------

-- ----------------------------
--テーブル family_member の主キー構造
-- ----------------------------
ALTER TABLE [mazeytop].[family_member] 主キーを追加します ([id])
行く

-- ----------------------------
-- テーブル family_part のインデックス構造
-- ----------------------------

-- ----------------------------
-- テーブル family_part の主キー構造
-- ----------------------------
ALTER TABLE [mazeytop].[family_part] 主キーを追加します ([id])
行く

SQL Server での exists と except の使用法に関するこの記事はこれで終わりです。SQL Server での exists と except に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • sqlserver の使用法は存在する、存在しない

<<:  Linux でのソース パッケージ インストールのサービス管理

>>:  Vueでブラウザタイトルを動的に設定する方法の詳細な説明

推薦する

psdカット画像をdiv+css形式に変換する

PSD から div css へのウェブページ切り取り例ステップ 1: まず、すべてのタグの内側と外...

MySQLが中国語の文字を挿入する問題を永久に解決するコツを教えます

目次序文最初のステップ:ステップ2: このmy.iniを変更する要約する序文問題の説明:不正な文字列...

FirefoxでCookieとお気に入りをインポートおよびエクスポートする方法

Firefox は、多くの拡張機能とプラグインを備えた、よく使用されるブラウザです。IE に比べて多...

MySQL マルチインスタンス構成のアプリケーションシナリオ

目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

MySQLの水平および垂直テーブルパーティションの説明

前回の記事で、MySQL ステートメントの最適化には限界があると述べました。MySQL ステートメン...

Apache Webサーバーのインストールと設定方法

信頼性が高く、人気があり、簡単に構成できる Web サーバーである Apache で独自の Web ...

初心者向け入門チュートリアル④:サブディレクトリのバインド方法

これが何を意味するのかを理解するには、まずサブディレクトリとは何かを知る必要があります。では、サブデ...

MySQL のデッドロックとデータベースおよびテーブル シャーディングの問題の詳細な説明

MySQL 運用上の問題点を記録します。ビジネスシナリオと問題の説明外部インターフェースをリクエスト...

MySql 8.0.16 バージョンのインストールでは、「UTF8B3」ではなく「UTF8B4」が使用されるように求められます。

MySQL 8.0.16 にインストールする場合、「UTF8B3」ではなく「UTF8B4」が使用さ...

VirtualBox仮想マシンがNATモードで外部ネットワークに接続できない問題の解決策

背景VirtualBox 仮想マシン (Ubuntu 16.04 システムがロードされている) には...

Vue-Element-Adminはログインジャンプを実現するために独自のインターフェースを統合しています

1. まずリクエスト設定ファイルを見て、axios.createメソッドを見てください。baseUR...

JS における ES6 継承と ES5 継承の違い

目次継承ES5 プロトタイプ継承ES6 クラス継承両者の違いES5プロトタイプ継承の内部実装ES6 ...

Vueにログイン認証傍受機能を設置するアイデアを詳しく解説

目次1. 解決策2. サーバーから返されたトークンをブラウザに保存する3. リクエストにアクセス権限...

Vue-cliに基づくコードセットは複数のプロジェクトをサポートします

目次アプリケーションシナリオアイデアプロジェクト構造全体的なプロジェクト構造webpack パッケー...