違いは、MySQLに存在し、元のリンクを再現します。https://blog.csdn.net/zhenwei1994/article/details/82145711

 

1、使用:

(1)使用をEXISTS

(ucsc_project B a.projectId = b.idからB.ID選択)EXISTS ucsc_project_batch Aからa.batchName、a.projectIdを選択

 

この手段上のSQL:PROJECTIDフィールドはucsc_projectテーブルに存在するメインテーブルクエリbatchNameとPROJECTIDフィールドを、ucsc_project_batchします。

クエリ結果を追加し、試合のクエリを、それが唯一の戻り値を気が存在している、戻り値があるどのような値クエリのリターンの後ろに子テーブルには問題ではない、そして条件は、記事データのマッチングの成功真実であることをucsc_project_batch循環になりますEXISTS集中し、条件が偽の戻り値のない場合、データは記事を破棄されます。

すべてを変えるなど、突然我々は、クエリの外クエリの結果には影響しません、クエリが返すフィールドのためにここにいます:

(b.companyId、ucsc_project B a.projectId = b.idからb.nameを選択)が存在ucsc_project_batch Aからa.batchName、a.projectIdを選択

 

(2)での使用

ucsc_project_batch A a.projectIdにおける(ucsc_project Bから選択b.id)からa.batchName、a.projectIdを選択

 

EXISTSの結果と、このSQLクエリの結果上記の意味は同じクエリで、ちょうど同じです。

2、注意点:

、一般的にシートに関連するクエリ・バランスオフもたらすために行う必要があり、(1)は条件文のサブクエリ書かれたノートをEXISTS、サブクエリの条件は、そうでない場合は真、偽だったかもしれない、またはシートが一致するサイクルを照会するとき、行われてきましたすべてのチェックアウト、または全くのいずれか。

(ucsc_project Bから選択b.id)をEXISTS ucsc_project_batch Aからa.batchName、a.projectIdを選択

上記の例の表現は、値ucsc_projectテーブルが存在するため、サブクエリの条件が真であった、ucsc_project_batch各データサイクルタイムに一致する、成功を一致させることができ、結果をチェックアウトucsc_project_batchテーブル全体のデータとなりました。

 

(b.idがnull ucsc_project BからB.ID選択)EXISTS ucsc_project_batch Aからa.batchName、a.projectIdを選択

サブクエリの文言は、結果を見つけるしていないので、サブクエリの条件が偽で、クエリが失敗した外データの各部分をマッチング、全体クエリ結果は空です

 

(2)内のステートメントは、4Mの全体をMySQLでのパラメータの数を制限しますが、MySQLのSQL文の長さのサイズの制限を持っていません

何(3)は、サブクエリEXISTSするクエリは気にしないで、唯一気に結果セットが存在しない存在、条件文が真である、または虚偽の陳述のための条件であるとして全体のサブクエリを見ることができますがあり

(4)内のステートメントは、サブクエリでフィールドに戻り、またはエラーになります。

ucsc_project_batch Aからa.batchName、a.projectIdを選択する場合にa.projectId(セレクトb.id、ucsc_project Bからb.companyId)

【のErr] 1241 - オペランドは1列(複数可)を含むべきです

3、シーンセレクション

大きな外ルックアップテーブル、小さなサブルックアップテーブルは、Inを選択し、小さなルックアップテーブルの外側、大部分のルックアップテーブル、EXISTS選択します。もし、同じサイズの2つのテーブルに同じ。

一度のみSQLクエリのクエリIN(1)、および一時ファイルは、結果セット内に存在し、その後、インデックスの外クエリはサブクエリ使用することができ、前記アウタークエリ照合SQL、

ucsc_project_batch A a.projectIdにおける(ucsc_project Bから選択b.id)からa.batchName、a.projectIdを選択

 

それはと同等です。

; = $ []結果
$ ucsc_project_batch = "SELECT a.batchName、ucsc_project_batch Aからa.projectId";
$ ucsc_project = "SELECTはucsc_project BからB.ID";
のために($ I = 0; $ I <$ ucsc_project_batch .LENGTHを; $ I ++){
$ J <$ ucsc_project .LENGTH;($ J = 0 $ J ++){
IF($ ucsc_project_batch [$ I] == $ .projectId ucsc_project [$ J] .ID){
$結果[] ; [$ I] ucsc_project_batch $ =
BREAK;
}

外国照会テーブルはucsc_project_batchマッチングを循環するEXISTSをucsc_project_batch.lengthビューを行う(2)、サブクエリは、前記インデックス、外側のクエリフルテーブルスキャンを使用することができます

(ucsc_project B a.projectId = b.idからB.ID選択)EXISTS ucsc_project_batch Aからa.batchName、a.projectIdを選択

 

それはと同等です。

; = $ []結果
"ucsc_project_batch AからSELECT a.batchName、a.projectId" $ ucsc_project_batch =;
($ I = 0; $ I <$ ucsc_project_batch長;. $ I ++)のために{
IFは(($ ucsc_project_batch [$をEXISTS I] PROJECTID)){// = a.projectId b.id SELECT ucsc_project BからB.ID行う。
; $結果[] = $ ucsc_project_batch [$ I]
}
}
見つかった2つの擬似コード分析によって:サブクエリを大きなテーブルは、使用が効果的に速度を増加させるためにサイクルの総数を減らすことができる存在する場合、ときに大きなテーブルときに外側のクエリでは、を使用して効果的に速度を改善するためにルックアップテーブルを介して外部ループを低減することができます。
----------------
免責事項:この記事はCSDNブロガー「懐が19ヶ月オリジナル記事です、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクを添付してくださいそしてこの文。

 

おすすめ

転載: www.cnblogs.com/syj789/p/12517433.html