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 つのみです。複数の結果がある場合は、エラーが報告されます。!!