MySQL综合练习题

这篇具有很好参考价值的文章主要介绍了MySQL综合练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建表的素材

CREATE TABLE dept (
    deptno INT(2) NOT NULL COMMENT '部门编号',
    dname VARCHAR (15) COMMENT '部门名称',
    loc VARCHAR (20) COMMENT '地理位置' 
);

-- 添加主键
ALTER TABLE dept ADD PRIMARY KEY (deptno);

-- 添加数据
INSERT INTO dept (deptno,dname,loc)VALUES (10,'财务部','高新四路');
INSERT INTO dept (deptno,dname,loc)VALUES (20,'人事部','科技二路');
INSERT INTO dept (deptno,dname,loc)VALUES (30,'销售部','长安区');
INSERT INTO dept (deptno,dname,loc)VALUES (40,'运输部','雁塔区');

CREATE TABLE emp(
    empno INT(4) NOT NULL COMMENT '员工编号',
    ename VARCHAR(10) COMMENT '员工名字',
    job VARCHAR(10) COMMENT '职位',
    mgr INT(4) COMMENT '上司',
    hiredate DATE COMMENT '入职时间',
    sal INT(7) COMMENT '基本工资',
    comm INT(7) COMMENT '补贴',
    deptno INT(2) COMMENT '所属部门编号'
);

-- 添加主键
ALTER TABLE emp ADD PRIMARY KEY (empno);

-- 添加外键约束
ALTER TABLE emp ADD CONSTRAINT f_ed_key
FOREIGN KEY (deptno) 
REFERENCES dept(deptno);

INSERT INTO `emp` VALUES('7369','张倩','办事员','7902','2002-12-17','820',NULL,'20');
INSERT INTO `emp` VALUES('7499','刘博','售货员','7698','1992-02-20','1900','300','30');
INSERT INTO `emp` VALUES('7521','李兴','售货员','7698','1995-07-22','1250','500','30');
INSERT INTO `emp` VALUES('7566','李雷','人事部长','7839','1991-04-02','975',NULL,'20');
INSERT INTO `emp` VALUES('7654','刘浩','售货员','7698','1991-09-28','1250','1400','30');
INSERT INTO `emp` VALUES('7698','刘涛','销售部长','7839','1997-05-01','2850',NULL,'30');
INSERT INTO `emp` VALUES('7782','华仔','人事部长','7839','1995-06-09','2450',NULL,'10');
INSERT INTO `emp` VALUES('7788','张飞','人事专员','7566','1998-04-19','3000',NULL,'20');
INSERT INTO `emp` VALUES('7839','马晓云','董事长',NULL,'1991-11-17','5000',NULL,'10');
INSERT INTO `emp` VALUES('7844','马琪','售货员','7698','1996-09-08','1500','0','30');
INSERT INTO `emp` VALUES('7876','李涵','办事员','7788','1997-05-23','1100',NULL,'20');
INSERT INTO `emp` VALUES('7900','李小涵','销售员','7698','1993-2-13','950',NULL,'30');
INSERT INTO `emp` VALUES('7902','张三','人事组长','7566','1992-10-08','3000',NULL,'20');
INSERT INTO `emp` VALUES('7934','张三丰','人事长','7782','1997-06-23','1300',NULL,'10');

CREATE TABLE salgrade(
grade INT (10) COMMENT '工资等级',
losal INT (10) COMMENT '最低限额',
hisal INT (10) COMMENT '最高限额'
)

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

 二、题目要求 

单表查询
1.选择部门30中的所有员工

2.列出所有办事员的姓名,编号和部门编号

3.找出佣金高于薪金的员工

4.找出没有佣金的员工

5.找出佣金高于薪金的60%的员工

6.找出部门10中所有人事部长和部门20中所有办事员的详细资料

7.找出收取佣金的员工

8.找出不收取佣金或收取的佣金低于100的员工

9.找出姓张的员工的信息

10.显示员工的姓名和受雇日期,新的员工排在最前面

11.按工作的降序排序,若工作相同则按薪金排序

12.查出不姓刘的员工的信息

13.取出姓李的员工

多表查询

1.查询出每一位雇员的编号、姓名、职位、部门名称、位置

2.要求查询出每一位雇员的姓名、职位、领导的姓名

3.查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及位置

4.列出在部门"销售部"工作的员工的姓名,假定不知道销售部的部门编号

5.列出与"李兴"从事相同工作的所有员工。

6.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金

7.列出受雇日期早于其直接上级的所有员工。

分组函数查询
1.按照部门编号分组,求出每个部的人数,平均工资

2.按照职位分组,求出每个职位的最高和最低工资

3.计算出每个各职位的平均工资

4.查询出每个部门的名称、部门的人数、平均工资

left outer join on

5.要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000

6.要求查询出工资比华仔还要高的全部雇员信息

7.要求查询出高于公司平均工资的全部雇员信息

8.查询出每个部门的编号、名称、位置、部门人数、平均工资

9.列出至少有一个员工的所有部门 

等级查询
1.查询每个工资等级各有多少员工

2.查询部门中(所有人)的平均工资等级

三、完成步骤 

3.1 登录MySQL并切换数据库

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

3.2 创建表并插入数据

①创建dept表并插入数据

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

②创建emp表并插入数据

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

③创建salgrade表并插入数据

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

四、单表查询 

4.1 选择部门30中的所有员工

①命令

mysql> select ename from emp where deptno = 30;

②结果 

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.2 列出所有办事员的姓名,编号和部门编号

①命令

mysql> select ename,empno,deptno from emp where job = '办事员';

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.3 找出佣金高于薪金的员工

①命令

mysql> select ename from emp where comm > sal;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.4 找出没有佣金的员工

①命令

mysql> select ename from emp where comm is NULL;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.5 找出佣金高于薪金的60%的员工

①命令

mysql> select ename from emp where comm > 0.6*(sal);

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.6 找出部门10中所有人事部长和部门20中所有办事员的详细资料

①命令

mysql> select e.* from emp e where deptno = 10 and job = '人事部长' or deptno = 20 and job = '办事员';

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.7 找出收取佣金的员工

①命令

mysql> select ename from emp where comm is not NULL;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.8 找出不收取佣金或收取的佣金低于100的员工

①命令

mysql> select ename from emp where comm is NULL or comm < 100;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.9 找出姓张的员工的信息

①命令

mysql> select * from emp where ename like '张%';

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.10 显示员工的姓名和受雇日期,新的员工排在最前面 

①命令

mysql> select ename,hiredate from emp where hiredate order by hiredate desc;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.11 按工作的降序排序,若工作相同则按薪金排序

①命令

mysql> select *
    -> from emp
    -> order by job desc, sal asc;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.12 查出不姓刘的员工的信息

①命令

mysql> select * from emp where ename not like '刘%';

②结果 

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

4.13 取出姓李的员工 

①命令

mysql> select ename from emp where ename like '李%';

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

五、多表查询

5.1 查询出每一位雇员的编号、姓名、职位、部门名称、位置

①命令

mysql> select e.empno,e.ename,e.job,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

5.2 要求查询出每一位雇员的姓名、职位、领导的姓名 

①命令

mysql> select e.ename as '员工姓名',e.job as '职位',l.ename as '领导姓名'
    -> from emp e
    -> left join emp l on e.mgr = l.empno;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

5.3 查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及位置 

①命令

 mysql> select e.empno as 雇员编号, e.ename as 雇员姓名, e.sal as 基本工资, e.job as 职位, l.ename as 领导姓名, d.dname as 部门名称, d.loc as 位置
    -> from emp e
    -> left join dept d on e.deptno = d.deptno
    -> left join emp l on e.mgr = l.empno;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

5.4 列出在部门"销售部"工作的员工的姓名,假定不知道销售部的部门编号 

①命令

mysql> select e.ename,d.dname from emp e inner join dept d where d.dname = '销售部';

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

5.5 列出与"李兴"从事相同工作的所有员工

①命令

#方法一
mysql> select * from emp where job = '售货员';
#方法二
mysql> select * from emp where job = (select job from emp where ename = '李兴');

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

5.6 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金

①命令

mysql> select e.ename,e.sal from emp e where e.sal > (select max(sal) from emp where deptno = 30 );

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

5.7 列出受雇日期早于其直接上级的所有员工

①命令

mysql> select e1.empno, e1.ename, e1.hiredate as 'Employee Hire Date', e2.ename as 'Manager Name', e2.hiredate as 'Manager Hire Date'
    -> from emp e1
    -> left join emp e2 on e1.mgr = e2.empno
    -> where e1.hiredate < e2.hiredate;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

六、分组函数查询

6.1 按照部门编号分组,求出每个部的人数,平均工资

①命令

mysql> select deptno, count(deptno) as 人数, avg(sal) as 平均工资
    -> from emp
    -> group by deptno;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.2 按照职位分组,求出每个职位的最高和最低工资

①命令

mysql> select job as 职位,max(sal) as 最高工资,min(sal) as 最低工资
    -> from emp
    -> group by job;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.3 计算出每个各职位的平均工资 

①命令

mysql> select job, count(*) as 人数, avg(sal) as 平均工资
    -> from emp
    -> group by job;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.4 查询出每个部门的名称、部门的人数、平均工资 

①命令

mysql> select d.dname, count(e.empno) as 人数, avg(e.sal) as 平均工资
    -> from dept d
    -> left join emp e on d.deptno = e.deptno
    -> group by d.dname;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.5 要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000

①命令

mysql> select d.dname, d.loc, avg(e.sal) as 平均工资
    -> from dept d
    -> left join emp e on d.deptno = e.deptno
    -> group by d.dname, d.loc
    -> having 平均工资 > 2000;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.6 要求查询出工资比华仔还要高的全部雇员信息 

①命令

mysql> select *
    -> from emp
    -> where sal > (
    ->     select sal
    ->     from emp e
    ->     where e.ename = '华仔'
    -> );

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.7 要求查询出高于公司平均工资的全部雇员信息

①命令

mysql> select * from emp where sal > (select avg(sal) from emp);

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.8 查询出每个部门的编号、名称、位置、部门人数、平均工资 

①命令

mysql> select d.deptno, d.dname, d.loc, COUNT(*) AS department_count, avg(e.sal) AS average_salary
    -> from dept d
    -> join emp e ON d.deptno = e.deptno
    -> group by d.deptno, d.dname, d.loc;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

6.9 列出至少有一个员工的所有部门

①命令

mysql> select d.deptno, d.dname
    -> from dept d
    -> left join emp e on d.deptno = e.deptno
    -> group by d.deptno, d.dname
    -> having count(e.empno) > 0;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

七、等级查询 

7.1 查询每个工资等级各有多少员工

①命令

mysql> select grade, count(*) as num_employees
    -> from emp
    -> left join salgrade on emp.sal between salgrade.losal and salgrade.hisal
    -> group by grade;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux

7.2 查询部门中(所有人)的平均工资等级

①命令

mysql> select deptno, avg(grade) as avg_grade
    -> from emp
    -> left join salgrade on emp.sal between salgrade.losal and salgrade.hisal
    -> group by deptno;

②结果

MySQL综合练习题,mysql,sql,数据库,MySQL,运维,linux文章来源地址https://www.toymoban.com/news/detail-814030.html

到了这里,关于MySQL综合练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 10 SQL进阶 -- 综合练习题 -- 10道经典SQL题目,配套数据与解答

    点击下方链接直接下载 创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/create_table.sql 执行建表语句 执行成功 查看创建的表 点击下方链接直接下载 插入数据脚本:https://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/data.zip 大家下载好脚本后,先在MySQL环境中运

    2024年04月27日
    浏览(31)
  • 【MySQL】- 05 sql 语句练习题

    查询结果就不放了,语句是否成功运行,结果是否正确都容易自行判断 –1. 学生表 Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 –2. 课程表 Course(c_id,c_name,t_id) – --课程编号, 课程名称, 教师编号 –3. 教师表 Teacher(t_id,t_name) --教师编号,教师姓名 –4. 成

    2024年02月08日
    浏览(43)
  • 【MySQL】- 05 sql 语句练习题(第二部分)

    20、 查询学生的总成绩并进行排名 21、 查询不同老师所教不同课程平均分从高到低显示 22、 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩 23、 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比 24、 查询学生平均成绩及其名次

    2024年02月09日
    浏览(33)
  • 数据库SQL语言实战(五)(数据库系统概念第三章练习题)

    目录 前言知识 一、 关系模式 二、 属性域 例子 介绍 作用 三、Select常数 举例 解释  四、集合差运算 本质 举例  结论 练习题 3.17 3.18  3.21  总结  注:本文的SQL语言适用的是 Oracle数据库 与mySQL可能存在略微不同 模式的定义 :模式则是指数据库中 所有关系模式 的集合,它

    2024年04月22日
    浏览(51)
  • 数据库系统概述——第三章 关系数据库标准语言SQL(知识点复习+练习题)

    🌟 博主: 命运之光 🦄 专栏: 离散数学考前复习(知识点+题) 🍓 专栏: 概率论期末速成(一套卷) 🐳 专栏: 数字电路考前复习 🦚 专栏: 数据库系统概述 ☀️ 博主的其他文章: 点击进入博主的主页​​​​​ 前言: 身为大学生考前复习一定十分痛苦,你有没有过

    2024年02月10日
    浏览(51)
  • MySQL的数据备份与还原--练习题

    MySQLdump是MySQL提供的一个非常有用的数据库备份工具。MySQLdump命令执行时,可以将数据库备份成一个文本文件,该文件中实际上包含了多个CREATE 和 INSERT语句,使用这些语句可以重新创建表和插入数据。  看题: CREATE DATABASE booksDB;     use booksDB;     CREATE TABLE books     (   

    2024年02月17日
    浏览(30)
  • MySQL练习题(6)

    1、使用mysqldump命令备份数据库中的所有表   2、备份booksDB数据库中的books表 3、使用mysqldump备份booksDB和test数据库 4、使用mysqldump备份服务器中的所有数据库 5、使用mysql命令还原第二题导出的book表 6、进入数据库使用source命令还原第二题导出的book表 1、建立一个utf8编码的数据

    2024年02月16日
    浏览(25)
  • MySQL45道练习题

    作业需要数据表SQL语句已给  1. 查询\\\" 01 \\\"课程比\\\" 02 \\\"课程成绩高的学生的信息及课程分数  1.1 查询同时存在\\\" 01 \\\"课程和\\\" 02 \\\"课程的情况 1.2 查询存在\\\" 01 \\\"课程但可能不存在\\\" 02 \\\"课程的情况(不存在时显示为 null ) 1.3 查询不存在\\\" 01 \\\"课程但存在\\\" 02 \\\"课程的情况 2.查询平均成绩大于

    2024年01月25日
    浏览(34)
  • MySQL单表查询练习题

    目录 第一题  第二题  第三题   1.创建数据表pet,并对表进行插入、更新与删除操作,pet表结构如表8.3所示。 (1)首先创建数据表pet,使用不同的方法将表8.4中的记录插入到pet表中。 mysql create table pet( name varchar(20) not null, owner varchar(20), species varchar(20) not null, sex char(1) not nu

    2024年02月13日
    浏览(28)
  • MySQL索引和视图基础练习题

    学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名Cno为主键 学生选课表:SC (Sno, Cno, Score) 学号,课程号,成绩Sno,Cno为主键 1.用SQL语句创建学生表Student,定义主键,姓名不能重名,性别只能输入男或女

    2024年01月17日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包