日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一头扎进sql之多表操作

發布時間:2024/7/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一头扎进sql之多表操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、多表查詢時NULL值處理

  • 要求返回比"allen"工資低的所有員工

  select? a.ename,a.conn from emp a? where? a.conn? <? (select b.conn from emp b where b.ename = 'allen') ;

  • 正確的寫法應該是

  select a.ename,a.conn from emp a where coalesce(a.conn,0) < (select b.conn from emp b from b.ename = 'allen');

  • 注意點

  NULL值比較結果還是NULL,所以這里需要進行NULL值的一個轉化才行

二、聚集和外鏈接

  • 要求返回所有部門的工資和獎金

  select? e.deptno,

     sum(e.sal) as total_sal,

     sum(e.sal*eb2.rount) as total_bonus,

     from emp?

     left join? (select eb.empno,

         sum(case when type =1 then 0.1

           ? ? ? ? ? when type =2 then 0.2

            ? ? ? ?when type =3 then 0.3 end ) as tote?

         from emp_bonux? eb?

         group by eb.empno) eb2? on eb2.empno = e.deptno?

      group by e.deptno

      oder by 1;

  • 多個表返回丟失的數據用FULL JOIN?

三、聚集和內連接

  • 要求返回部門為10的所有的員工的工資和獎金

  select e.deptno

    ? ?e.empno,

     e.ename,

     (e.sal * CASE? WHEN? type =1 THEN 0.1

    ? ? ? ? ? ? ? ? ? ? ? ? ? ??WHEN? type =2 THEN 0.2

          ? ? ? ?WHEN? type =3 THEN 0.3 end ) as? bonus

    from emp e?

    inner join emp_bonus eb on eb.empno = eb.empno

    where d.deptno = 10

    order by 1,2

  如果聚合的話必須先把獎金按照員工匯總然后在進行聚集

  select e.deptno

     sum(e.sal) as total_sal,

     sum(e.sal*eb.bonus) as total_bonus

  from emp e

  inner join (select eb.empno,

       case when type =1 then 0.1

        ? when type =1 then 0.2

        ??when type =1 then 0.3 end) as bonus

      group by eb.empno) eb2? on eb2.empno = e.empno

  where e.deptno? = 10;

  group by e.deptno;

四、UNION ALL 、UNION 、和空字符串

  select??ename as? 部門名稱 ,denpno 部門編號, evl(mgr,deptno) as 上級編碼

  NNION? ALL

  select??ename as? 部門名稱 ,denpno 部門編號, NULL as 上級編碼 (應該用‘’空字符串)

  • 當有重復數據時必須加上唯一標識

 ? ? 74990? 30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???74990? 30

? ? ? ?7521? ? 30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 7521? ? 30

  7654? ?30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 7654? ?30

  7844? ? 30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?7844? ? 30

  7900? ? 30

? ? ?這兩條數據坐聚合操作就會出現 OR就是有5條數據? 而用 UNION就會只出現一條數據 解決辦法就是加入唯一字段

  select? empno,deptno? from emp where mgr = 7684

  UNION?

  select? empno,deptno? from emp where job = 'SALEMAN' 就可以保證正確的去重數據

  select disdintc deptno? from (

    select? empno,deptno? from emp where mgr = 7684

    UNION? ALL

    select? empno,deptno? from emp where job = 'SALEMAN'

    )?

 order by deptno;

 

五、組合相關的行

  • 顯示部門為10的員工編碼、姓名、部門名稱和工作地址

    select e.deptno,e.ename,e.dname,e.loc

    from emp e?

  ? ? inner join dept d on (e.deptno = d.deptno)

   ? ?where e.deptno = 10

    select e.empno,e.ename,d.dname,d.loc

    from emp e,dept d

    e.deptno = d.deptno? and? e.deptno = 10

?

六、組合相關的行

   (LEFT? ?JOIN)? ? ?( RIGHT? ? JOIN)? ? ? ? ?(INNER? ?JOIN )? ?( FULL? ?JOIN )

  自關聯可以采用 left? ?join進行查詢

 

?

    ? ?

   

轉載于:https://www.cnblogs.com/hanxue112253/p/9504836.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的一头扎进sql之多表操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。