データベース:DQLアクション


目次
一、基本クエリー
1.基本構文フォーマット
2.一般的なクエリー
二、高級クエリー
1.関連クエリー(接続クエリーとも呼ばれる)
2.サブクエリ
3.連結クエリー:連結結果セット
一、基本クエリー
1.基本構文フォーマット
構文フォーマット
さぎょう
selectフィールドまたは式
結果セットの表示
fromテーブル、ビュー、または結果セットなど
データ・ソースの指定
where検索条件
検索条件の指定
groupbyフィールド
フィールドごとのグループ化の指定
having検索条件
groupbyの後に使用して、検索条件を指定します
order byフィールド
フィールド別のソートを指定します.デフォルトの増分asc、降順desc
Limit初期インデックス、長さ
制限の結果、インデックスは0から始まり、0の場合は書き込みのみを省略できます
2.一般的なクエリー
2.1 select表示結果セットの指定
#   3 sql  ,    !
#1.  emp         
select * from emp;
#2. emp                
select ename, job from emp;

2.2 where検索条件の指定:リレーショナル演算子、論理演算子、inキーワード、Null値の有無、範囲クエリーbetween and
#3. emp       20        
select * from emp where deptno=20;
#4. emp        2000         
select ename, sal from emp where sal > 2000;
#5. emp       1000 2000       (    )
select * from emp where sal > 1000 and sal < 2000;
select * from emp where sal between 1000 and 2000;
#6. emp         7788,7369,7521     
select * from emp where empno = 7788 or empno = 7369 or empno = 7521;
select * from emp where empno in (7788,7369,7521);
#9. emp               。(comm   )
select * from emp where comm is null;
select * from emp where comm is not null;

2.3 distinctキーワードの再表示
#7. emp           (  )
select distinct job from emp;

2.4別名の取得
#8. emp       5%         (  :  、   、 、    )
#     :[as]   
select ename,sal * 1.05 nsal from emp;
select emp.ename,emp.sal from emp;
select e.ename,e.sal from emp e;

2.5ソートorder byと制限結果クエリーlimit
#10. emp            
#   :  SQL     
#   :        
#  :order by      (    ,asc   ,desc   )
#         ,      ,         
select * from emp order by sal desc, empno desc;
#      (  :limit     ,   ,     0  ,    0  ,      
# ,    limit 5,    5 ),            mysql。
select * from emp order by sal desc limit 1;

2.6ファジイクエリ
キーワードとワイルドカード:
  • ファジイクエリ:like
  • %:0~複数の文字を表す
  • _:1ビット文字を表す
  • サンプルコード:
    #11.       s     (    :like %:  0      _:  1   )
    select * from emp where ename like '%s%';
    select * from emp where ename like 's%';
    select * from emp where ename like '%s';
    #     3    L     
    select * from emp where ename like '__L%';

    二、高級クエリー
    1.関連クエリー(接続クエリーとも呼ばれる)
    1.1定義:複数のテーブルまたは結果セットを問い合わせる
    1.2分類:内部接続と外部接続
    1.3内部接続
    構文の形式:
    # emp               
    #   :
    #where                
    select * from emp,dept where emp.deptno = dept.deptno;
    #   :inner join … on
    select * from emp inner join dept on emp.deptno = dept.deptno;
    #   :     ,       
    select * from emp inner join dept  using(deptno);

    特徴まとめ:
  • 複数の関連テーブルに共通するレコードが結果セットに表示されます.
  • 内の接続の結果は、接続順序に関係ありません.

  • 1.4外部接続
    構文の形式:
  • 左外接続:left[outer]join...on...
  • 右外部接続:right[outer]join...on...
  • サンプルコード:
    #                 (         )
    select * from dept left join emp on emp.deptno = dept.deptno;
    select * from dept left join emp on dept.deptno = emp.deptno;
    
    #    (          ,            )
    select * from emp natural join dept;
    
    #  20               
    select * from emp , dept where emp.deptno = dept.deptno and emp.deptno=20;
    select * from (select * from emp where deptno = 20) e,dept where e.deptno=dept.deptno;
    
    #            (mgr)   (   )
    select e1.ename '  ', e2.ename '  ' from emp e1 left join emp e2 on e1.mgr=e2.empno;

    特徴まとめ:
  • 外部接続結果は、接続順序に関係します.
  • は、プライマリ・スレーブ・テーブルに分けられ、プライマリ・テーブルの各レコードを順次巡回して関連テーブルとマッチングし、マッチングが成功すると関連付けが結果セットに表示され、マッチングが失敗するとnullで埋め込まれます.

  • 2.サブクエリ
    1.1クエリー結果を別のクエリーとして使用する条件または構成を定義して、検索を続行します.
    2.2分類
    1行サブクエリ1行サブクエリ:サブクエリが返す結果はレコードです.
    複数行サブクエリ:サブクエリが返す結果は複数レコード
    2.3 1行サブクエリ
    サンプルコード:
    #     7788          
    #   :      
    select dept.* from (select * from emp where empno = 7788) e, dept where e.deptno=dept.deptno;
    #   :   (     )  
    #  7788       ,            (     )
    select * from dept where deptno = (select deptno from emp where empno = 7788);
    
    #    >20            
    select * from emp where sal > (select avg(sal) from emp where deptno = 20);
    #    >20           20        
    select * from emp where sal > (select avg(sal) from emp where deptno = 20) and deptno<>20;

    2.4複数行サブクエリ
    2.4.1キーワード:anyとall
    #    :any / all:
    # =any:   in >any:      all:       2000);
    
    #                    
    #      
    select emp.* from emp , (select deptno , avg(sal) avg from emp group by deptno) e where 
    emp.deptno = e.deptno and sal > e.avg;
    #     
    #  :
    #1.    deptno     
    #2.         deptno           
    #3.                 
    #4.               。
    select * from emp e1 where sal > (
        select avg(sal) from emp e2 where e2.deptno = e1.deptno
    );

    2.4.2キーワード:exists
    サンプルコード:
    #    >2000          
    #exists:
    #1.               
    #2.         ,           ,  true,            ; 
    #       false,          
    select * from dept where exists (
        select * from emp where sal > 2000 and emp.deptno = dept.deptno
    );

    inとexsitsの違い:
  • inサブクエリを先に実行し、existsはメインクエリ
  • を先に実行する.
  • in注釈サブクエリの戻り値を閉じるフィールド情報が必要です.existsは、戻りフィールド
  • に関心を持つ必要はありません.
  • existsは、プライマリ・クエリのレコードをサブクエリに順次一致させ、一致がtrue表示を返す場合.

  • 2.5まとめ
    関連クエリーはいつ使用しますか?サブクエリはいつ使用しますか?
  • クエリー結果に複数のテーブルが存在する場合、関連クエリーを使用します.クエリーの結果がテーブルに存在する場合は、サブクエリーを使用します.
  • 関連クエリーはリソース消費量が高く、サブクエリーはリソース消費量が低いが、複数のクエリーが存在する可能性がある.

  • 3.連結クエリー:連結結果セット
    3.1条件
    複数の結果セットのフィールドは、クエリーを統合するために一貫性を保つ必要があります.
    3.2キーワード
    union:結果セットを結合して重量を除去
    union all:連合結果セットは重くないが重くない
    3.3共同クエリーを使用する理由
    理論的には連合クエリーの代わりにorキーワードを使用することができるが、orキーワードはインデックスの失効を招くため、連合クエリーを使用する.
    3.4サンプルコード
    #  20       >2000     
    select * from emp where deptno = 20 or sal > 2000;
    select * from emp where deptno = 20 union select * from emp where sal > 2000;
    select * from emp where deptno = 20 union all select * from emp where sal > 2000;