目录

一、数据库表的创建

二、练习题

01、查询部门编号为30的部门的员工详细信息

02、查询从事clerk工作的员工的编号、姓名以及其部门号

03、查询奖金多于基本工资的员工的信息、询奖金小于于基本工资的员工的信息

04、查询奖金多于基本工资60%的员工的信息​编辑

05、查询部门编号为10的部门经理 (job=manager)   和部门编号为20的部门中工作为CLERK的职员信息​编辑

06、查询部门编号为10的部门经理或部门编号为20的部门工作为CLERK的职员信息或者既不是经理也不是CLERK但是工资高于2000的员工信息

07、查询获得奖金的员工的信息(1、信息都在员工表中;获得奖金==comm is not null and comm>0)

08、查询奖金少于100或者没有获得奖金的员工的信息

09、查询姓名以A、B、S开头的员工的信息

10、查询找到姓名长度为6个字符的员工的信息

11、查询姓名中不包含R字符的员工信息。

12、查询员工的详细信息并按姓名排序

13、查询员工的信息并按工作降序工资升序排列

14、计算员工的日薪(按30天计)

15、查询姓名中包含字符A的员工的信息

16、查询拥有员工的部门的部门名和部门号

17、查询工资多于smith的员工信息。

18、查询员工和及其所属经理的姓名(同一个部门,job=manager)---自连接

19、查询雇佣日期早于其经理雇佣日期的员工及其经理姓名

20、查询员工姓名及其所在的部门名称

21、查询工作为clerk的员工姓名及其所在部门名称

22、查询各部门号及其部门中的最低工资

23、查询销售部sales的所有员工的姓名

24、查询工资水平大于平均工资的员工

25、查询与SCOTT从事相同工作的员工。

26、查询与部门编号为30的员工工资水平相同的员工信息

27、查询工资高于部门编号为30的部门所有员工工资水平的员工信息

28、查询部门号、部门名、部门所在位置及其每个部门的员工总数

29、查询员工的姓名、工资及其所属部门

30、查询员工的详细信息(含部门名)

31、查询各工作名称以及从事此工作的最低工资

32、计算员工的年薪并且以年薪排序

33、查询工资为第4级别的员工的姓名及其工资

34、查询工资为第3等级的职员名字、工资、所属部门以及部门所在地

35、查询工资等级大于smith的员工的信息


一、数据库表的创建

1、首先自己先创建一个数据库

2、创建数据库表

-- 创建部门表
DROP TABLE IF EXISTS dept;
CREATE TABLE dept(-- 部门编号deptno int PRIMARY KEY, -- 部门名称dname VARCHAR(14), -- 部门所在地loc VARCHAR(13));-- 向部门表插入数据
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');-- 创建员工表
DROP TABLE IF EXISTS emp;
CREATE TABLE emp(-- 员工编号empno int PRIMARY KEY, -- 员工姓名ename VARCHAR(10), -- 工作岗位job VARCHAR(9), -- 直属领导mgr int, -- 入职时间hiredate DATE, -- 工资sal double, -- 奖金comm double, -- 所属部门deptno int
);-- 为员工表表添加外键约束
ALTER TABLE emp ADD CONSTRAINT FOREIGN KEY EMP(deptno) REFERENCES dept (deptno);-- 向员工表插入数据
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,"1980-12-17",800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);-- 创建工资等级表
DROP TABLE IF EXISTS salgrade;
CREATE TABLE salgrade(-- 等级grade int, -- 最低工资losal double, -- 最高工资hisal double
);-- 向工资等级表插入数据
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);

部门表

员工表

等级表

二、练习题

01、查询部门编号为30的部门的员工详细信息

-- 01、查询部门编号为30的部门的员工详细信息
SELECT*
FROMemp
WHEREdeptno = 30

02、查询从事clerk工作的员工的编号、姓名以及其部门号

-- 02、查询从事clerk工作的员工的编号、姓名以及其部门号
SELECTempno,ename,deptno
FROMemp
WHEREjob = 'clerk'

03、查询奖金多于基本工资的员工的信息、询奖金小于于基本工资的员工的信息

3.1、查询奖金多于基本工资的员工的信息

-- 03、查询奖金多于基本工资的员工的信息
SELECT*
FROMemp
WHEREcomm > sal
GROUP BYempno

3.2、询奖金小于于基本工资的员工的信息

-- 询奖金小于于基本工资的员工的信息
SELECT*
FROMemp
WHEREsal > comm

04、查询奖金多于基本工资60%的员工的信息

-- 04、查询奖金多于基本工资60%的员工的信息
SELECT*
FROMemp
WHEREcomm > sal * 0.6

05、查询部门编号为10的部门经理 (job=manager)   和部门编号为20的部门中工作为CLERK的职员信息

-- 05、查询部门编号为10的部门经理 (job=manager)   和部门编号为20的部门中工作为CLERK的职员信息
SELECT*
FROMemp
WHERE( deptno = 10 AND job = 'manager' ) OR ( deptno = 20 AND job = 'clerk' )

06、查询部门编号为10的部门经理或部门编号为20的部门工作为CLERK的职员信息或者既不是经理也不是CLERK但是工资高于2000的员工信息

-- 06、查询部门编号为10的部门经理或部门编号为20的部门工作为CLERK的职员信息或者既不是经理也不是CLERK但是工资高于2000的员工信息
SELECT*
FROMemp
WHERE( deptno = 10 AND job = 'manager' ) OR ( deptno = 20 AND job = 'clerk' ) OR ( job <> 'manager' AND job <> 'clerk' AND sal > 2000 )

07、查询获得奖金的员工的信息(1、信息都在员工表中;获得奖金==comm is not null and comm>0)

-- 07、查询获得奖金的员工的信息(1、信息都在员工表中;获得奖金==comm is not null and comm>0)
SELECT*
FROMemp
WHEREcomm IS NOT NULL AND comm >0

08、查询奖金少于100或者没有获得奖金的员工的信息

-- 08、查询奖金少于100或者没有获得奖金的员工的信息
SELECT*
FROMemp
WHEREcomm < 100 OR comm IS NULL

09、查询姓名以A、B、S开头的员工的信息

方法1

1表示取左边的第一个字符

(ename,1)表示取名字的第一个字符)

IN ( 'A', 'B', 'C' ) 取出姓名第一个字符与之相匹配的员工信息

-- 09、查询姓名以A、B、S开头的员工的信息
SELECT *
FROM emp
WHERE LEFT ( ename, 1 ) IN ( 'A', 'B', 'C' )

方法2

SELECT*
FROMemp
WHEREename LIKE 'A%' OR ename LIKE 'B%' OR ename LIKE 'C%'

10、查询找到姓名长度为6个字符的员工的信息

-- 10、查询找到姓名长度为6个字符的员工的信息
SELECT *
FROM emp
WHERE LENGTH( ename ) =6

11、查询姓名中不包含R字符的员工信息。

 -- 11、查询姓名中不包含R字符的员工信息。SELECT * FROM empWHERE ename NOT LIKE '%R%'

12、查询员工的详细信息并按姓名排序

没有特别要求是降序还是升序,所以就默认升序

-- 12、查询员工的详细信息并按姓名排序
SELECT *
FROM emp
ORDER BY ename

13、查询员工的信息并按工作降序工资升序排列

-- 13、查询员工的信息并按工作降序工资升序排列
SELECT *
FROM emp
ORDER BY job DESC,sal ASC

14、计算员工的日薪(按30天计)

-- 14、计算员工的日薪(按30天计)
SELECT ename,sal,ROUND(sal/30,2) as d_sal
FROM emp

round表示小数点,ROUND(sal/30,2),2表示小数点后面两位后面的数进行四舍五入

ROUND(sal/30,-1) ,-1表示小数点前面一位,比如(26.78,-1),小数点的前面一位6前面的2保留,然后6进1,结果为30

-- 对于正数
SELECT ROUND(23.338333333,2)-- 对于负数
SELECT ROUND(23.338333333,-1)

15、查询姓名中包含字符A的员工的信息

-- 15、查询姓名中包含字符A的员工的信息
SELECT *
FROM emp
WHERE ename LIKE '%A%'

16、查询拥有员工的部门的部门名和部门号

-- 16、查询拥有员工的部门的部门名和部门号
SELECT DISTINCT dname as '部门名', dept.deptno as '部门号'
FROM dept INNER JOIN emp ON (emp.deptno=dept.deptno)

17、查询工资多于smith的员工信息。

-- 17、查询工资多于smith的员工信息。
SELECT *
FROM emp
WHERE sal>(SELECT sal FROM emp WHERE ename='smith')

18、查询员工和及其所属经理的姓名(同一个部门,job=manager)---自连接

-- 18、查询员工和及其所属经理的姓名(同一个部门,job=manager)---自连接
SELECT e.* ,m.ename AS '经理姓名'
FROM emp AS e
INNER JOIN emp AS m ON (m.deptno=e.deptno)
WHERE m.job='manager' AND e.job<>'manager'
ORDER BY empno DESC

19、查询雇佣日期早于其经理雇佣日期的员工及其经理姓名

-- 19、查询雇佣日期早于其经理雇佣日期的员工及其经理姓名
SELECT
e.ename AS '员工姓名',
e.hiredate AS '员工雇佣日期',
m.ename AS '经理姓名',
m.hiredate AS '经理雇佣日期'
FROM emp AS e
INNER JOIN emp AS m ON (e.deptno=m.deptno)
WHERE m.job='manager' AND e.job<>'manager' AND DATEDIFF(m.hiredate,e.hiredate)>0

20、查询员工姓名及其所在的部门名称

-- 20、查询员工姓名及其所在的部门名称
SELECT e.ename AS '员工姓名',d.dname AS '部门名称'
FROM emp AS e
INNER JOIN dept AS d
ON (d.deptno=e.deptno)

21、查询工作为clerk的员工姓名及其所在部门名称

-- 21、查询工作为clerk的员工姓名及其所在部门名称
SELECT e.ename AS '员工姓名',e.job,d.dname AS '部门名称'
FROM emp AS e
INNER JOIN dept AS d ON (d.deptno=e.deptno)
WHERE e.job='clerk'

22、查询各部门号及其部门中的最低工资

-- 22、查询各部门号及其部门中的最低工资
SELECT deptno , min(sal) AS min_sal
FROM emp
GROUP BY deptno

23、查询销售部sales的所有员工的姓名

-- 23、查询销售部sales的所有员工的姓名
SELECT ename , dname
FROM emp INNER JOIN dept ON (dept.deptno=emp.deptno)
WHERE dept.dname='sales'

24、查询工资水平大于平均工资的员工

-- 24、查询工资水平大于平均工资的员工
select e.* , s.grade
FROM emp AS e INNER JOIN salgrade AS s ON e.sal BETWEEN s.losal AND s.hisal
WHERE s.grade >= (SELECT grade FROM salgrade WHERE losal<=(SELECT avg(sal) FROM emp) AND hisal>=(SELECT avg(sal) FROM emp ))

25、查询与SCOTT从事相同工作的员工。

这样写是为了对比两者工作是否相同

-- 25、查询与SCOTT从事相同工作的员工。
SELECT *
FROM emp
WHERE job =(SELECT job FROM emp WHERE ename='scott') 

-- 25、查询与SCOTT从事相同工作的员工。
SELECT *
FROM emp
WHERE job =(SELECT job FROM emp WHERE ename='scott') AND ename<>'scott'

26、查询与部门编号为30的员工工资水平相同的员工信息

-- 26、查询与部门编号为30的员工工资水平相同的员工信息
SELECT *
FROM emp INNER JOIN salgrade AS s ON sal BETWEEN s.losal AND s.hisal
WHERE s.grade=(SELECT grade FROM salgrade WHERE losal<(SELECT AVG(sal) FROM emp WHERE deptno=30AND hisal>(SELECT AVG(sal) FROM emp WHERE deptno=30)))

27、查询工资高于部门编号为30的部门所有员工工资水平的员工信息

-- 27、查询工资高于部门编号为30的部门所有员工工资水平的员工信息
SELECT *
FROM emp
INNER JOIN salgrade ON sal BETWEEN losal and hisal
WHERE  grade > (SELECT grade FROM salgrade WHERE losal<=(SELECT AVG(sal) FROM emp WHERE deptno=30)AND
hisal>=(SELECT AVG(sal) FROM emp WHERE deptno=30))

28、查询部门号、部门名、部门所在位置及其每个部门的员工总数

-- 28、查询部门号、部门名、部门所在位置及其每个部门的员工总数
SELECT d.deptno,d.dname,d.loc,count(e.empno)
FROM emp AS e
INNER JOIN dept AS d ON d.deptno=e.deptno
GROUP BY d.deptno

29、查询员工的姓名、工资及其所属部门

 -- 29、查询员工的姓名、工资及其所属部门SELECT e.ename, e.sal,d.dnameFROM emp AS e INNER JOIN dept AS d ON d.deptno=e.deptno 

30、查询员工的详细信息(含部门名)

-- 30、查询员工的详细信息(含部门名)
SELECT e.*,d.dname
FROM emp AS e
INNER JOIN dept AS d ON d.deptno=e.deptno

31、查询各工作名称以及从事此工作的最低工资

-- 31、查询各工作名称以及从事此工作的最低工资
SELECT job , min(sal) AS min_sal
FROM emp
GROUP BY job

32、计算员工的年薪并且以年薪排序

-- 32、计算员工的年薪并且以年薪排序
SELECT e.*,(e.sal*12+(SELECT (IF(comm IS NULL,0,comm)) FROM emp WHERE e.empno=emp.empno)) AS y_sal
FROM emp AS e
ORDER BY y_sal DESC

33、查询工资为第4级别的员工的姓名及其工资

-- 33、查询工资为第4级别的员工的姓名及其工资
SELECT *
FROM emp
WHERE sal BETWEEN (SELECT losal FROM salgrade WHERE grade=4) AND (SELECT hisal FROM salgrade WHERE grade=4)

34、查询工资为第3等级的职员名字、工资、所属部门以及部门所在地

-- 34、查询工资为第3等级的职员名字、工资、所属部门以及部门所在地
SELECT e.ename,e.sal,d.dname,d.loc
FROM emp AS e
INNER JOIN dept AS d ON d.deptno=e.deptno
WHERE e.sal BETWEEN (SELECT losal FROM salgrade WHERE grade=3) AND (SELECT hisal FROM salgrade WHERE grade=3)

35、查询工资等级大于smith的员工的信息

-- 35、查询工资等级大于smith的员工的信息
SELECT *
FROM emp
INNER JOIN salgrade ON sal BETWEEN losal AND hisal
WHERE grade>(SELECT grade FROM salgrade INNER JOIN emp ON sal BETWEEN losal AND hisal WHERE ename='smith')

MySQL数据库练习2相关推荐

  1. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!

    连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...

  2. MySQL数据库+命令大全+常用操作

    格式:mysql -h主机地址 -u用户名 -p用户密码 1. 例:连接到本机上的MYSQL 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示 ...

  3. mysql数据库是一个软件呐_15款好用的mysql管理软件

    1. Induction Induction是一款用于理解数据关系的开源管理工具,它可用来探索行/列,运行查询和数据可视化等方面.该工具支持多种数据库,包括PostgreSQL,MySQL,SQLit ...

  4. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  5. C语言对mysql数据库的操作

    C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎 ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. python用django连接mysql_三分钟了解Django如何连接Mysql数据库

    处理用户注册请求.Django连接MysqL数据库相关配置.数据库迁移命令: my_Dproject/app01/views.py    在views函数文件中添加register函数,来处理用户注册 ...

  8. mysql数据库比对视频教程_MySQL数据库全学习实战视频教程(27讲 )

    一)mySQL数据库简介:MySQL属于关系型数据库,是当前最流行的关系型数据库管理系统之一,在WEB项目使用方面,MySQL是最好的 RDBMS应用软件. 二)本mySQL数据库视频教程目录如下:  ...

  9. eclipse关闭mysql数据库,有关于用eclipse连接mysql数据库出现的问题以及解决办法

    写帖子是为了让更多的程序员减少再调试bug中的时间,也希望大家能一起把自己遇到的错误及解决方法写出来.我是一个刚开始学java的大二学生,用的是<java开发实战经典>.在写p646的程序 ...

  10. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...

    最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...

最新文章

  1. TinkerNode NB-IoT物联网开发板(NB-IoT专栏—拓展篇3)
  2. 白鸦三次创业反思:公司遇问题 怎么走都对(转)
  3. 【AGC014E】Blue and Red Tree
  4. Unity2017.1官方UGUI文档翻译——Scrollbar
  5. 除了数据属性,Vue 实例还提供了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。
  6. Java设计模式——工厂模式
  7. 「Python」ubuntu使用make命令安装python(带详细解释和防坑指南)
  8. thinkphp5 获取当前的域名
  9. java 判断端口是否被占用_java检测端口是否被占用详解
  10. 使用 generator-easy-ui5 快速创建 SAP UI5 应用的工程结构
  11. [转]让你赚大钱成富翁的4个投资习惯
  12. 点击button后改变文字_27. 教你零基础搭建小程序:小程序的常见组件—button
  13. mysql ak uk_mysql表的查询
  14. 固定资产管理员计算机应用,浅谈计算机在固定资产管理中应用.doc
  15. python做计量经济学的书籍_《计量经济学》教材书单
  16. 傅里叶级数、一维傅里叶变换到二维傅里叶变换数理推导
  17. office2016 excel表格如何插入复选框
  18. 如何成为一名优秀的iOS开发工程师
  19. 车载以太网测试:以太网测什么
  20. C#从sqlite3中读数据到DataTable中报错 :System.Data.ConstraintException:“未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。

热门文章

  1. iOS--React Native密码键盘插件
  2. javaWeb用户注册之用户名、密码、邮箱验证例题
  3. 探索C# : List 元素类型和清除方法
  4. DDD学习(一)——通用语言
  5. 【性能测试】一份完整的性能测试报告模板
  6. django报错:OperationalError: (1045, Access denied for user 'TEST'@'localhost' (using password: NO))
  7. Python中Scapy网络嗅探模块的使用
  8. python将中文转换成utf8_如何在python中从unicode转换成utf8?
  9. c语言for循环打印菱形五行,用C语言编程 输出五行菱形*。。急需啦。。大神帮忙撒。。。...
  10. *-面对困境,莫言放弃----给学习中遇到困境的学员们