MySQL - クエリとサブクエリの結合

1. 接続クエリ

単一テーブル クエリ: テーブル内のデータのクエリは、単一テーブル クエリと呼ばれます。

結合クエリ、2 つ (複数) のテーブルを結合する、2 つ (複数) のテーブルのデータをクエリする、1 つのテーブルの一部をクエリする、別のテーブルのデータの別の部分をクエリする、このクロステーブル クエリ、複数のテーブルを接続するテーブルは結合クエリと呼ばれます。

接続クエリは、SQL92 構文と SQL99 構文に分けられます。現在、主流では SQL99 構文が使用されています。

SQL92の文法構造はさらに大雑把で文法構造が明確ではなく、テーブル接続の判定やその他の条件がwhereの後に置かれていて非常にわかりにくいです。選択....から....どこから....

SQL99 の文法構造は明確で、あるテーブルと別のテーブルを結合で結合し、on の後に判定条件を置きます。select....from...inner join....on...inner join...on...where...(inner は省略できますが、上記の文法構造を追加した方が明確です)

デカルト積現象:

クエリのために 2 つのテーブルを接続する場合、制限がない場合、クエリの数は 2 つのテーブル内のすべてのレコードの積になります。

このとき、内部接続と外部接続の制約の役割が反映されます。

1. 内部接続:

等価接続: クエリ結果は where 条件の等号によって決まります。

上記で目的の結果がクエリされましたが、クエリの数は依然として減少せず、フィルターで除外されただけです。同時に、将来接続されるテーブルの数は少ないほど良いこともわかっています。そうしないと効率が低下します。

非等価結合:

自己結合: 1 つのテーブルが 2 つのテーブルとして扱われます。

2. 外部結合 (右/左 + 外部[外部は省略可能]):

内部結合と外部結合の違い: 内部結合には主と副の関係はなく、2 つの (複数の) テーブルが同じレベルにありますが、外部結合には主と副の関係があり、主に何を確認するか、次に何を確認するかが異なります。

左外部結合 (左): 結合キーワードの左側のテーブルがメイン テーブルであることを示し、主に左側のテーブルのデータを検索します。ちなみに、右側のテーブルのデータも検索します。

右外部結合 (右): 結合キーワードの右側のテーブルがメイン テーブルであることを示し、主に右側のテーブルのデータを検索します。ちなみに、左側のテーブルのデータも検索します。

概要: 外部結合のクエリ数 >= 内部結合のクエリ数。

複数テーブルのクエリ:

使用選択 .....from ....join....on....join....on....where....group by ..... ……持っている……までに注文してください……

たとえば、各従業員の部署名と給与水準、および上司のリーダーを調べ、従業員の名前、リーダー名、部署名、給与、給与水準を表示します。

select e.ename,d.dname,n.ename as '上级',e.sal,s.grade from emp e join dept d on e.deptno = d.deptno left join emp n on e.mgr = n.empno s.losal と s.hisal の間の e.sal で salgrade s を結合します。

3. フル接続 (ほとんど使用されない)


2、サブクエリ

サブクエリ: select ステートメントは select ステートメント内にネストされており、ネストされた select ステートメントはサブクエリと呼ばれます。

サブクエリ ステートメントは、select、from、where の後ろに配置できます。

サブクエリは where 句に表示されます。

例: 給与が 800 元を超える従業員の名前と給与をクエリします。

サブクエリは from 句に表示されます。

注: from のサブクエリは、サブクエリ内で見つかったものの中の一時テーブルである場合があります。

例: 各仕事の平均給与の給与等級を調べますか?

select t.*,s.grade from (select job,avg(sal) as avgsal from emp group by job) t s.losal と s.hisal の間の t.avgsal 上の salgrade s を結合します。

select t.*,s.grade from (select ename,avg(sal) as avgsal from emp) t s.losal と s.hisal の間の t.avgsal 上の salgrade s を結合します。

select 句に現れるサブクエリ:

各従業員の部署名を問い合わせて、部署名と従業員名を表示しますか?

select e.ename,e.deptno,(select dname from dept join emp on emp.deptno = dept.deptno) from emp e;

注: select の後のサブクエリによって返される結果は 1 つのみです。複数の結果がある場合は、エラーが報告されます。

おすすめ

転載: blog.csdn.net/m0_73968621/article/details/132678288