シーン
実際の作業でjoin
はよく使われます。それらの中で、on
そしてwhere
しばしば一緒に使用されます。ただし、用途によってjoin
結果は異なります。このブログは主に違いについてです。
周囲
ソフトウェア | バージョン |
---|---|
mysql | 5.7.27 |
テキスト
1.データの準備
1.テーブルステートメントを作成します
CREATE TABLE userone (
username varchar(255) NULL,
sex smallint(255) COMMENT '1.男;2.女' NULL,
score int(255) NULL
);
CREATE TABLE usertwo (
username varchar(255) NULL,
sex smallint(255) COMMENT '1.男;2.女' NULL,
score int(255) NULL
);
2.データの挿入
INSERT INTO userone(username, sex, score)
VALUES('name0', 1, 123);
INSERT INTO userone(username, sex, score)
VALUES('name1', 2, 12);
INSERT INTO userone(username, sex, score)
VALUES('name2', 1, 2);
INSERT INTO userone(username, sex, score)
VALUES('name3', 2, 3);
INSERT INTO userone(username, sex, score)
VALUES('name0', 2, 333);
INSERT INTO usertwo(username, sex, score)
VALUES('name0', 1, 31);
INSERT INTO usertwo(username, sex, score)
VALUES('name1', 2,22);
INSERT INTO usertwo(username, sex, score)
VALUES('name4', 1, 42);
INSERT INTO usertwo(username, sex, score)
VALUES('name5', 2, 53);
二、テスト
ここでは、ケースを使用して分析します。
-
私たちは、テーブル内のデータを取得したい場合
userone
にusertwo
同じ名前として性別男性である、テーブル、どのようにSQL
我々はそれを書くことができますか???SELECT a.username,a.sex,a.score,b.username,b.sex,b.score FROM userone a join usertwo b on a.username=b.username where a.sex=1 SELECT a.username,a.sex,a.score,b.username,b.sex,b.score FROM userone a join usertwo b on a.username=b.username and a.sex=1
結果に関しては
SQL
、上記の2行の結果は一貫しています。結果は次のとおりです。
-
テーブル
userone
データを取得し、テーブルusertwo
と同じ名前のデータを強調表示したいが、性別が男性である場合、どのようSQL
に記述できますか???誰かが次のようSQL
に書くかもしれません-- SQL1 SELECT a.username,a.sex,a.score,case when b.username is not null then '存在' else '不存在' end as '标记' FROM userone a left join usertwo b on a.username=b.username and a.sex=1 -- SQL2 SELECT a.username,a.sex,a.score,case when b.username is not null then '存在' else '不存在' end as '标记' FROM userone a left join usertwo b on a.username=b.username where a.sex=1
結果に関する限り、上記の2つの行の結果に
SQL
は一貫性がなく、SQL1
得られた結果は次のとおりです。
SQL2
得られた結果は次のとおり
です。指定されたタイトルについて、必要な結果は、SQL1
すべてのデータを取得するためであり、usertwo
テーブルと同じ名前でデータを示す必要がありますが、性別は男性です。これは違いに反映さjoin
れon
ていwhere
ます。読者がもっと注意を払うと、後者の2つSQL
は左結合を使用していることがわかりますleft join
。左側の接続は、左側のテーブルをベンチマークとして使用することを意味し、条件が満たされていない場合でも、それを関連付けとして結果セットに入れる必要があります。on
条件が満たされていない場合でも、左右の接続の要件に応じて、メインテーブルで条件を満たしていないデータがメインテーブルに置かなければならないので、後者の条件は、メインテーブルには有効ではありません。where
キーワードは、フィルタリングされた結果セットをフィルタリングし、全体のために有効です。だから、SQL1
およびSQL2
視点の違いが、結果は非常に異なっています。
総括する
join
これon
は、2つのテーブルのフィルタリングのデカルト積でwhere
あり、フィルターからのデータの最終結果に関連付けられています。左右の接続の場合on
、内部の条件はメインテーブルの満たされていないデータを無視し、フィルタリングしません。代わりに、where
左右の関連付けを考慮せずに、関連付けられた結果セットをフィルタリングします。
賞賛を求める
私の記事がすべての人に役立つ場合は、記事の下部にある[いいね]または[お気に入り]をクリックできます。
良いディスカッションがある場合はメッセージを残すことができます。
今後の記事を引き続き表示する場合は、[フォロー
する]をクリックしてください。次のQRコードをスキャンして、私の公開アカウントをフォローできます:Fengye Zhixuege、私の最新の共有をチェックしてください!