生活不止眼前的苟且,还有诗和远方。

请根据给出的数据库表结构来回答相应问题:
DEPT (DEPTNO INT, DNAME VARCHAR(14),LOC VARCHAR(13));
EMP (EMPNO INT,ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT, HIREDATE DATE,
SAL FLOAT, COMM FLOAT, DEPTNO INT);
BONUS (ENAME VARCHAR(10), JOB VARCHAR(9), SAL INT, COMM INT);
SALGRADE ( GRADE INT, LOSAL INT, HISAL INT);
其中表中包含如下数据:

DEPT表:

EMP表:

SALGRADE表:

BONUS表: 无数据
根据上面描述完成下面问题:
(注意:注意保存脚本,尤其是DDL和DML,以便进行数据还原)
DDL
1.写出上述表的建表语句。此外,在DEPT上创建名为”PK_DEPT”的主键约束,在EMP表上创建名为” PK_EMP”的主键约束以及指向表DEPT的外键约束” FK_DEPTNO”。

命令:
create table DEPT (DEPTNO INT,
DNAME VARCHAR(14),
LOC VARCHAR(13),
constraint pk_dept primary key (DEPTNO));

create table EMP (EMPNO INT,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR INT,
HIREDATE DATETIME,
SAL FLOAT,
COMM FLOAT,
DEPTNO INT,
constraint pk_emp primary key (EMPNO),
constraint fk_deptno foreign key (deptno) references dept(deptno));

create table BONUS(ENAME VARCHAR(10),
JOB VARCHAR(9),
SAL INT,
COMM INT);
create table SALGRADE ( GRADE INT,
LOSAL INT,
HISAL INT);

DML
2.给出相应的INSERT语句来完成题中给出数据的插入。

命令:
insert into dept values(10, 'accounting', 'New York');
insert into dept values(20, 'research', 'Dallas');
insert into dept values(30, 'sales', 'Chicago');
insert into dept values(40, 'operations', 'Boston');

insert into emp values(7369, 'SMITH', 'CLERK', 7902, '1980-12-17 0:00:00', 800, NULL, 20);
insert into emp values(7499, 'ALLEN', 'SALESMAN', 7698, '1981-2-20 0:00:00', 1600, 300, 30);
insert into emp values(7521, 'WARD', 'SALESMAN', 7698, '1981-2-22 0:00:00', 1250, 500, 30);
insert into emp values(7566, 'JONES', 'MANAGER', 7839, '1981-4-2 0:00:00', 2975, NULL, 20);
insert into emp values(7654, 'MARTIN', 'SALESMAN', 7698, '1981-9-28 0:00:00', 1250, 1400, 30);
insert into emp values(7698, 'BLAKE', 'MANAGER', 7839, '1981-5-1 0:00:00', 2850, NULL, 30);
insert into emp values(7782, 'CLARK', 'MANAGER', 7839, '1981-6-9 0:00:00', 2450, NULL, 10);
insert into emp values(7788, 'SCOTT', 'ANALYST', 7566, '1987-6-13 0:00:00', 3000, NULL, 20);
insert into emp values(7839, 'KING', 'PRESIDENT', NULL, '1981-11-17 0:00:00', 5000, NULL, 10);
insert into emp values(7844, 'TURN', 'SALESMAN', 7698, '1981-9-8 0:00:00', 1500, 0, 30);
insert into emp values(7876, 'ADAMS', 'CLERK', 7788, '1987-6-13 0:00:00', 1100, NULL, 20);
insert into emp values(7900, 'JAMES', 'CLERK', 7698, '1981-12-3 0:00:00', 950, NULL, 30);
insert into emp values(7934, 'MILLER', 'CLERK', 7782, '1982-1-23 0:00:00', 1300, NULL, 10);

INSERT INTO SALGRADE VALUES(1, 700, 1200);
INSERT INTO SALGRADE VALUES(2, 1201, 1400);
INSERT INTO SALGRADE VALUES(3, 1401, 2000);
INSERT INTO SALGRADE VALUES(4, 2001, 3000);
INSERT INTO SALGRADE VALUES(5, 3001, 9999);

3.将所有员工的工资上浮10%.然后查询员工姓名、薪水、补助。(emp.sal为工资,emp.comm为补助)

命令:
UPDATE EMP SET SAL = SAL + SAL * 0.1;
SELECT ENAME, SAL, COMM FROM EMP;
结果:

单表查询
4.查看EMP表中部门号为10的员工的姓名,职位,参加工作时间,工资。

命令:
SELECT ENAME, JOB, HIREDATE, SAL FROM EMP WHERE DEPTNO = 10;
结果:

5.查所有已有的职位,要求去除重复项。

命令:
SELECT DISTINCT JOB FROM EMP;
结果:

6.计算每个员工的年薪,并取列名为Salary of Year(emp.sal为员工的月薪),要求输出员工姓名,年薪。

命令:
SELECT ENAME ename, SAL*12 'Salary Of Year' FROM EMP;
结果:

7.查询每个员工每个月拿到的总金额(emp.sal为工资,emp.comm为补助)。(提示:isnull(ex1,ex2)表示如果ex1为空则返回ex2)

命令:
SELECT ENAME ename, isnull(comm, 0)+ sal total FROM EMP;
结果:

8.显示职位是主管(manager)的员工的姓名,工资。

命令:
SELECT ENAME, SAL FROM EMP WHERE JOB = 'MANAGER';
结果:

9.显示第3个字符为大写O的所有员工的姓名及工资。

命令:
SELECT ENAME, SAL FROM EMP WHERE ENAME like '__O%';

结果:

10.显示职位为销售员(SALESMAN)或主管(MANAGER)的员工的姓名,工资,职位。

命令:
select ename, sal, job from emp where job = 'SALESMAN' or job = 'MANAGER';
结果:

11.显示所有没有补助的员工的姓名。

命令:
select ename from emp where comm is null;
结果:

12.显示有补助的员工的姓名,工资,补助。

命令:
select ename, sal, comm from emp where comm is not null;
结果:

13.排序显示所有员工的姓名,工资(按工资降序方式)。

命令:
select ename, sal from emp order by sal desc;
结果:

14.显示员工的最高工资和最低工资。

命令:
select max(sal) 最高工资, min(sal) 最低工资from emp;
结果:

15.显示所有员工的平均工资和总计工资。

命令:
select avg(sal) 平均工资, sum(sal) 总计工资from emp;
结果:

16.显示补助在员工中的发放比例、即有多少比例的员工有补助。(此题需注意两个问题:1.select语句中进行除法如何保留小数点后数据。2.count函数如何处理null型数据。)

命令:
select count(comm) * 1.0 / count(ename) from emp;
结果:

聚合查询
17.显示每种职业的平均工资。

命令:
select job, avg(sal) average from emp group by job;
结果:

18.显示每个部门每种岗位的平均工资和最高工资。

命令:
select deptno, job, avg(sal) average, max(sal) max from emp group by deptno, job;
结果:

19.显示平均工资低于2500的部门号,平均工资及最高工资。

命令:
select deptno, avg(sal) average, max(sal) max from emp group by deptno having avg(sal) < 2500;
结果:

20.上一条语句以平均工资升序排序。

命令:
select deptno, avg(sal) average, max(sal) max from emp group by deptno having avg(sal) < 2500 order by avg(sal) asc;

结果:

多表查询
21.显示工资高于2500或岗位为MANAGER的所有员工的姓名,工资,职位,和部门号。

命令:select ename, sal, job, deptno from emp where sal > 2500 or job = 'MANAGER';
结果:

22.排序显示所有员工的姓名,部门号,工资(以部门号升序,工资降序,雇用日期升序显示)。

命令:select ename, deptno, sal from emp order by deptno asc, sal desc, hiredate asc;
结果:

23.采用自然连接的原理显示部门名以及相应的员工姓名。(Sql server不支持NATURAL JOIN语法。)
命令:select dname, ename from emp, dept where emp.deptno = dept.deptno;
结果:

24.查询SCOTT的上级领导的姓名。

命令:select leader.ename from emp, emp leader where emp.ename = 'SCOTT' and emp.mgr = leader.empno;

结果:

25.显示部门的部门名称,员工名即使部门没有员工也显示部门名称。

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

结果:

子查询
26.显示所有员工的名称、工资以及工资级别。

命令:select ename, sal, grade from emp, salgrade where emp.sal between salgrade.losal and salgrade.hisal;

结果:

27.显示ACCOUNTING部门所有员工的名称,工资。

命令:select ename, sal from emp, dept where emp.deptno = dept.deptno and dept.dname = 'ACCOUNTING';
结果:

28.显示职位属于10号部门所提供职位范围的员工的姓名,职位,工资,部门号。

命令:select ename, job, sal, deptno from emp where job in (select job from emp where deptno = 10);
结果:

29.显示在所有员工用中高于30号部门中任一个员工工资的员工的姓名,工资和部门号。

命令:select ename, sal, deptno from emp where sal > all (select sal from emp where deptno = 30);
结果:

集合查询
30.显示工资高于2500或职位为MANAGER的员工的姓名,工资和职位(采用UNION语法实现)。

命令:select ename, sal, job from emp where sal > 2500
union
select ename, sal, job from emp where job = 'MANAGER';
结果:

31.显示工资高于2500且职位为MANAGER的员工的姓名,工资和职位(采用INTERSECT语法实现)。

命令:select ename, sal, job from emp where sal > 2500
intersect
select ename, sal, job from emp where job = 'MANAGER';
结果:

32.显示工资高于2500但职位不是MANAGER的员工的姓名,工资和职位(采用MINUS语法实现)。

命令:select ename, sal, job from emp where sal > 2500
EXCEPT
select ename, sal, job from emp where job = 'MANAGER';
结果:

mysql新手进阶01的更多相关文章

  1. mysql新手进阶03

    当年忠贞为国酬,何曾怕断头? 如今天下红遍,江山靠谁守? 业未就,身躯倦,鬓已秋. 你我之辈,忍将夙愿,付与东流? 数据库结构如下: 仓库(仓库号, 城市, 面积) 订购单(职工号, 供应商号, 订购 ...

  2. mysql新手进阶02

    云想衣裳花想容,春风拂槛露华浓. 若非群玉山头见,会向瑶台月下逢. 现在有一教学管理系统,具体的关系模式如下: Student (no, name, sex, birthday, class) Tea ...

  3. MYSQL(进阶篇)——一篇文章带你深入掌握MYSQL

    MYSQL(进阶篇)--一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL 温馨提醒:该文章大 ...

  4. SQL Server 进阶 01 数据库的设计

    SQL Server 进阶 01 数据库的设计 本篇目录 课程内容回顾及介绍 为什么需要规范的数据库设计 设计数据库的步骤 绘制E-R(实体-关系)图 实体-关系模型 如何将E-R图转换为表 数据规范 ...

  5. mysql 开发进阶篇系列 55 权限与安全(安全事项 )

    一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...

  6. mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)

    一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...

  7. mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)

    一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...

  8. mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)

    一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...

  9. mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)

    1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...

随机推荐

  1. 掺合模式(Mixin)

    Mixin是JavaScript中用的最普遍的模式,可以就任意一个对象的全部或部分属性拷贝到另一个对象上.从提供的接口来看,有的是对对象的操作,有的是对类的操作.对类的操作又称为掺元类(Mixin c ...

  2. HDU 1017A Mathematical Curiosity (暴力统计特殊要求个数)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1017 A Mathematical Curiosity Time Limit: 2000/1000 M ...

  3. MyEclipse 根据左括号或右括号查找另外一半

    在MyEclipse 中如果代码嵌套太多,查找括号是一件非常头疼的事情,今天突然发现了一个快捷键(如下)可以直接定位到另外一半的位置 Ctrl+Shift+P,光标会自动跳到相应的花括号位置, 并且可 ...

  4. C#的常用类

    BitConverter类:用于将源类型转换成字节数组,或者将字节数组转换成目标类型.在解决不同设备之间产生的大小端问题时,经常使用. Convert类:用于基本数据类型(包括Boolean/Byte ...

  5. Context initialization failed org.springframework.beans.factory.BeanCreationException

    严重: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error cre ...

  6. ios常用数据库、完美无缺

    直接copy过去就能用,我们不用再去造轮子,现在的xocod9.4更加人性化了,不用再添加依赖库,这点苹果你让我开始喜欢了,哈哈. 需要这兄弟拉进去的哈 下班标的1,2,3,4就是就截图的4个文件,没 ...

  7. DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量

    DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybati ...

  8. Docker 相关命令汇总

    操作容器的命令 镜像中的容器启动之后可以在 docker 中操作和查看容器的信息 l   docker ps 查看运行的容器,如果想查看全部加上参数-a 即可 l   docker create 完整 ...

  9. PHP中$a && $b = $c 语法的用法

    $a && $b = $c 表示:如果$a为真,则执行$b = $c,否则不执行. 可以用if语句替代: if ($a) { $b = $c; } 实例: $a = true; $b ...

  10. 一分钟完成pip安装

    很多实用Python的小伙伴都需要使用pip安装相应的包,对于初学者而已,检查遇到pip安装不成功的情况,如以下典型错误: Traceback (most recent call last): Fil ...