on の使用と mysql をフィルタリングする場所の違いを解析する left(right) join_PHP チュートリアル
mysqlクエリでmysqlのleft(right)joinフィルタ条件を使用してonとwhereの間でクエリされたデータに違いがあるかどうかについての質問があります。
2 つのキーワードを見るだけでは問題が見つからないかもしれません。実際の例を使用して、違いがあるかどうかを確認してみましょう。
たとえば、2つのテーブル構造があります
テーブル構造1
drop table if EXISTS A (
ID int( 1) NOT NULL、
PRIMARY KEY (ID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; テーブル構造 2
CREATE TABLE B (
ID int(1) NOT NULL、
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
テーブル 1 にデータを挿入
A 値に挿入 ( 1 );
A 値に挿入);
A 値に挿入 ( 3 );
A 値に挿入 ( 6 ; ;
)完了後のテーブル A と B のデータは次のようになります:
コードをコピー
コードは次のとおりです:
AからA.IDをAIDとして、B.IDをBIDとして選択します。 A left join B on A.ID = B.ID where B. ID<3
コードは次のとおりです:
上記 2 つのステートメントのクエリ結果は一貫していますか?
とにかく、私はこれら 2 つのクエリの違いに気づきませんでした [これまでにこのような SQL を書いたことはありませんでした]。
実際の結果を見てみましょう
ステートメント 1 のクエリ結果
ステートメント 2 のクエリ結果は次のとおりです:
2 つのクエリの間に違いが見つかりました。
なぜ違いがあるのでしょうか? これは on と where のクエリ順序に関係しています。
標準的なクエリキーワードの実行順序は、from->where->group by->having->order by であることがわかっています[はっきりとは覚えていません]
左結合は from range クラスにあるため、テーブルは最初に on 条件によってフィルターされ、次に 2 つのテーブルに対して左結合が実行されます。
どこで、左側の結合結果が再度フィルタリングされます。
最初のSQLステートメントのクエリプロセスは次のとおりです:
1: 最初の左結合
select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID
クエリ結果は以下の通りです
2: クエリ結果から B.ID または BID
これが上で見た結果です。
2 番目の SQL ステートメントのクエリ プロセスは次と同等です:
1: 最初に on 条件に従ってテーブルをブラッシングすることは、最初に B テーブルをフィルタリングすることと同じです:
2: 前のクエリ結果とテーブル A に対して左結合を実行します。これが、2 番目のクエリの SQL がテーブル A を保持していることがわかる理由です。
ON を使用する場合とその場所に注意してください:
(1): ON の背後にあるフィルター条件は主に関連テーブル用です (ただし、メイン テーブルのブラシ選択条件は適用されません)。
例:
AからA.IDをAIDとして、B.IDをBIDとして選択します。A.ID = B.IDおよびA.ID = 3でBを左結合します
クエリ結果は
です
予想と異なる結果が得られ、AID=3のデータがふるいにかけられたのには驚きました。
しかし、AIDのAID 1と2に対応する値はNULLであり、関連付けられたテーブルはテーブルAのフィルタリング条件を満たす値のみを取ることもわかりました。
つまり、メインテーブルの条件がon以降の場合、アタッチされたテーブルはメインテーブルの選択条件を満たす値のみを取り、メインテーブルは丸められたテーブルのままになります。
(2): メインテーブルのフィルター条件は ON の後ではなく where の後に配置する必要があります
(3): 関連テーブルを別の方法で扱う必要があります。接続する前に条件をクエリする必要がある場合は、クエリ部分を追加する必要があります
後ろに置きます。接続完了後にフィルタリングしたい場合は、whereの後に条件を置く必要があります
(4):
関連テーブルの場合、実際には最初にサブクエリを実行してから結合することができますしたがって、2番目のSQLは以下と同等です
コードをコピーします
上記はすべて完了していますmysql5.1 でテスト済み
http://www.bkjia.com/PHPjc/327641.html
www.bkjia.com

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

MySQLをエレガントにインストールするための鍵は、公式のMySQLリポジトリを追加することです。特定の手順は次のとおりです。MYSQLの公式GPGキーをダウンロードして、フィッシング攻撃を防ぎます。 mysqlリポジトリファイルを追加:rpm -uvh https://dev.mysql.com/get/mysql80-community-rease-el7-3.noarch.rpm update yumリポジトリキャッシュ:yumアップデートインストールmysql:yumインストールmysql-server startup mysql sportin
