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

请根据给出的数据库表结构来回答相应问题:
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. redis安装和简介(2)

    承接上篇未完成的配置...此次使用的的 Redis-x64-3.2.100 版本 一.打开redis服务器 方式一:打开 redis-server.exe 显示如下图: 图中: 显示运行进程号.当前运 ...

  2. Cesium.js点击事件

    创建viewer var viewer = new Cesium.Viewer('cesiumContainer'); 鼠标事件 var handler = new Cesium.ScreenSpac ...

  3. [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題

    今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...

  4. 【题解】洛谷P2296 [NOIP2014TG] 寻找道路(SPFA+DFS)

    题目来源:洛谷P2296 思路 一开始看还以为是一道水题 虽然本来就挺水的 本道题的难点在于如何判断是否路径上的点都会直接或者间接连着终点 我们需要在一开始多建一个反向图 然后从终点DFS回去 把路径 ...

  5. java 编写小工具 尝试 学习(七)

    1.在java 编写小工具 尝试 学习(六)里学会了,控件 的随意摆放, 以及大小(x,y,width,height),又根据前面学习的按钮 被点击 的事件监控 的方法 ,点击 按钮 在显示区域显示“ ...

  6. 如何在运行jar指定使用的JDK

    写一个.bat文件 例如在同文件夹下,新建一个run.bat文件 run.bat 的内容是如下: set JAVA_HOME=C:\jdk1.7.0_67set CLASSPATH=.;%JAVA_H ...

  7. 复习宝典之Spring

    查看更多宝典,请点击<金三银四,你的专属面试宝典> 第六章:Spring Spring容器是Spring的核心,一切Spring bean都存储在Spring容器内,并由其通过IoC技术管 ...

  8. ubuntu—终端安装mysql

    ---恢复内容开始--- Step 1 : 安装指令 ~$ sudo apt-get install mysql-server Step 2: 查看是否正常安装 ~$ ps aux | grep my ...

  9. 转型大数据之学前准备,掌握linux(一)

    导语:为什么要学习linux?学到什么程度? 大数据技术是运行在集群,且是linux操作系统这样的集群当中的,所以学习大数据之前,你得先掌握了linux的简单操作,没错,我们不是专门的做linux工作 ...

  10. Linux学习笔记——1.超级用户

    以超级用户工作:su su命令允许临时变换到任何一用户标识(如果拥有口令的话),并挂起当前shell,为新用户开启一个新的shell. su <user> 将当前用户标识harley变换为 ...