アットウィキロゴ
note4recurrent @ ウィキ
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

note4recurrent @ ウィキ

SQL_training

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
  • 複数テーブルの結合と絞りこみ
    select Hell.id, Hell.name, Element.name as element, Grade.name as grade
    from Hell
    join Element
    on Hell.element_id = Element.id
    join Grade
    on Hell.grade_id = Grade.id
    where Element.name ="Air" and  Grade.name ="Boss"
    
  • 副問合せと複数joinの組み合わせ
    • Hellテーブルから、モンスターの「Graffiacane」(Hellテーブルのnameが「 Graffiacane 」のレコード)
    • の弱点となる属性名を持ち、階級が「Boss」であるレコードをすべて出力してください。
    • 弱点はElementCompatibilityテーブルに格納されており、
    • 弱点に対応する属性名はelement_id、weakness_element_idを外部キーとしてElementテーブルを
    • 外部参照することで取得できます。
      select H.id , H.name, E.name as element, G.name as grade
      from Hell as H
      join Element as E 
      on H.element_id = E.id
      join Grade as G 
      on H.grade_id = G.id
      join ElementCompatibility as EC
      on E.id = EC.weakness_element_id
      where G.name = "Boss" and H.element_id = (
      select EC.weakness_element_id from Hell as H
      join Element as E
      on E.id = H.element_id
      join ElementCompatibility as EC
      on E.id = EC.element_id
      where H.name ="Graffiacane"
      )
      
  • SCOTT と同じdeptno,job の社員の ename,deptno.jobを表示
    SELECT ename, deptno, job
    FROM   emp
    WHERE  (deptno,job)  = (SELECT deptno,job 
                            FROM   emp
                            WHERE  ename='SCOTT');
    
  • 最低sal のename,sal
    SELECT ename, sal
    FROM   emp
    WHERE  sal = (SELECT MIN(sal) 
                  FROM   emp);
    
    
  • deptno 別の平均sal が最低の部署のdeptno,平均salを表示
    SELECT deptno, TRUNC(AVG(sal)) as AVG_SAL
    FROM   emp
    GROUP BY deptno
    HAVING AVG(sal) = (SELECT MIN(AVG(sal))
                       FROM   emp
                       GROUP BY deptno);
    
  • 「自分の所属する部門の平均給与よりも、給与が高い社員は誰か」
    SELECT ename, deptno, sal
    FROM   emp o
    WHERE  sal > (SELECT AVG(sal)
                  FROM   emp i
                  GROUP BY deptno
                  HAVING i.deptno = o.deptno );
    
  • 上と同じ条件
    SELECT  e.ename, e.deptno, e.sal
    FROM    emp e 
    JOIN    (SELECT deptno, AVG(sal) avg_sal
              FROM   emp
              GROUP BY deptno) i
    ON      e.deptno = i.deptno
    WHERE   e.sal > i.avg_sal;
    

タグ:

+ タグ編集
  • タグ:
最近更新されたスレッド
ウィキ募集バナー