E1 基于Mysql的SQL应用

E1 基于Mysql的SQL应用

  • 实验目的:完成对基本表、视图创建、删除、数据插入、查询、更新和删除等数据管理工作。

  • Group 1: 用命令“Select”查询相关数据:

    • 1、检索所有的职工姓名与年薪

      Select ename,12*sal from emp;

    • 2、检索所有的工作和相应的部门编号

      Select distinct job,deptno from emp

    • 3、检索工作是salesman的员工姓名;

      select ename from emp where job =‘salesmen’;

    • 4、检索员工津贴comm为null或comm小于300的员工姓名和津贴值;

      select ename, comm from emp where comm is null or comm < 300;

    • 5、检索所有职员的姓名和所在部门名称;

      select emp.ename, dept.Dname from emp, dept where
      emp.deptno=dept.deptno;

    • 6、检索所有员工及其相关领导的姓名。

      select e.ename, m.ename from emp e, emp m where m.empno = e.mgr;

    • 7、查询聘用日期早于他们的领导的雇员姓名。

      select ename from emp e where hiredate<(select hiredate from emp
      where empno=e.mgr);

    • 8、检索在任何位置有字母“A”的员工姓名;

      select ename from emp where ename like ‘%A%’;

    • 9、检索名字没有字母串‘%R’的员工姓名;

      select ename from emp where ename not like ‘%%R%’;

    • 10、检索所有员工姓名的前三个字母;

      select substr(ename,1,3) from emp;

    • 11、查询部门2所有的经理、部门3所有clerks以及所有其他所有工资超过2000元的员工姓名;

      select ename from emp where deptno = 2 and job = ‘manager’ or deptno =
      3 and job = ‘clerk’ or sal > 2000;

    • 12、查询所有manager岗位而非3号部门的员工姓名;

      select ename from emp where job = ‘manager’ except deptno = 3;

    • 13、检索所有员工的姓名、职位和工资,按职位降序排列;

      select ename, job, sal from emp order by job desc;

    • 14、检索所有员工的姓名、年收入(sal+comm) * 12(要求重命名),按升序显示;

      select ename,(sal+comm) * 12 as annual_salry from emp order by
      annual_salry

    • 15、检索1号部门所有员工的人数和平均年薪;

      select count(*), avg(sal) from emp where emp.deptno=1;

    • 16、检索每个部门的名称和人数。

      select dname, count(*) from emp, dept where dept.deptno = emp.deptno
      group by emp.deptno;

    • 17、检索每一种工作的最低工资和工作。

      select min(sal), job from emp group by job;

    • 18、查询各个部门经理职位(manager)的员工最低工资。

      select min(sal), deptno from emp where job = ‘manager’ group by
      deptno;

    • 19、查询各部门员工人数、平均工资、平均参加工作的天数;

      select dname, count(*), avg(sal), avg(timestampdiff(day, hiredate,
      now())) from emp, dept where dept.deptno = emp.deptno group by
      emp.deptno;

    • 20、检索最低工资在1500元的工作岗位;

      select job, min(sal) from emp group by job having min(sal) > 1500;

    • 21、检索至少有两个人的部门名称和人数;

      select dname, count() from emp, dept where dept.deptno = emp.deptno
      group by emp.deptno having count(
      ) > 2;

    • 22、检索与SCOTT的工作岗位相同的所有员工的姓名;

      select ename from emp where job=(select job from emp where ename =
      ‘scott’) and ename<>’SCOTT’;

    • 23、检索所有工资高于Smith的工资的员工姓名和所在部门;

      select ename, Dname from emp, dept where sal > (select sal from emp
      where ename = ‘Smith’) and emp.deptno = dept.deptno;

    • 24、检索所有工资高于整个公司平均工资的员工的姓名和工资;

      select ename, sal from emp where sal > (select avg(sal) from emp);

    • 25、检索所有工资高于1号部门所有职工工资水平的员工姓名和工资(>any或>all);

      select ename, sal from emp where sal >all(select avg(sal) from emp
      where deptno=1);

    • 26、检索所有工资高于1号部门某职工工资水平的员工姓名和工资(>any或>all);

      select ename, sal from emp where sal >any(select avg(sal) from emp
      where deptno=1);

    • 27、查询与3号部门某个员工工作岗位相同的员工姓名和工资;

      select ename, sal from emp where job in (select job from emp where
      deptno = 3);

    • 28、检索所有部门名称和所有员工,包括那些没有任何员工的部门。

      select dname,ename from dept left join emp on dept.deptno =
      emp.deptno;

    • 29、创建一个包括1号部门员工所有信息的视图。

      Create view view_1 as select * from emp where emp.deptno=1;

  • Group 2请使用你的账户创建两个表,包括属性、数据类型、主键和外键。

    ddept (deptno, dname loc) deptno:integer;dname: varchar (20); loc:
    varchar (30); primary key:deptno; eemp (empno,
    ename,job,hiredate,salary,comm,deptno) empno: integer;ename:
    varchar(20);job:varchar(20),hiredate:datetime, salary:double;
    comm:double;deptno: integer, not null; Primary key:empno;forign
    keys:deptno reference ddept(deptno),mgr reference EEmp(empno)。
    1.create table ddept(deptno integer, dname varchar(20), loc varchar(30), primary key(deptno));
    2.create table eemp(empno integer, ename varchar(20), job varchar(20), hiredate datetime, salary double, mgr int, comm double, deptno integer
    not null, primary key(empno), foreign key(deptno) references
    ddept(deptno), foreign key(mgr) references EEmp(empno));

  • Group 3: 完成以下操作:

    • 1.、通过alter table添加一个check约束(comm在1和3000之间);

      alter table emp add check(comm between 1 and 3000);

    • 2、 向表eemp中插入至少5条员工记录;

      insert into eemp values(1, ‘a’, ‘Manager’, ‘2019-3-12’, 5000, null,
      500, 1); insert into eemp values(2, ‘b’, ‘Office’, ‘2019-3-11’, 4000,
      null, 400, 2); insert into eemp values(3, ‘c’, ‘Finance’, ‘2019-3-10’,
      3000, null, 300, 3); insert into eemp values(4, ‘d’, ‘Factory’,
      ‘2019-3-9’, 2000, null, 200, 4); insert into eemp values(5, ‘e’,
      ‘Market’, ‘2019-3-8’, 1000, null, 100, 5);

    • 3、从eemp中删除名为“SMITH”的记录;

      delete from eemp where ename = ‘smith’;

    • 4、创建部门研究信息视图,包括empno、ename、salary和comm。

      create index researchindex on eemp(empno, ename, salary, comm);

    • 5、将所有员工的工资提高20%。

      update eemp set salary = salary * 1.2;

    • 6、将1号部门的职工工资提高20%,其他提高10…%;

      update emp set sal=case when deptno=1 then sal*1.2 else sal *1.1 end;

    • 7、将2号部门员工的信息写入eemp。

      Insert into eemp select * from emp;

  • Group 4: 综合设计
    根据某个应用的需求,创建一个新的数据库。其中至少包括3个表,每个表至少定义4个合理的属性,分别具有适合的数据类型,并确定表的主键。然后,根据您设计的数据库,将每个表中至少插入4行数据。

    create table stu(name varchar(5), number int, age int, classno int,
    primary key(number)); create table score(number int, math int, chinese
    int, english int, primary key(number)); create table message(classno
    int, classname varchar(10), location varchar(10), persons int);

    insert into stu values(‘a’, 1, 17, 1); insert into stu values(‘b’, 2,
    18, 2); insert into stu values(‘c’, 3, 19, 3); insert into stu
    values(‘d’, 4, 19, 4);

    insert into score values(1, 80, 80, 80); insert into score values(2,
    60, 70, 80); insert into score values(3, 90, 90, 90); insert into
    score values(4, 30, 40, 20);

    insert into message values(1, ‘一班’, ‘东边’, 5); insert into message
    values(2, ‘二班’, ‘西边’, 10); insert into message values(3, ‘三班’, ‘南边’,
    8); insert into message values(4, ‘四班’, ‘北边’, 6);

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值