MySQL数据库

您所在的位置:网站首页 mysql多表查询语句题目 MySQL数据库

MySQL数据库

2024-07-10 03:16| 来源: 网络整理| 查看: 265

一、练习素材

创建表

--创建部门表dept create table dept ( dept1 int , dept_name varchar(11)); --创建员工表emp create table emp ( sid int , name varchar(11), age int, worktime_start date, incoming int, dept2 int);

插入数据

--部门表插入数据 insert into dept values (101,'财务'), (102,'销售'), (103,'IT技术'), (104,'行政'); --员工表插入数据 insert into emp values( 1789,'张三',35,'1980/1/1',4000,101), (1674,'李四',32,'1983/4/1',3500,101), (1776,'王五',24,'1990/7/1',2000,101), (1568,'赵六',57,'1970/10/11',7500,102), (1564,'荣七',64,'1963/10/11',8500,102), (1879,'牛八',55,'1971/10/20',7300,103);

查询表中数据如下图

二、练习题目

    1.找出销售部门中年纪最大的员工的姓名

    2.求财务部门最低工资的员工姓名

    3.列出每个部门收入总和高于9000的部门名称

    4.求工资在7500到8500元之间,年龄最大的人的姓名及部门

    5.找出销售部门收入最低的员工入职时间

    6.财务部门收入超过2000元的员工姓名

    7.列出每个部门的平均收入及部门名称

    8.IT技术部入职员工的员工号

    9.财务部门的收入总和;

    10.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表

    11.找出哪个部门还没有员工入职;

    12.列出部门员工收入大于7000的部门编号,部门名称;

    13.列出每一个部门的员工总收入及部门名称;

    14.列出每一个部门中年纪最大的员工姓名,部门名称;

    15.求李四的收入及部门名称

    16.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序

    17.列出部门员工数大于1个的部门名称

    19.查找张三所在的部门名称

参考答案

注:题目1、2、4、5、14、16题我用到的是嵌套查询

--1.找出销售部门中年纪最大的员工的姓名 --其实这样做是由缺陷的,仅适用于题目年龄都不一样的情况 mysql> select name from dept d join emp e on d.dept1=e.dept2 -> where dept_name='销售' -> order by age desc -> limit 1; --如果有两个人都是一样的最大年纪,那么应该像这样(嵌套查询) mysql> select dept_name,name from dept join emp on dept1=dept2 -> where age=(select max(age) from dept,emp -> where dept1=dept2 and dept_name='销售') -> and dept_name='销售'; --2.求财务部门最低工资的员工姓名 mysql> select name from dept join emp on dept1=dept2 -> where incoming=(select min(incoming) from dept,emp -> where dept1=dept2 and dept_name='财务') -> and dept_name='财务'; --3.列出每个部门收入总和高于9000的部门名称 mysql> select dept_name from dept d join emp e on d.dept1=e.dept2 -> group by dept_name -> having sum(incoming)>9000; --4.求工资在7500到8500元之间,年龄最大的人的姓名及部门 mysql> select name,dept_name from dept join emp on dept1=dept2 -> where age=(select max(age) from dept,emp -> where incoming between 7500 and 8500 -> ) and incoming between 7500 and 8500; --5.找出销售部门收入最低的员工入职时间 mysql> select worktime_start from dept join emp on dept1=dept2 -> where incoming=(select min(incoming) -> from dept,emp where dept1=dept2 and dept_name='销售' -> ) and dept_name='销售'; --6.财务部门收入超过2000元的员工姓名 mysql> select name from dept d join emp e on d.dept1=e.dept2 -> where dept_name='财务' and incoming>2000; --7.列出每个部门的平均收入及部门名称 mysql> select avg(incoming),dept_name from dept d join emp e on d.dept1=e.dept2 -> group by dept_name; --8.IT技术部入职员工的员工号 mysql> select sid from dept d join emp e on d.dept1=e.dept2 -> where dept_name='IT技术'; --9.财务部门的收入总和; mysql> select sum(incoming) from dept d join emp e on d.dept1=e.dept2 -> where dept_name='财务'; --10.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表 mysql> select * from dept d join emp e on d.dept1=e.dept2 -> order by dept1 asc,worktime_start asc; --11.找出哪个部门还没有员工入职; mysql> select dept_name from dept d left join emp e on d.dept1=e.dept2 -> where name is NULL; --12.列出部门员工收入大于7000的部门编号,部门名称; mysql> select distinct dept_name,dept1 from dept d join emp e on d.dept1=e.dept2 -> where incoming>7000; --13.列出每一个部门的员工总收入及部门名称; mysql> select sum(incoming),dept_name from dept d join emp e on d.dept1=e.dept2 -> group by dept_name; --14.列出每一个部门中年纪最大的员工姓名,部门名称; --比较巧妙的嵌套查询,某个员工在emp e2表中找不到任何age能够比emp e表中的某个age值大, --那么这样的某个值不就满足最大age的条件吗?! mysql> select name,dept_name,age from dept d right join emp e on d.dept1=e.dept2 -> where( -> select count(*) from emp e2 -> where e2.age>e.age and dept1=dept2 -> )=0; --15.求李四的收入及部门名称 mysql> select incoming,dept_name from dept d join emp e on d.dept1=e.dept2 -> where name='李四'; --16.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序 --同14题的思路一样 mysql> select name,dept_name,incoming from dept d right join emp e on d.dept1=e.dept2 -> where ( -> select count(*) from emp e2 -> where e2.incoming>e.incoming and dept1=dept2 -> )=0 -> order by incoming desc; --17.列出部门员工数大于1个的部门名称 mysql> select dept_name from dept d join emp e on d.dept1=e.dept2 -> group by dept_name -> having count(*)>1; --19.查找张三所在的部门名称 mysql> select dept_name from dept d join emp e on d.dept1=e.dept2 -> where name='张三';



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3