精华内容
下载资源
问答
  • 数据库范式例题
    千次阅读 多人点赞
    2021-04-26 10:38:24

    题目

    一.

    Y(X1,X2,X3,X4)
    (X1,X2) → \rightarrow X3
    X2 → \rightarrow X4
    侯选码?
    属于第几范式?

    二.

    R(A,B,C,D)
    F={AB → \rightarrow D,AC → \rightarrow BD,B → \rightarrow C}
    侯选码?
    最高属于第几范式?

    三.

    R(X,Y,Z,W)
    F={Y ← \leftarrow → \rightarrow W,XY → \rightarrow Z}
    侯选码?
    最高属于第几范式?

    一.

    因为 X2 → \rightarrow X4
    所以 ( X 1 , X 2 ) → P X 4 (X1,X2) \stackrel{P}{\rightarrow} X4 (X1,X2)PX4
    因为 ( X 1 , X 2 ) → X 3 (X1,X2) \stackrel{}{\rightarrow} X3 (X1,X2)X3
    所以 ( X 1 , X 2 ) → ( X 3 , X 4 ) (X1,X2) \stackrel{}{\rightarrow} (X3,X4) (X1,X2)(X3,X4)
    因此:候选码:(X1,X2);非主属性:X3,X4。
    因为(X1,X2) → \rightarrow X4, X2 → \rightarrow X4,存在非主属性X4对候选码(X1,X2)的部分函数依赖;
    所以不属于2NF。
    结论:候选码(X1,X2),属于第一范式。

    二.

    因为 B → \rightarrow C
    所以 ( A , B ) → ( C , D ) (A,B) \stackrel{}{\rightarrow} (C,D) (A,B)(C,D)
    因为 ( A , C ) → ( B , D ) (A,C) \stackrel{}{\rightarrow} (B,D) (A,C)(B,D)
    因此:候选码:(A,B)、(A,C);非主属性:D。
    不存在非主属性D对候选码(A,B)、(A,C)的部分函数依赖;
    所以属于第三范式。
    不属于BCNF 因为B→C,B不包含码
    满足BCNF的关系模式有:

    • 所有非主属性对每一个码都是完全函数依赖
    • 所有主属性对每一个不包含它的码也是完全函数依赖
    • 没有任何属性完全函数依赖于非码的任何一组属性
      第二题因为C并不是完全依赖于不包含C的码,因为B → \rightarrow C。

    因为(X,Y) → \rightarrow Z ,Y → \rightarrow W
    所以(X,Y) → \rightarrow (W,Z),(X,Y)是码
    因为(X,W) → \rightarrow X, (X,W) → \rightarrow W, W → \rightarrow Y
    所以(X,W) → \rightarrow (X,Y,W),
    因为W → \rightarrow Y,XW → \rightarrow XY,XY → \rightarrow Z,所以(X,W) → \rightarrow Z
    所以(X,W)也是码
    候选码:(X,Y)、(X,W);非主属性:Z。
    属于第二范式,因为Z完全依赖于码(非主属性只有Z)
    属于第三范式,因为Z没有传递依赖于码
    不属于BC范式 因为W→Y,决定者不包含候选码
    所以第三题最高属于第三范式。

    更多相关内容
  • 数据库范式练习

    千次阅读 2020-05-24 16:07:10
    数据库范式练习 设W(C,P,S,G,T,R)其中C为课程,P为教师,S为学生,G为成绩,T为时间,R为教室。存在有如下函数依赖集{ (S,C)->G,(T,R)->C,(T,P)->R,(T,S)->R }关系模式W的候选码( 1 ),W的规范化程度...

    数据库范式练习

    1. 设W(C,P,S,G,T,R)其中C为课程,P为教师,S为学生,G为成绩,T为时间,R为教室。存在有如下函数依赖集{ (S,C)->G,(T,R)->C,(T,P)->R,(T,S)->R }关系模式W的候选码( 1 ),W的规范化程度最高达到( 2 ) 。

    PST;1NF

    1. 现有函数依赖集F = {ABCBACCA},试求其最小函数依赖集。

    F= {AB , B →C , C →A }

    1. R<U,F>,U={A,B,C,D,E},F={AB->C,C->D,D->E},其一个分解ρ={R1(ABC),R2(CD),R3(DE)},判断该分解是否具有无损连接性。

    在这里插入图片描述

    1. R<U,F>,U={A,B,C,D},F={A->B,B->C,C->D,D->A},判定分解ρ={AB,BC,CD}是否具有函数依赖保持性。

    R(AB) F = {A->B}
    R(BC) F = {B->C}
    R(CD) F = {C->D}
    设关系集G={A->B,B->C,C->D}
    对于D->A,求CD关于G的闭包,即,可见,CD关于G的闭包不包含A,因此没有保持该函数依赖
    因此ρ不具有函数依赖保持性

    1. 设有R(A,B,C,D) ,F={A->C,C->A,B->AC,D->AC}

      (1)R的候选码

      (2)将R分解成3NF且无损保持函数依赖

      (3)将R分解成BCNF且保持无损连接

    (1)BD

    (2)先将F分解,得到最小函数依赖集F={A->C, C->A,B->A,D->C}
    按左侧属性相同分组,得到R(AC), R(BA), R(DC)
    此时没有保持函数依赖,添加R(BD)
    因此可以分解为P={AC,BA,CD,BD},满足3NF

    (3)选择A->C,于是得到R1(AC)
    R2(ABD),F2={B->A,D->C},此时R2不满足BCNF,因此继续分解,选择 B->A
    得到R21(BA),R22(BD)
    因此,可以分解为P={AC, AB, BD},满足BCNF

    1. 设有R(A,B,C,D) ,F={A->C,C->A,B->AC,D->AC}

      1.计算(AD)+

      2.求F的最小等价依赖集Fm

    (1) ( A D ) + = { A , C , D } (AD)^+ = \{A,C,D\} (AD)+={A,C,D}

    (2)F={A->C, C->A, B->A, B->C, D->A , D->C}

    因此最小等价依赖集Fm={A->C, C->A, B->A, D->A }

    1. 设关系模式R(A,B,C,D,E,P),其中F={A->B,C->P,E->A,CE->D}

      (1)求R的候选码。

      (2)R的规范化程度。

    (1)CE

    (2)关系E->A部分依赖码CE,因此属于1NF

    1. 设R(A,B,C,D,E),F={A->C,C->D,B->C,DE->C,CE->A}

      (1)求R的候选码及R的规范化程度;

      (2)ρ={AD,AB,BC,CDE,AE}是否无损连接;

      (3)将R分解BCNF且无损。

    (1)R的候选码为BE,R的规范化程度为1NF

    (2)在这里插入图片描述

    (3)选择A->C,得到R1(AC),和R2(ABDE),F2={BE->A, A->D, B->D}

    ​ 选择A->D,得到R21(AD),和R22(ABE),F22={BE->A}

    因此,R分解为(AC, AD, ABE)

    1. 设R(A,B,C,D,E),F={A->BD, B->E,C->A,CD->E}

      (1)求(AD)+;

      (2)求最小函数依赖集Fm;

      (3)将其分解为3NF保持函数依赖;

      (4)判断R的一个分解ρ={AB,ACE,BCD}是否保持函数依赖性,并说明原因。

    (1)(AD)+ = {A, B, D, E }

    (2)Fm={A->B, A->D, B->E, C->A}

    (3)P={ABD, BE, CA}

    (4)对于R1(AB),F1={A->B}
    R2(ACE) F2= {C->A, A->E}
    R3(BCD) F3= {C->B, C->D}
    F1 U F2 U F3 = G
    G无法退出关系A->D
    因此不保持函数依赖性

    1. 设有关系模式R(A,B,C,D,E),其上的函数依赖集:

      F={A→D,CD→A,E→D,BC→D,D→B}

      (1)求R的候选码;

      (2)判断R属于第几范式,并说明原因;

      (3)判断ρ={AD,CDE,BCD}是否为无损连接分解;

      (4)将R分解使得其满足BCNF,并具有无损连接性。

    (1)候选码为CE

    (2)关系E->D,部分依赖码CE,因此是1NF

    (3)在这里插入图片描述

    (4)选择A->D,得到R1(AD), R2(ABCE) F2m={ CE->A , A->B}

    ​ 选择A->B,得到R21(AB),R22(ACE)

    ​ 因此可以将R分解为{AD, AB, ACE}

    展开全文
  • 数据库范式练习

    千次阅读 2021-02-02 05:16:04
    第二范式,指的是这种关系不仅满足第一范式,而且所有非主属性完全依赖于其主码。第三范式,指的是这种关系不仅满足第二范式,而且它的任何一个非主属性都不传递依赖于任何主关键字。考生情况(考生...

    1、请简述满足1NF、2NF和3NF的基本条件。并完成下题:某信息一览表

    如下,其是否满足3NF,若不满足请将其化为符合3NF的关系。(本小题

    1d70bb3eb37e9e9fabf1663afd88f744.png

    第一范式的关系应满足的基本条件是元组中的每一个分量都必须是不可

    分割的数据项。

    第二范式,指的是这种关系不仅满足第一范式,而且所有非主属性完全

    依赖于其主码。

    第三范式,指的是这种关系不仅满足第二范式,而且它的任何一个非主属性都不传递依赖于任何主关键字。

    考生情况(考生编号,姓名,性别,考生学校)

    考场情况(考场号,考场地点)

    考场分配(考生编号,考场号)

    成绩(考生编号,考试成绩,学分)

    2、某信息一览表如下,其是否满足3NF,若不满足请将其化为符合3NF的关

    49b214093f4cabf839fe4e7e97c9cc6d.png

    配件关系:(配件编号,配件名称,型号规格)

    供应商关系(供应商名称,供应商地址)

    配件库存关系(配件编号,供应商名称,单价,库存量)

    <
    展开全文
  • 视图可以隐藏的实现细节,保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD mysql> create view myview2 as select empno a,ename b,sal c from emp_bak; Query OK, 0 rows ...

    5.5视图的作用
    视图可以隐藏的实现细节,保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD
    mysql> create view myview2 as select empno a,ename b,sal c from emp_bak;
    Query OK, 0 rows affected (0.01 sec)
    mysql> select view2 from myview2;
    ERROR 1054 (42S22): Unknown column ‘view2’ in ‘field list’

    mysql> select * from myview2;
    ±-----±-------±--------+
    | a | b | c |
    ±-----±-------±--------+
    | 7369 | SMITH | 800.00 |
    | 7499 | ALLEN | 1600.00 |
    | 7521 | WARD | 1250.00 |
    | 7566 | JONES | 2975.00 |
    | 7654 | MARTIN | 1250.00 |
    | 7698 | BLAKE | 2850.00 |
    | 7782 | CLARK | 2450.00 |
    | 7788 | SCOTT | 3000.00 |
    | 7839 | KING | 5000.00 |
    | 7844 | TURNER | 1500.00 |
    | 7876 | ADAMS | 1100.00 |
    | 7900 | JAMES | 950.00 |
    | 7902 | FORD | 3000.00 |
    | 7934 | MILLER | 1300.00 |
    ±-----±-------±--------+
    14 rows in set (0.00 sec)

    mysql> insert into myview2(a,b,c) values(…);
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘…)’ at line 1

    任务82:074 数据库设计三范式.flv (必须掌握)
    7.1什么是设计范式?
    设计表的依据。按照这个三范式设计的表不会出现数据冗余。
    7.2三范式都是哪些?
    第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
    第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖
    多对多?三张表,关系表两个外键
    第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键字段,不能产生传递依赖
    一对多?
    班级t_class
    Cno(PK) cname\

    学生t_student
    Sno(pk) sname classno(fk)
    101 张1 1
    102 张2 1
    103 张3 2

    104 张4 2
    提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度

    T_student 学生表
    Sno(PK) Sname
    1 张三
    2 李四
    3 王五
    T_teacher 讲师表
    Tno(pk) tname
    1 王老师
    2 张老师
    3 李老师
    T_student_teacher_relation 学生讲师关系表

    Id (pk) sno(fk) tno(fk)
    1 ` 1 3
    2 1 1
    3 2 2
    4 2 3
    5 3 1
    6 3 3

    (不符合可以分为 邮箱 和 电话)

    (符合记录)

    任务83:075 表的设计经典设计方案.flv
    一对一怎么设计?
    一对一设计有两种方案:主键共享,外键唯一
    T_user_login 用户登陆表
    Id(pk) username password
    1 zs 123
    2 ls 456
    T_user_detail用户详细信息表
    Id(PK) realname tel userid(fk+unique)…
    1 张三 11111111 2
    2 李四 11114156 1

    任务84:076 074-34道作业题.flv
    重新还原数据库
    mysql> drop database bjpowernode;
    Query OK, 16 rows affected (0.09 sec)

    mysql> create database bjpowernode;
    Query OK, 1 row affected (0.00 sec)
    mysql> use bjpowernode;
    Database changed
    mysql> source C:\Users\Administrator\Downloads\mysql资料\数据脚本\bjpowernode\bjpowernode.sql
    Query OK, 0 rows affected, 1 warning (0.00 sec)

    Step1
    mysql> select deptno,max(sal) as maxsal from emp group by deptno;
    ±-------±--------+
    | deptno | maxsal |
    ±-------±--------+
    | 10 | 5000.00 |
    | 20 | 3000.00 |
    | 30 | 2850.00 |
    ±-------±--------+
    Step 2:
    T 表和 emp表连接:条件:t.deptno=e.deptno and t.maxsal = e.sal
    mysql> select e.ename,t.* from emp e join (select deptno,max(sal) as maxsal from emp group by deptno) t
    -> on t.deptno=e.deptno and t.maxsal = e.sal;
    ±------±-------±--------+
    | ename | deptno | maxsal |
    ±------±-------±--------+
    | BLAKE | 30 | 2850.00 |
    | SCOTT | 20 | 3000.00 |
    | KING | 10 | 5000.00 |
    | FORD | 20 | 3000.00 |
    ±------±-------±--------+
    4 rows in set (0.00 sec)
    mysql> select e.ename,t.* from emp e join (select deptno,max(sal) as maxsal from emp group by deptno) t
    -> on e.deptno=t.deptno and e.sal=t.maxsal;
    ±------±-------±--------+
    | ename | deptno | maxsal |
    ±------±-------±--------+
    | BLAKE | 30 | 2850.00 |
    | SCOTT | 20 | 3000.00 |
    | KING | 10 | 5000.00 |
    | FORD | 20 | 3000.00 |
    任务85:077 075-34道作业题.flv
    2.哪些人的薪水在部门的平均薪水之上
    Step1:找出每个部门的平均薪水
    Select deptno,avg(sal) as avgsal from emp group by deptno;
    ±-------±------------+
    | deptno | avgsal |
    ±-------±------------+
    | 10 | 2916.666667 |
    | 20 | 2175.000000 |
    | 30 | 1566.666667 |
    ±-------±------------+
    3 rows in set (0.00 sec)
    Step2:将以上查询结果当做t表,t和emp表连接
    条件:部门编号相同,并且emp的sal 大于t表的avgsal
    mysql> select e.ename,t.* from emp e join (select deptno,avg(sal) as avgsal from emp group by deptno) t
    -> on e.sal>t.avgsal and t.deptno=e.deptno;
    ±------±-------±------------+
    | ename | deptno | avgsal |
    ±------±-------±------------+
    | ALLEN | 30 | 1566.666667 |
    | JONES | 20 | 2175.000000 |
    | BLAKE | 30 | 1566.666667 |
    | SCOTT | 20 | 2175.000000 |
    | KING | 10 | 2916.666667 |
    | FORD | 20 | 2175.000000 |
    ±------±-------±------------+
    6 rows in set (0.00 sec)
    select e.ename,t.,e.sal from emp e join (select deptno,avg(sal) as avgsal from emp group by deptno) t
    On e.deptno=t.deptno and e.sal>t.avgsal;
    mysql> select e.ename,t.
    ,e.sal from emp e join (select deptno,avg(sal) as avgsal from emp group by deptno) t
    -> On e.deptno=t.deptno and e.sal>t.avgsal;
    ±------±-------±------------±--------+
    | ename | deptno | avgsal | sal |
    ±------±-------±------------±--------+
    | ALLEN | 30 | 1566.666667 | 1600.00 |
    | JONES | 20 | 2175.000000 | 2975.00 |
    | BLAKE | 30 | 1566.666667 | 2850.00 |
    | SCOTT | 20 | 2175.000000 | 3000.00 |
    | KING | 10 | 2916.666667 | 5000.00 |
    | FORD | 20 | 2175.000000 | 3000.00 |
    ±------±-------±------------±--------+
    6 rows in set (0.00 sec)

    任务86:078 076-34道作业题.flv
    取得部门种(所有人的) 平均的薪水等级
    平均的薪水等级,先计算每一个薪水的等级,然后找出每个平均薪水的等级值
    平均薪水等级:先计算平均薪水,然后找出每个平均薪水的等级值
    第一步:找出每个人的薪水等级
    Emp e和salgrade s表连接
    连接条件:e.sal between s.losal and s.hisal
    Select e.ename, e.sal, e.deptno, s.grade
    From emp e
    Join salgrade s
    On e.sal between s.losal and s.hisal order by deptno;
    mysql> Select e.ename, e.sal, e.deptno, s.grade
    -> From emp e
    -> Join salgrade s
    -> On e.sal between s.losal and s.hisal order by deptno;
    ±-------±--------±-------±------+
    | ename | sal | deptno | grade |
    ±-------±--------±-------±------+
    | MILLER | 1300.00 | 10 | 2 |
    | CLARK | 2450.00 | 10 | 4 |
    | KING | 5000.00 | 10 | 5 |
    | ADAMS | 1100.00 | 20 | 1 |
    | JONES | 2975.00 | 20 | 4 |
    | FORD | 3000.00 | 20 | 4 |
    | SCOTT | 3000.00 | 20 | 4 |
    | SMITH | 800.00 | 20 | 1 |
    | ALLEN | 1600.00 | 30 | 3 |
    | TURNER | 1500.00 | 30 | 3 |
    | WARD | 1250.00 | 30 | 2 |
    | JAMES | 950.00 | 30 | 1 |
    | MARTIN | 1250.00 | 30 | 2 |
    | BLAKE | 2850.00 | 30 | 4 |
    ±-------±--------±-------±------+
    第二步:基于以上的结果继续按照deptno分组,求grade的平均值
    Select e.deptno,avg(s.grade) From emp e
    Join salgrade s
    On e.sal between s.losal and s.hisal
    Group by e.deptno;
    mysql> Select e.deptno,avg(s.grade) From emp e
    -> Join salgrade s
    -> On e.sal between s.losal and s.hisal
    -> Group by e.deptno;
    ±-------±-------------+
    | deptno | avg(s.grade) |
    ±-------±-------------+
    | 10 | 3.6667 |
    | 20 | 2.8000 |
    | 30 | 2.5000 |
    ±-------±-------------+
    3 rows in set (0.00 sec)
    任务87:079 077-34道作业题.flv
    3.不准用组函数(MAX),取得最高薪水
    第一种:sal 降序,limit 1
    Select ename, sal from emp order by sal desc limit 1;
    mysql> Select ename, sal from emp order by sal desc limit 1;
    ±------±--------+
    | ename | sal |
    ±------±--------+
    | KING | 5000.00 |
    ±------±--------+
    1 row in set (0.00 sec)
    第二种方案:select max(sal) from emp;
    mysql> select ename,sal from emp;
    ±-------±--------+
    | ename | sal |
    ±-------±--------+
    | SMITH | 800.00 |
    | ALLEN | 1600.00 |
    | WARD | 1250.00 |
    | JONES | 2975.00 |
    | MARTIN | 1250.00 |
    | BLAKE | 2850.00 |
    | CLARK | 2450.00 |
    | SCOTT | 3000.00 |
    | KING | 5000.00 |
    | TURNER | 1500.00 |
    | ADAMS | 1100.00 |
    | JAMES | 950.00 |
    | FORD | 3000.00 |
    | MILLER | 1300.00 |
    ±-------±--------+

    第三种方案:表的自连接
    Select sal from emp where sal not in(select distinct a.sal from emp a join emp b on a.sal<b.sal);
    Selct xxx from a join b on a.sal>b.sal;
    Step1 a表
    mysql> select sal from emp;
    ±--------+
    | sal |
    ±--------+
    | 800.00 |
    | 1600.00 |
    | 1250.00 |
    | 2975.00 |
    | 1250.00 |
    | 2850.00 |
    | 2450.00 |

    | 3000.00 |
    | 5000.00 |
    | 1500.00 |
    | 1100.00 |
    | 950.00 |
    | 3000.00 |
    | 1300.00 |
    ±--------+
    Step2 b表
    mysql> select distinct a.sal from emp a join emp b on a.sal<b.sal
    -> ;
    ±--------+
    | sal |
    ±--------+
    | 800.00 |
    | 1250.00 |
    | 1500.00 |
    | 1100.00 |
    | 950.00 |
    | 1300.00 |
    | 1600.00 |
    | 2850.00 |
    | 2450.00 |
    | 2975.00 |
    | 3000.00 |
    ±--------+
    11 rows in set (0.00 sec)
    最终表
    mysql> Select sal from emp where sal not in(select distinct a.sal from emp a join emp b on a.sal<b.sal);
    ±--------+
    | sal |
    ±--------+
    | 5000.00 |
    ±--------+
    1 row in set (0.00 sec)

    任务88:080 078-34道作业题.flv
    5、取得平均薪水最高的部门的部门编号
    第一种方案:
    找出每个部门的平均薪水
    Select deptno,avg(sal) as avgsal from emp group by deptno;
    mysql> Select deptno,avg(sal) as avgsal from emp group by deptno;
    ±-------±------------+
    | deptno | avgsal |
    ±-------±------------+
    | 10 | 2916.666667 |
    | 20 | 2175.000000 |
    | 30 | 1566.666667 |
    Step 2 降序选第一个 取得平均薪水最高的部门编号
    (1)
    mysql> Select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1;
    ±-------±------------+
    | deptno | avgsal |
    ±-------±------------+
    | 10 | 2916.666667 |
    ±-------±------------+
    (3)select max(t.avgsal) from ()t; (Select deptno,avg(sal) as avgsal from emp group by deptno)
    mysql> select max(t.avgsal) from (Select deptno,avg(sal) as avgsal from emp group by deptno) t;
    ±--------------+
    | max(t.avgsal) |
    ±--------------+
    | 2916.666667 |
    ±--------------+
    mysql> Select
    -> deptno,avg(sal) as avgsal
    -> from
    -> Emp
    -> group by deptno
    -> having
    -> avgsal=(select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);
    ±-------±------------+
    | deptno | avgsal |
    ±-------±------------+
    | 10 | 2916.666667 |
    ±-------±------------+
    1 row in set (0.00 sec)
    最二步:找出以上结果avg最大的值
    mysql> select max(t.avgsal) from(select deptno,avg(sal) as avgsal from emp group by deptno) t;
    ±--------------+
    | max(t.avgsal) |
    ±--------------+
    | 2916.666667 |
    ±--------------+
    1 row in set (0.00 sec)
    第三步:
    Select deptno,avg(sal) as avgsal from
    Emp group by deptno;
    6.取得平均薪水最高的部门名称

    mysql> select
    -> deptno,avg(sal) as avgsal
    -> from emp
    -> group by
    -> deptno
    -> having avgsal=(select max(t.avgsal) from(select deptno,avg(sal) as avgsal from emp group by deptno) t );
    ±-------±------------+
    | deptno | avgsal |
    ±-------±------------+
    | 10 | 2916.666667 |
    ±-------±------------+

    任务90:082 080-34道作业题.flv
    7、求平均薪水的等级最低的部门的部门名称
    第一种 按照部门名称分组,找出每个部门的平均薪水
    平均薪水是800
    平均薪水是900
    那么他俩都是1级别
    emp e
    Deptno dept
    Step1:按照部门名字进行分组,找出每个部门的平均薪水
    Select deptno, avg(sal) as avgsal from emp group by deptno;
    第二种:找出每个部门的平均薪水的等级
    以上t表和salgrade表连接,条件:
    T.avgsal between a.losal and s.hisal

    Select t.*, s.grade
    From t
    Join salgrade s
    on
    T.avgsal between s.losal and s.hisal;

    mysql> select t.*, s.grade
    -> from (select deptno,avg(sal) as avgsal from emp group by deptno) t
    -> join salgrade s
    -> on
    -> t.avgsal between s.losal and s.hisal;
    ±-------±------------±------+
    | deptno | avgsal | grade |
    ±-------±------------±------+
    | 10 | 2916.666667 | 4 |
    | 20 | 2175.000000 | 4 |
    | 30 | 1566.666667 | 3 |
    ±-------±------------±------+
    抛开之前的,最低等级你怎么着?
    平均薪水最低的对应的等级一定是最低的。
    mysql> select avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1;
    ±------------+
    | avgsal |
    ±------------+
    | 2916.666667 |
    ±------------+
    1 row in set (0.00 sec)
    Select grade from salgrade where () between losal and hisal;
    mysql> select grade from salgrade where (select avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1) between losal and hisal;
    ±------+
    | grade |
    ±------+
    | 4 |
    ±------+
    1 row in set (0.00 sec)

    mysql> select t.*,s.grade
    -> from
    -> (select deptno,avg(sal) as avgsal from emp group by deptno) t
    -> join
    -> salgrade s
    -> on
    -> t.avgsal between s.losal and s.hisal;
    ±-------±------------±------+
    | deptno | avgsal | grade |
    ±-------±------------±------+
    | 10 | 2916.666667 | 4 |
    | 20 | 2175.000000 | 4 |
    | 30 | 1566.666667 | 3 |
    ±-------±------------±------+
    3 rows in set (0.00 sec)
    任务91:083 081-34道作业题.flv

    8、取得比普通员工(员工代码没有在 mgr 字段上出现的) 的最高薪水还要高的领导人姓名

    比“普通员工的最高薪水”还要高的一定是领导!
    	没毛病!!!!
    

    mysql> select * from salgrade;
    ±------±------±------+
    | GRADE | LOSAL | HISAL |
    ±------±------±------+
    | 1 | 700 | 1200 |
    | 2 | 1201 | 1400 |
    | 3 | 1401 | 2000 |
    | 4 | 2001 | 3000 |
    | 5 | 3001 | 9999 |
    ±------±------±------+
    5 rows in set (0.00 sec)

    mysql> select distinct mgr from emp;
    ±-----+
    | mgr |
    ±-----+
    | 7902 |
    | 7698 |
    | 7839 |
    | 7566 |
    | NULL |
    | 7788 |
    | 7782 |
    ±-----+
    7 rows in set (0.00 sec)
    mysql> select distinct mgr from emp where mgr is not null;
    ±-----+
    | mgr |
    ±-----+
    | 7902 |
    | 7698 |
    | 7839 |
    | 7566 |
    | 7788 |
    | 7782 |
    ±-----+

    员工编号没有在以上范围内的都是普通员工。

    第一步:找出普通员工的最高薪水!
    not in在使用的时候,后面小括号中记得排除NULL。
    select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null);
    ±---------+
    | max(sal) |
    ±---------+
    | 1600.00 |
    ±---------+

    第二步:找出高于1600的
    select ename,sal from emp where sal > (select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null));
    ±------±--------+
    | ename | sal |
    ±------±--------+
    | JONES | 2975.00 |
    | BLAKE | 2850.00 |
    | CLARK | 2450.00 |
    | SCOTT | 3000.00 |
    | KING | 5000.00 |
    | FORD | 3000.00 |
    ±------±--------+
    任务91:083 081-34道作业题.flv
    9、取得薪水最高的前五名员工
    mysql> select ename,sal from emp order by sal desc limit 5;
    ±------±--------+
    | ename | sal |
    ±------±--------+
    | KING | 5000.00 |
    | FORD | 3000.00 |
    | SCOTT | 3000.00 |
    | JONES | 2975.00 |
    | BLAKE | 2850.00 |
    ±------±--------+
    mysql> select ename,sal from emp order by sal desc limit 5;
    ±------±--------+
    | ename | sal |
    ±------±--------+
    | KING | 5000.00 |
    | FORD | 3000.00 |
    | SCOTT | 3000.00 |
    | JONES | 2975.00 |
    | BLAKE | 2850.00 |
    ±------±--------+’
    10.取得薪水最高的第六到第十名员工
    mysql> select ename,sal from emp order by sal desc limit 5,5;
    //sal最高的6-10
    ±-------±--------+
    | ename | sal |
    ±-------±--------+
    | CLARK | 2450.00 |
    | ALLEN | 1600.00 |
    | TURNER | 1500.00 |
    | MILLER | 1300.00 |
    | MARTIN | 1250.00 |
    ±-------±--------+
    5 rows in set (0.00 sec)
    (5,5+5)

    任务93:085 083-34道作业题.flv

    11.取得最后入职的5员工
    日期也可以降序,升序
    mysql> select ename,hiredate from emp order by hiredate desc limit 5;
    任务94:086 084-34道作业题.flv

    12、取得每个薪水等级有多少员工
    分组count
    第一步:找出每个员工的薪水等级
    mysql> select e.ename,e.sal, s.grade
    -> from
    -> emp e
    -> join salgrade s
    -> on e.sal between s.losal and s.hisal;
    ±-------±--------±------+
    | ename | sal | grade |
    ±-------±--------±------+
    | SMITH | 800.00 | 1 |
    | ALLEN | 1600.00 | 3 |
    | WARD | 1250.00 | 2 |
    | JONES | 2975.00 | 4 |
    | MARTIN | 1250.00 | 2 |
    | BLAKE | 2850.00 | 4 |
    | CLARK | 2450.00 | 4 |
    | SCOTT | 3000.00 | 4 |
    | KING | 5000.00 | 5 |
    | TURNER | 1500.00 | 3 |
    | ADAMS | 1100.00 | 1 |
    | JAMES | 950.00 | 1 |
    | FORD | 3000.00 | 4 |
    | MILLER | 1300.00 | 2 |
    ±-------±--------±------+
    第二步:继续按照grade分组统计数量
    mysql> select * from salgrade;
    ±------±------±------+
    | GRADE | LOSAL | HISAL |
    ±------±------±------+
    | 1 | 700 | 1200 |
    | 2 | 1201 | 1400 |
    | 3 | 1401 | 2000 |
    | 4 | 2001 | 3000 |
    | 5 | 3001 | 9999 |
    ±------±------±------+
    5 rows in set (0.00 sec)

    Select s.grade, count()
    From emp e
    Join salgrade s
    On e.sal between s.losal and s.hisal
    Group by
    S.grade;
    mysql> select s.grade,count(
    ) from emp e join salgrade s on e.sal between s.losal and s.hisal
    -> group by s.grade;
    ±------±---------+
    | grade | count() |
    ±------±---------+
    | 1 | 3 |
    | 2 | 3 |
    | 3 | 2 |
    | 4 | 5 |
    | 5 | 1 |
    ±------±---------+
    5 rows in set (0.00 sec)
    任务95:087 085-34道作业题
    13.13、面试题:
    有 3 个表 S(学生表),C(课程表),SC(学生选课表)
    S(SNO,SNAME)代表(学号,姓名)
    C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
    SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)
    问题:
    1,找出没选过“黎明”老师的所有学生姓名。
    2,列出 2 门以上(含2 门)不及格学生姓名及平均成绩。
    3,即学过 1 号课程又学过 2 号课所有学生的姓名。
    mysql> select e.ename ‘员工’,m.ename ‘领导’
    from emp a
    join emp b
    On m.mgr=e.ename;
    14、列出所有员工及领导的姓名
    mysql> select e.ename ‘员工’, m.ename ‘领导’
    -> from emp e
    -> join emp m
    -> on
    -> m.mgr=e.empno;
    ±------±-------+
    | 员工 | 领导 |
    ±------±-------+
    | FORD | SMITH |
    | BLAKE | ALLEN |
    | BLAKE | WARD |
    | KING | JONES |
    | BLAKE | MARTIN |
    | KING | BLAKE |
    | KING | CLARK |
    | JONES | SCOTT |
    | BLAKE | TURNER |
    | SCOTT | ADAMS |
    | BLAKE | JAMES |
    | JONES | FORD |
    | CLARK | MILLER |
    ±------±-------+
    13 rows in set (0.01 sec)
    15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
    Emp a 员工表
    Emp b 领导表
    A.hiredate< b.hirdate and a.mgr=b.empno
    mysql> select a.ename ‘员工’, a.hiredate, b.ename ‘领导’, b.hiredate, d.dname
    -> from emp a
    -> join emp b
    -> on a.mgr=b.empno
    -> join dept d
    -> on a.deptno =d.deptno
    -> where a.hiredate <b.hiredate;
    ±------±-----------±------±-----------±-----------+
    | 员工 | hiredate | 领导 | hiredate | dname |
    ±------±-----------±------±-----------±-----------+
    | CLARK | 1981-06-09 | KING | 1981-11-17 | ACCOUNTING |
    | SMITH | 1980-12-17 | FORD | 1981-12-03 | RESEARCH |
    | JONES | 1981-04-02 | KING | 1981-11-17 | RESEARCH |
    | ALLEN | 1981-02-20 | BLAKE | 1981-05-01 | SALES |
    | WARD | 1981-02-22 | BLAKE | 1981-05-01 | SALES |
    | BLAKE | 1981-05-01 | KING | 1981-11-17 | SALES |
    ±------±-----------±------±-----------±-----------+
    16.任务96:088 086-34道作业题.flv
    Emp e dept d
    Select e.
    ,d.*
    From emp e
    Right join
    Dept d
    On e.deptno=d.deptno;
    16、 列出部门名称和这些部门的员工信息, 同时列出那些没有员工的部门

    mysql> select e.,d.
    -> from emp e
    -> right join
    -> dept d
    -> on e.deptno=d.deptno;
    ±------±-------±----------±-----±-----------±--------±--------±-------±-------±-----------±---------+
    | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | DEPTNO | DNAME | LOC |
    ±------±-------±----------±-----±-----------±--------±--------±-------±-------±-----------±---------+
    | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | 20 | RESEARCH | DALLAS |
    | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | 30 | SALES | CHICAGO |
    | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | 30 | SALES | CHICAGO |
    | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | 20 | RESEARCH | DALLAS |
    | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | 30 | SALES | CHICAGO |
    | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | 30 | SALES | CHICAGO |
    | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | 10 | ACCOUNTING | NEW YORK |
    | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | 20 | RESEARCH | DALLAS |
    | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | 10 | ACCOUNTING | NEW YORK |
    | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | 30 | SALES | CHICAGO |
    | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | 20 | RESEARCH | DALLAS |
    | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | 30 | SALES | CHICAGO |
    | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | 20 | RESEARCH | DALLAS |
    | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | 10 | ACCOUNTING | NEW YORK |
    | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 40 | OPERATIONS | BOSTON |
    ±------±-------±----------±-----±-----------±--------±--------±-------±-------±-----------±---------+
    17.列出至少有 5 个员工的所有部门
    mysql> select deptno
    -> from emp
    -> group by
    -> deptno
    -> having count() >=5;
    ±-------+
    | deptno |
    ±-------+
    | 20 |
    | 30 |
    ±-------+
    2 rows in set (0.00 sec)
    mysql> select deptno from emp
    -> group by
    -> deptno
    -> having count(
    ) >=5;
    ±-------+
    | deptno |
    ±-------+
    | 20 |
    | 30 |
    ±-------+
    18.列出薪金比“SMITH”多的所有员工信息
    mysql> select sal from emp where ename =‘SMITH’;
    ±-------+
    | sal |
    ±-------+
    | 800.00 |
    mysql> select ename,sal from emp where sal>(select sal from emp where ename =‘SMITH’);
    ±-------±--------+
    | ename | sal |
    ±-------±--------+
    | ALLEN | 1600.00 |
    | WARD | 1250.00 |
    | JONES | 2975.00 |
    | MARTIN | 1250.00 |
    | BLAKE | 2850.00 |
    | CLARK | 2450.00 |
    | SCOTT | 3000.00 |
    | KING | 5000.00 |
    | TURNER | 1500.00 |
    | ADAMS | 1100.00 |
    | JAMES | 950.00 |
    | FORD | 3000.00 |
    | MILLER | 1300.00 |
    ±-------±--------+

    19、列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数
    Select ename,job emp where job =”CLERK”;
    mysql> select ename,job from emp where job =‘Clerk’;
    ±-------±------+
    | ename | job |
    ±-------±------+
    | SMITH | CLERK |
    | ADAMS | CLERK |
    | JAMES | CLERK |
    | MILLER | CLERK |
    ±-------±------+
    4 rows in set (0.00 sec)
    mysql> select e.ename, e.job, d.dname
    -> from emp e
    -> join dept d
    -> on e.deptno=d.deptno
    -> where e.job =‘clerk’;
    ±-------±------±-----------+
    | ename | job | dname |
    ±-------±------±-----------+
    | MILLER | CLERK | ACCOUNTING |
    | SMITH | CLERK | RESEARCH |
    | ADAMS | CLERK | RESEARCH |
    | JAMES | CLERK | SALES |
    ±-------±------±-----------+
    mysql> select count() from emp group by deptno;
    ±---------+
    | count(
    ) |
    ±---------+
    | 3 |
    | 5 |
    | 6 |
    ±---------+
    //每个部门的人数
    mysql> select deptno,count() as deptcount from emp group by deptno;
    ±-------±----------+
    | deptno | deptcount |
    ±-------±----------+
    | 10 | 3 |
    | 20 | 5 |
    | 30 | 6 |
    ±-------±----------+
    任务97:089 087-34道作业题.flv
    20、列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数
    mysql> select job from emp group by job having min(sal) >1500;
    ±----------+
    | job |
    ±----------+
    | ANALYST |
    | MANAGER |
    | PRESIDENT |
    ±----------+
    mysql> select job,count(
    ) from emp group by job having min(sal)>1500;
    ±----------±---------+
    | job | count() |
    ±----------±---------+
    | ANALYST | 2 |
    | MANAGER | 3 |
    | PRESIDENT | 1 |
    ±----------±---------+
    mysql> Select job,count(
    ) from emp where sal<1500 group by job;
    ±---------±---------+
    | job | count() |
    ±---------±---------+
    | CLERK | 4 |
    | SALESMAN | 2 |
    ±---------±---------+
    mysql> select job,count(
    ) from emp where sal>1500 group by job;
    ±----------±---------+
    | job | count(*) |
    ±----------±---------+
    | ANALYST | 2 |
    | MANAGER | 3 |
    | PRESIDENT | 1 |
    | SALESMAN | 1 |
    ±----------±---------+
    任务98:090 088-34道作业题
    21.列出在部门"SALES"< 销售部> 工作的员工的姓名, 假定不知道销售部的部门编号.
    mysql> select deptno from dept where dname = ‘SALES’;
    ±-------+
    | deptno |
    ±-------+
    | 30 |
    ±-------+
    Select ename from emp where deptno=(select deptno from dept where dname =’SALES’);
    mysql> Select ename from emp where deptno=(select deptno from dept where dname =‘SALES’);
    ±-------+
    | ename |
    ±-------+
    | ALLEN |
    | WARD |
    | MARTIN |
    | BLAKE |
    | TURNER |
    | JAMES |
    ±-------+
    22.列出薪金高于公司平均薪金的所有员工, 所在部门, 上级领导, 雇员的工资等级.
    mysql> select
    -> e.ename ‘员工’,d.dname, l.ename ‘领导’,s.grade
    -> from emp e
    -> join
    -> dept d
    -> on e.deptno=d.deptno
    -> left join
    -> emp l
    -> on
    -> e.mgr=l.empno
    -> join
    -> salgrade s
    -> on e.sal between s.losal and s.hisal
    -> where e.sal>(select avg(sal) from emp);
    ±------±-----------±------±------+
    | 员工 | dname | 领导 | grade |
    ±------±-----------±------±------+
    | JONES | RESEARCH | KING | 4 |
    | BLAKE | SALES | KING | 4 |
    | CLARK | ACCOUNTING | KING | 4 |
    | SCOTT | RESEARCH | JONES | 4 |
    | KING | ACCOUNTING | NULL | 5 |
    | FORD | RESEARCH | JONES | 4 |
    ±------±-----------±------±------+
    6 rows in set (0.01 sec)
    23.任务99:091 089-34道作业题.flv
    mysql> select job from emp where ename =‘scott’;
    ±--------+
    | job |
    ±--------+
    | ANALYST |
    ±--------
    mysql> select
    -> e.ename,e.job,d.dname
    -> from
    -> emp e
    -> join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> where
    -> e.job=(select job from emp where ename =‘scott’)
    -> and
    -> e.ename <> ‘scott’;
    ±------±--------±---------+
    | ename | job | dname |
    ±------±--------±---------+
    | FORD | ANALYST | RESEARCH |
    ±------±--------±---------+
    mysql> select e.ename,e.job,d.dname
    -> from
    -> emp e
    -> join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> where
    -> e.job=(select job from emp where ename = ‘scott’)
    -> and e.ename <> ‘scott’;
    ±------±--------±---------+
    | ename | job | dname |
    ±------±--------±---------+
    | FORD | ANALYST | RESEARCH |
    ±------±--------±---------+

    24.列出薪金等于部门 30 中员工的薪金的其他员工的姓名和薪金.

    mysql> select ename,sal
    -> from
    -> emp
    -> where
    -> sal in(select distinct sal from emp where deptno=30)
    -> and deptno<>30;
    Empty set (0.00 sec)
    任务100:092 090-34道作业题.flv

    25、列出薪金高于在部门 30 工作的所有员工的薪金的员工姓名和薪金. 部门名称
    mysql> select e.ename,e.sal,d.dname
    -> from
    -> emp e
    -> join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> where e.sal >(select max(sal) from emp where deptno =30);
    ±------±--------±-----------+
    | ename | sal | dname |
    ±------±--------±-----------+
    | KING | 5000.00 | ACCOUNTING |
    | JONES | 2975.00 | RESEARCH |
    | SCOTT | 3000.00 | RESEARCH |
    | FORD | 3000.00 | RESEARCH |
    ±------±--------±-----------+
    26、列出在每个部门工作的员工数量, 平均工资和平均服务期限

    没有员工的部门,部门人数是0
    mysql> select d.*,count(e.ename), avg(e.sal)
    -> from emp e
    -> right join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> group by
    -> d.deptno,d.dname,d.loc;
    ±-------±-----------±---------±---------------±------------+
    | DEPTNO | DNAME | LOC | count(e.ename) | avg(e.sal) |
    ±-------±-----------±---------±---------------±------------+
    | 10 | ACCOUNTING | NEW YORK | 3 | 2916.666667 |
    | 20 | RESEARCH | DALLAS | 5 | 2175.000000 |
    | 30 | SALES | CHICAGO | 6 | 1566.666667 |
    | 40 | OPERATIONS | BOSTON | 0 | NULL |
    mysql> select
    -> d.deptno, count(e.ename),avg(e.sal)
    -> from
    -> emp e
    -> right join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> group by
    -> d.deptno;
    ±-------±---------------±------------+
    | deptno | count(e.ename) | avg(e.sal) |
    ±-------±---------------±------------+
    | 10 | 3 | 2916.666667 |
    | 20 | 5 | 2175.000000 |
    | 30 | 6 | 1566.666667 |
    | 40 | 0 | NULL |
    mysql> select d.deptno, count(e.ename),ifnull(avg(e.sal),0)
    -> from
    -> emp e
    -> right join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> group by
    -> d.deptno;
    ±-------±---------------±---------------------+
    | deptno | count(e.ename) | ifnull(avg(e.sal),0) |
    ±-------±---------------±---------------------+
    | 10 | 3 | 2916.666667 |
    | 20 | 5 | 2175.000000 |
    | 30 | 6 | 1566.666667 |
    | 40 | 0 | 0.000000 |
    ±-------±---------------±---------------------+
    4 rows in set (0.01 sec)
    当mysql当种怎么计算两个日期的”年差”,差了多少年?
    Timestampdiff(间隔类型,前一个日期,后一个日期)
    Timestampdiff(year,hiredate,now())
    间隔类型
    Second 秒 minute 分钟 hour小时
    Day天 week星期 month月 quarter 季度
    Year 年
    mysql> select timestampdiff(YEAR,hiredate,now()) from emp;
    ±-----------------------------------+
    | timestampdiff(YEAR,hiredate,now()) |
    ±-----------------------------------+
    | 40 |
    | 40 |
    | 40 |
    | 40 |
    | 40 |
    | 40 |
    | 40 |
    | 34 |
    | 40 |
    | 40 |
    | 34 |
    | 40 |
    | 40 |
    | 39 |
    任务101:093 091-34道作业题.flv
    27列出所有员工的姓名、部门名称和工资。

    mysql> select e.ename,d.dname,e.sal
    -> from
    -> emp e
    -> join
    -> dept d
    -> on
    -> e.deptno=d.deptno;
    ±-------±-----------±--------+
    | ename | dname | sal |
    ±-------±-----------±--------+
    | CLARK | ACCOUNTING | 2450.00 |
    | KING | ACCOUNTING | 5000.00 |
    | MILLER | ACCOUNTING | 1300.00 |
    | SMITH | RESEARCH | 800.00 |
    | JONES | RESEARCH | 2975.00 |
    | SCOTT | RESEARCH | 3000.00 |
    | ADAMS | RESEARCH | 1100.00 |
    | FORD | RESEARCH | 3000.00 |
    | ALLEN | SALES | 1600.00 |
    | WARD | SALES | 1250.00 |
    | MARTIN | SALES | 1250.00 |
    | BLAKE | SALES | 2850.00 |
    | TURNER | SALES | 1500.00 |
    | JAMES | SALES | 950.00 |
    ±-------±-----------±--------+
    任务102:094 092-34道作业题.flv
    28、列出所有部门的详细信息和人数

    Select xx
    select
    D.deptno,d.dname,d.loc,count(e.ename)
    From emp e
    Right join
    Dept d
    On
    E.deptno=d.deptno
    Group by
    D.deptno,d.dname,d.loc;
    111

    mysql> select
    -> D.deptno,d.dname,d.loc,count(e.ename)
    -> From emp e
    -> Right join
    -> Dept d
    -> On
    -> E.deptno=d.deptno

    -> Group by
    -> D.deptno,d.dname,d.loc;
    

    ±-------±-----------±---------±---------------+
    | deptno | dname | loc | count(e.ename) |
    ±-------±-----------±---------±---------------+
    | 10 | ACCOUNTING | NEW YORK | 3 |
    | 20 | RESEARCH | DALLAS | 5 |
    | 30 | SALES | CHICAGO | 6 |
    | 40 | OPERATIONS | BOSTON | 0 |
    ±-------±-----------±---------±---------------+
    4 rows in set (0.00 sec)

    29、列出各种工作的最低工资及从事此工作的雇员姓名

    mysql> select job,min(sal)
    -> from
    -> emp
    -> group by
    -> job;
    ±----------±---------+
    | job | min(sal) |
    ±----------±---------+
    | ANALYST | 3000.00 |
    | CLERK | 800.00 |
    | MANAGER | 2450.00 |
    | PRESIDENT | 5000.00 |
    | SALESMAN | 1250.00 |
    ±----------±---------+
    5 rows in set (0.00 sec)
    Emp e和以上t连接
    Select e.ename,t.*
    From
    Emp e
    Join
    (select job,min(sal) as minsal as minsal from emp group by job) T
    On
    E.job=t.job and e.sal=t.minsal;
    mysql> select e.ename,t.*
    -> from
    -> emp e
    -> join
    -> (select job,min(sal) as minsal
    -> from
    -> emp
    -> group by
    -> job) t
    -> on e.job=t.job and e.sal=t.minsal;
    ±-------±----------±--------+
    | ename | job | minsal |
    ±-------±----------±--------+
    | SMITH | CLERK | 800.00 |
    | WARD | SALESMAN | 1250.00 |
    | MARTIN | SALESMAN | 1250.00 |
    | CLARK | MANAGER | 2450.00 |
    | SCOTT | ANALYST | 3000.00 |
    | KING | PRESIDENT | 5000.00 |
    | FORD | ANALYST | 3000.00 |

    任务103:095 093-34道作业题.flv
    30、列出各个部门的 MANAGER( 领导) 的最低薪金
    mysql> select deptno,min(sal)
    -> from emp
    -> where
    -> job=‘manager’
    -> group by
    -> deptno;
    ±-------±---------+
    | deptno | min(sal) |
    ±-------±---------+
    | 10 | 2450.00 |
    | 20 | 2975.00 |
    | 30 | 2850.00 |
    31.列出所有员工的 年工资, 按 年薪从低到高排序
    mysql> select
    -> d.deptno,count(e.ename) ecount,ifnull(avg(e.sal),0) as avgsal, ifnull(avg(timestampdiff(YEAR,hiredate,now())),0) as avgservicetime
    -> from
    -> emp e
    -> right join
    -> dept d
    -> on
    -> e.deptno=d.deptno
    -> group by
    -> d.deptno;
    ±-------±-------±------------±---------------+
    | deptno | ecount | avgsal | avgservicetime |
    ±-------±-------±------------±---------------+
    | 10 | 3 | 2916.666667 | 39.6667 |
    | 20 | 5 | 2175.000000 | 37.6000 |
    | 30 | 6 | 1566.666667 | 40.0000 |
    | 40 | 0 | 0.000000 | 0.0000 |
    ±-------±-------±------------±---------------+
    32.列出所有员工的 年工资, 按 年薪从低到高排序
    mysql> select
    -> ename,(sal + ifnull(comm,0)) * 12 as yearsal
    -> from
    -> emp
    -> order by
    -> yearsal asc;
    ±-------±---------+
    | ename | yearsal |
    ±-------±---------+
    | SMITH | 9600.00 |
    | JAMES | 11400.00 |
    | ADAMS | 13200.00 |
    | MILLER | 15600.00 |
    | TURNER | 18000.00 |
    | WARD | 21000.00 |
    | ALLEN | 22800.00 |
    | CLARK | 29400.00 |
    | MARTIN | 31800.00 |
    | BLAKE | 34200.00 |
    | JONES | 35700.00 |
    | FORD | 36000.00 |
    | SCOTT | 36000.00 |
    | KING | 60000.00 |
    ±-------±---------+
    31、求出员工领导的薪水超过3000的员工名称与领导
    mysql> select
    -> a.ename ‘员工’,b.ename ‘领导’
    -> from
    -> emp a
    -> join
    -> emp b
    -> on
    -> a.mgr = b.empno
    -> where
    -> b.sal > 3000;
    ±------±-----+
    | 员工 | 领导 |
    ±------±-----+
    | JONES | KING |
    | BLAKE | KING |
    | CLARK | KING |
    33.求出部门名称中, 带’S’字符的部门员工的工资合计、部门人数
    mysql> select
    -> d.deptno,d.dname,d.loc,count(e.ename),ifnull(sum(e.sal),0) as sumsal
    -> from
    -> emp e
    -> right join
    -> dept d
    -> on
    -> e.deptno = d.deptno
    -> where
    -> d.dname like ‘%S%’
    -> group by
    -> d.deptno,d.dname,d.loc;
    ±-------±-----------±--------±---------------±---------+
    | deptno | dname | loc | count(e.ename) | sumsal |
    ±-------±-----------±--------±---------------±---------+
    | 20 | RESEARCH | DALLAS | 5 | 10875.00 |
    | 30 | SALES | CHICAGO | 6 | 9400.00 |
    | 40 | OPERATIONS | BOSTON | 0 | 0.00 |
    ±-------±-----------±--------±---------------±---------+
    34、给任职日期超过 30 年的员工加薪 10%.
    mysql> update emp set sal =sal * 1.1 where timestampdiff(YEAR,hiredate,now()) >30;
    Query OK, 14 rows affected (0.00 sec)
    Rows matched: 14 Changed: 14 Warnings: 0

    展开全文
  • 数据库原理 范式例题

    千次阅读 2021-04-26 10:30:33
    定义 2NF 3NF BCNF 例题 ...Y(X1,X2,X3,X4)Y(X1,X2,X3,X4)Y...写出 候选码 和 所属范式 (1)分析 ∵\because∵ X2→X4X2\rightarrow X4X2→X4 ∴\therefore∴ (X1,X2)→X4(X1,X2) \rightarrow X4(X1,X2)→X4 又 ∵
  • 数据库范式的经典例题,what are you 弄啥嘞?

    万次阅读 多人点赞 2020-04-14 00:19:23
    设关系模式R属于第一范式,若在R中消除了部分函数依赖,则R至少属于( )。 解析:第二范式是完全依赖,消除了部分依赖。 若在R中消除了部分函数依赖,则至少属于第二范式。 设关系模式R{A,B,C,D,E},其上函数依赖集...
  • mysql 数据库范式

    2017-02-22 19:02:19
    数据库范式(Normal Form): 第一范式(1NF):每列数据都必须是单一不可分割数据项,强调的是列的原子性,即列不能够再分成其他几列(属性不可分)。  第二范式(2NF):首先是 1NF,另外包含两...
  • title: 数据库三大范式详解实例图文教程 date: 2021-09-04 20:29:31 tags: 数据库 MySQL categories: 数据库 cover: https://cover.png feature: false 数据库三大范式详解图文教程 需要用到的例表: 1. 名词...
  • 数据库范式概念

    2021-06-01 10:15:48
    范式1.第一范式(1NF)2.第二范式(2NF)3.第三范式(3NF)总结 1.第一范式(1NF) 每一列都是不可分割的原子数据项 2.第二范式(2NF) 在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的...
  • mysql数据库设计规范之数据库设计三范式
  • 数据库——范式判断实例

    千次阅读 多人点赞 2020-01-03 14:46:03
    看了上篇CSDN的小伙伴们,这篇我们来具体做几个题目练习一下 明确俩个概念: ⑴ 平凡函数依赖: 当关系中属性集合Y是属性集合X的子集时,存在函数依赖X–>Y,则称这种函数依赖为平凡函数依赖; ⑵ 非平凡函数...
  • 数据库关系运算范式分解例题

    千次阅读 2020-11-21 18:26:06
    一、 1.假设A能推B:那么每个A1所对应的B的属性值应该一样,由于B的第一行和第三行分别是B1和B3,故A不能推B。 2.假设A能推C:那么每个A1所对应的C的属性值应该一样,由于C的第一行和第三行分别是C1和C2,故A不能推C...
  • 数据库函数依赖与最高范式判断练习 (1) PLAYER = ( pnum, team, name, position, address ) pnum → team pnum → name pnum → position pnum → address team → address pnum → team, pnum → name, pnum → ...
  • 数据库原理详解,拯救你的期末考试四部曲【三】:第六章 第六章 一、关系模式 ① 关系模式的组成 R(U,D,DOM,F) R-关系名 U-一组属性 DOM-属性到域的映射 F-属性组U的一组数据依赖 ② 本章处理 R<U,F> 当且仅...
  • 数据库设计的三范式超详细详解

    千次阅读 2021-02-20 12:04:42
    目录 写在前面 第一范式(1NF):原子性(存储的数据应该具有“不可再分性”) 第二范式(2NF):唯一性...范式,就是规范,就是指设计数据库需要(应该)遵循的原则。 每个范式,都是用来规定某种结构或数据要求—
  • 16-数据表设计-第一范式1NF 1、举例1(student2数据表) ...1、新建一个查询用的数据库:selectTest 2、建立数据表(学生表、课程表、成绩表、教师表) 2.1、学生表(student) 2.2、教师表(teacher)
  • 数据库练习

    千次阅读 2020-01-19 20:38:52
    数据库存储引擎是数据库底层软件组织,进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能, MySQL的核心就是存储引擎。 特点 InnoDB MyISAM Memory ...
  • 数据库范式设计习题

    千次阅读 2021-07-27 16:09:28
    现在要建立关于系、学生、班级、学会的数据库,关系模式为: 班(班号,专业名,系名,班人数,入学年份) 学生(学号,姓名,出生日期,系名,班号,宿舍区) 系(系号,系名,办公室,系人数) 学会(学会名,成立...
  • 一、数据库有哪些范式? 我们在设计关系型数据库模型的时候,需要对关系表各个字段之间联系的合理化程度进行定义,这就有了不同等级的规范要求,这些规范要求被称为范式(NF)。你可以把范式理解为,一张关系表的...
  • 3 假设某商业集团数据库中有一关系模式R如下: R(商店编号、商品编号、商品库存数量、部门编号、部门负责人) 如果规定: 每个商店的每种商品只在该商店的一个部门销售。 每个商店的每个部门只有一个部分负责人 每个...
  • 2如果将关系模式R分解为 R1(ABE) R2(BCD) 指出关系模式R1和R2的码并说明该关系模式最高满足第几范式(在1NFBCNF之内) ? 3将关系模式R分解到BCNF 解 1不是2范式因为C部分依赖于码A#B# 2R1的码为A#B#R2的码为B# R1最
  • 这是我积累多年的题目,跟大家一起分享,是有关自考数据库系统原理第三范式题目汇总
  • 关于数据库的考题 练习题 很有帮助 范式分解的例题 E-R图
  • 数据库表的约束 概念 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 分类 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign key 作用 对表中的数据进行限制,保证数据...
  • 数据库练习

    2021-12-23 11:41:56
    数据库习题复习
  • 以上都不是 2 关系模式 R 中的属性全部是主属性则 R 的最高范式必定是 B A. 2NF B. 3NF C. BCNF D. 4NF 3 下列哪个不是数据库系统必须提供的数据控制功能 B A. 安全性 B. 可移植性 C. 完整性 D. 并发控制 4 若关系 ...
  • 依赖又无损连接地分解成第三范式,分解正确 的是 A.p={R1(A2,A3, A5), R2(A1,A3,A6), R3(A2,A4,A6) } B.p={R1(A2,A3, A5), R2(A1,A3,A6), R3(A2,A4,A6),R4(A1,A2) } C.p= {R1(A2,A3.A5), R2(A1,A2,A3,A
  • 数据库的完整性的练习,作为数据库范式的一部分,数据库的完整性练习非常重要。
  • 数据库第六章关系数据理论习题及解析。1. 理解并给出下列术语的定义 函数依赖、部分函数依赖、完全函数依赖、传递依赖、候选码、主码、外码、全码(all-key)、1NF、2NF、3NF、BCNF。2. 有关系模式R(A,B,C,D,E),...
  • 数据库操作练习

    千次阅读 2022-03-23 18:57:13
     通过内连接查询员工名称及其所在的部门名称 什么是数据库规范化,有哪些常见的数据库范式? 答案:数据库规范化是一种数据库设计的方法,用于有效地组织数据,减少数据的冗余和相互之间的依赖,增加数据的一致性。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,284
精华内容 2,113
关键字:

数据库范式练习