亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓課程 | 模擬考場 | 考試論壇  
      全國  |             |          |          |          |          |         
        當前位置:計算機等級 > 二級考試 > Java語言程序設計 > 考試輔導 > 文章內容
        

      全國計算機等級考試二級Java重點內容(13)

      中華IT學院   【 】  [ 2016年9月19日 ]

      select distinct/列名/表達式/單行函數/組函數/

      from 表名

      where 條件(子查詢)1 or 條件2 and 條件3

      group by 列名

      having 組函數的條件

      order by 列名/列別名/表達式/組函數

      select deptno, count(*) c

      from emp_ning

      group by deptno

      --order by c;

      order by 2;

      --每個班的學生人數?

      1    4

      2    2

      3    73

      4    65

      5    48

      --把班級人數>50人的班級查出來

      select class_id, count(*)

      from t_student_ning

      group by class_id

      having count(*) > 3

      order by 2;

      --每個班的成績比例加起來是否=100?

      --百分之百

      1    100

      2    100

      select class_id, sum(scale)

      from t_assess_rule_ning

      group by class_id;

      --每個學生的總分?按總分由高到低排序

      3     173

      2     171

      1     157

      1    1    90

      1    2    87

      1    3    75

      1    4    67

      1    5    92

      1    6    95

      select student_id, sum(test_score)

      from t_performance_ning

      group by student_id

      order by 2 desc;

      一.子查詢

      --誰的總成績比1號學生的總成績高?

      select student_id, sum(test_score)

      from t_performance_ning

      group by student_id

      having sum(test_score) > (

               select sum(test_score)

               from t_performance_ning

               where student_id = 1

               );

      --誰的薪水比公司的平均薪水低?

      select ename, salary

      from emp_ning

      where salary < (select avg(nvl(salary,0))

                      from emp_ning);

       

      --誰的薪水比本部門的平均薪水低?

      --關聯(lián)子查詢

      select ename, salary, deptno

      from emp_ning x

      where salary < (

               select avg(nvl(salary,0))

               from emp_ning

               where deptno = x.deptno         

               );

      --誰的薪水比同經理的員工平均薪水低?

      select ename, salary, manager

      from emp_ning x

      where salary < (

               select avg(nvl(salary,0))

               from emp_ning

               where manager = x.manager      

               );

      張三  8000    10    1001        

      李四  5000    20    1001

      王五  15000   30    1001

      趙六  10000   10    1002

      5000

      10 12000

      20 5000

      30 8000

      .....

      --哪些員工是別人的經理?

      exists: 子查詢是否有結果返回

              有  true

              沒有 false

      select empno, ename

      from emp_ning x

      where exists (select 1

                    from emp_ning

                    where manager = x.empno);

      --哪些人不是別人的經理?

      select empno, ename

      from emp_ning x

      where not exists (select 1 from emp_ning where manager = x.empno);

      --哪些部門沒有員工?

      --判斷依據: 部門表的編碼,沒有出現在職員表的部門編碼列中.

      --使用 not exists

      select deptno, dname, location from dept_ning x

      where not exists (select 1 from emp_ning where deptno = x.deptno);

      集合操作:

      select deptno from dept_ning minus

      select distinct deptno from emp_ning;

      集合的合集: union / union all

      集合的交集: intersect

      select ename, salary, deptno

      from emp_ning

      where deptno = 10

      intersect

      select ename, salary, deptno

      from emp_ning

      where salary > 8000;

      二.多表聯(lián)合查詢

      select emp_ning.*, dept_ning.*

      from emp_ning join dept_ning

        on emp_ning.deptno = dept_ning.deptno;

      select e.*, d.*

      from emp_ning e join dept_ning d

        on e.deptno = d.deptno;

      select e.ename, d.dname, d.location

      from emp_ning e join dept_ning d

        on e.deptno = d.deptno;

      --主鍵: Primary Key = PK

      --列值是唯一的,不重復的

      --主表 / 父表

      --外鍵: Foreign Key = FK

      --列值參照某個主鍵列值

      --從表 / 子表

      --查詢學生的名字,科目,成績

      select stu.student_name,  per.subject_id,per.test_score from t_student_ning stu  join t_performance_ning per on stu.student_id = per.student_id;

       

       

      select stu.*, per.*, sub.*

      from t_student_ning stu  join t_performance_ning per on stu.student_id = per.student_id join  t_subject_ning sub on per.subject_id = sub.subject_i ;

      --列出學生的姓名/科目名/成績

      select stu.student_name, sub.subject_name, per.test_score

      from t_student_ning stu  join t_performance_ning per on stu.student_id = per.student_id join t_subject_ning sub

        on per.subject_id = sub.subject_id

      --1班的學生成績

      select stu.student_name, sub.subject_name, per.test_score

      from t_student_ning stu  join t_performance_ning per on stu.student_id = per.student_id join  t_subject_ning sub  on per.subject_id = sub.subject_id  where stu.class_id = 1;

      --1班學生的成績的總分,并排序

      select stu.student_name,sum(per.test_score) total_score from t_student_ning stu join t_performance_ning per on stu.student_id = per.student_id  where stu.class_id = 1  group by stu.student_nameorder by total_score desc;

      張無忌   張三豐

      郭芙蓉   張無忌

      --列出員工的名字和他的經理名字

      --自連接

      select worker.ename, manager.ename from emp_ning worker join emp_ning manager on worker.manager = manager.empno;

       

      update emp_ning set deptno = null where ename = 'tom';

      --部門是null的員工不會被查出來

      --沒有員工的部門,也不會被查出來.

      --內連接

      select e.ename, d.dname  from emp_ning e join dept_ning d on e.deptno = d.deptno;

      --外連接: 左外連接, 右外連接

      select e.ename, d.dname  from emp_ning e   left outer join dept_ning d on e.deptno = d.deptno;

      select e.ename, d.dname  from dept_ning d  right outer join emp_ning e on e.deptno = d.deptno;

      -- t1-驅動表

      t1 left outer join t2

      t2 right outer join t1

      外連接的結果集 = 內連接的結果集 +

        驅動表中在匹配表中沒有對應記錄的記錄和  空值的組合

      --部門表做驅動表

      select e.ename, d.dname

      from emp_ning e right outer join dept_ning d

      on e.deptno = d.deptno;

      --等價的語句,部門表做驅動表

      select e.ename, d.dname

      from dept_ning d left outer join emp_ning e

      on e.deptno = d.deptno;

       

      --left / right 外連接 都可以

      --關鍵是誰做驅動表.

      --全外連接: full outer join

      select e.ename, d.dname

      from emp_ning e full outer join dept_ning d

      on e.deptno = d.deptno;

      --哪些部門沒有員工?

      --1.關聯(lián)子查詢實現

      select dname, location from dept_ning x where not exists ( select 1 from emp_ning  where deptno = x.deptno)

      --2.集合

      select deptno from dept_ning minus

      select distinct deptno from emp_ning;

      --3.外連接

      --where 匹配表的pk is null = 驅動表中匹配不上的記錄.

      --相當于過濾掉內連接的結果集.

      select e.empno, e.ename, d.deptno, d.dname, d.location

      from emp_ning e right outer join dept_ning d

      on e.deptno = d.deptno

      where e.empno is null;

      Top-N分析

      --薪水最高的三個人?

      偽列: rownum

      --測試rownum的作用

      select rownum, empno, ename, salary

      from emp_ning;

      --希望:先排序,再取前三條.

      --實際:先取前三條,再排序.

      select empno, ename, salary

      from emp_ning

      where salary is not null

      and rownum < 4

      order by salary desc;

      --先排序,再取前三條.

      select * from( select empno, ename, salary from emp_ning where salary is not null order by salary desc) where rownum < 4;

      --計算學生總分: 學生表,成績表

      select *

      from (

          select stu.student_name,

               sum(per.test_score) total_score

          from t_student_ning stu

               join

               t_performance_ning per

          on stu.student_id = per.student_id

          where stu.class_id = 1

          group by stu.student_name

          order by total_score desc)

      where rownum < 2;

      --輸入:班號, 輸出:該班的最高分

      create or replace function maxScore_ning(p_class_id number)

      return number

      is

        v_total_score number;

      begin

        --v_total_score賦值為指定班的最高分

      select total_score into v_total_score

      from (

          select stu.student_name,

               sum(per.test_score) total_score

          from t_student_ning stu

               join

               t_performance_ning per

          on stu.student_id = per.student_id

          where stu.class_id = p_class_id

          group by stu.student_name

          order by total_score desc)

      where rownum < 2;

        return v_total_score;

      end;

       

      select stu.student_name, sum(per.test_score)

      from t_student_ning stu

      join t_performance_ning per

      on stu.student_id = per.student_id

      where stu.class_id = 1

      group by stu.student_name

      having sum(per.test_score) = maxscore_ning(1);

       

      --返回最高成績的學生學號

      create or replace function maxScore_ning1(p_class_id number)

      return number

      is

        v_student_id number;

      begin

      select student_id into v_student_id

      from (

          select stu.student_id,

               stu.student_name,

               sum(per.test_score) total_score

          from t_student_ning stu

               join

               t_performance_ning per

          on stu.student_id = per.student_id

          where stu.class_id = p_class_id

          group by stu.student_id, stu.student_name

          order by total_score desc)

      where rownum < 2;

        return v_student_id;

      end;

      分享到:
      本文糾錯】【告訴好友】【打印此文】【返回頂部
      將考試網添加到收藏夾 | 每次上網自動訪問考試網 | 復制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
      關于本站  網站聲明  廣告服務  聯(lián)系方式  站內導航  考試論壇
      Copyright © 2007-2013 中華考試網(Examw.com) All Rights Reserved