MySQL データベースの第 10 回のレッスン ------ 結合接続の継続 ------ 強力なチェーン

著者の序文

 私の gtiee Qin Boss (qin-laoda) から学びに来てくれる小さなかわいい子たちを歓迎します- Gitee.com

______________________________________________________________________

目次

結合接続

  •  内部結合

  • 左結合

  • 右結合

  • 外部結合

  • その他の接続

____________________________________________________________

著者のビネット

        最近は学校の講座が多くて更新が間に合わないので、可愛いものをたくさん載せていただければ幸いです 3つのリンクが私の励みです。

隙間ナレッジ

1. 結合するときに、一部のテーブルのフィールド数が足りない場合は、null を使用してそれを補います。

  •  内部結合

select  
*
from 
(select * from new_employees limit 10)as ne
join 
(select * from employees limit 10)as em
on ne.emp_no=em.emp_no;

  • 左結合

select  
*
from 
(select * from new_employees limit 20)as ne
left join 
(select * from employees limit 10)as em
on ne.emp_no=em.emp_no;

  • 右結合

select  
*
from 
(select * from new_employees limit 10)as ne
right join 
(select * from employees limit 20)as em
on ne.emp_no=em.emp_no;
  • 外部結合

select  
*
from 
(select * from new_employees limit 20)as ne
left join 
(select * from employees limit 10)as em
on ne.emp_no=em.emp_no
union 
select  
*
from 
(select * from new_employees limit 10)as ne
right join 
(select * from employees limit 20)as em
on ne.emp_no=em.emp_no;

ここではコードを表すために画像は使用しません。jion については前の記事で非常に明確に説明しました。次に、次のことに進みます。

その他の接続

その他の接続 1:

 

 この接続は、左側の接続の一致する null 部分であることがわかります。私たちのアイデアは、左側の接続の後にフィルタリングすることです。

select  
ne.emp_no,

ne.`age`,
ne.`gender`,
em.`birth_date`,
em.`first_name`,
em.`last_name`,
em.`gender`,
em.`hire_date`
from 
(select * from new_employees limit 20)as ne
left join 
(select * from employees limit 10)as em
on ne.emp_no=em.emp_no
where em.`emp_no` is null;

結果:

 同じやり方で

その他の接続 2:

select  
ne.emp_no,
ne.`age`,
ne.`gender`,
em.`birth_date`,
em.`first_name`,
em.`last_name`,
em.`gender`,
em.`hire_date`
from 
(select * from new_employees limit 10)as ne
right join 
(select * from employees limit 20)as em
on ne.emp_no=em.emp_no
where ne.`emp_no` is null;

 その他の接続 3:

 考え方としては、外部結合は null を含む部分を取得し、最初にテーブルの左側を結合し、次に null 部分をフィルターで除外し、次に右に接続し、null 部分をフィルターで除去し、次に Union Distinct を使用してテーブルを結合するというものです。

select  
*
from 
(select * from new_employees limit 20)as ne
left join 
(select * from employees limit 10)as em
on ne.emp_no=em.emp_no
where em.emp_no is null
union 
select  
*
from 
(select * from new_employees limit 10)as ne
right join 
(select * from employees limit 20)as em
on ne.emp_no=em.emp_no
where ne.emp_no is null;

左結合と右結合の両方を条件付きでフィルタリングする必要があることに注意してください

自己結合

垂直から水平に変換する

簡単に言えば、自分と自分を結びつける

この表の内容

このテーブルは自己結合です

select * from 
city as a
join
city  as b
on a.`id` = b. pid;

サブクエリ

selectステートメント には、以前に書いたときに使用した別のselectステートメント が埋め込まれています。
select 
*
from
(select * from city limit 10) as a;

-- 标量子查询
-- 查询大于等于公司平均年龄的员工
select * from table
where age >= (select avg(age) from table);
-- 列级子查询
select * from table1
where id in (select id from table2);
-- 行级子查询
select * from table
where (height,age) = (select max(height),max(age) from table);

上記の書き方でも問題ありませんが、このように書くのはあまり良くありません。


 select 
 *
 from new_employees as b
join 
 (
    select avg(age) as av from new_employees 
 )as a 
 on b.age>= a.av
 limit 10;

要約:

実行順序は次のとおりです。
テーブル名から
加入
どこ
グループ化
個別の * を選択
持っている
までに注文する
リミットスタート、カウント

 join on の on は、メインテーブルとアタッチされたテーブルをフィルタリングし、メモリの特定のスペースを開き、それをメモリに保存します。join on の後にデータをフィルタリングします。

グループ化とグループ化をフィルタリングした後、フィールドは基本的に完成したと言えます。

上記の 3 つのサブクエリは、最初の選択によって 2 番目の選択のデータ ストレージ内に空けられたスペースを圧迫し、データの混乱を引き起こす可能性があります。

最初に範囲を丸めてからデータを計算すると理解できます

要約:

参加接続はここで終了です。かわい子ちゃんのことがわからない場合は、私とプライベートにチャットしてください。

おすすめ

転載: blog.csdn.net/m0_69984273/article/details/131821767