-- ----------------------------
-- mysql练习sql脚本
-- ----------------------------
create database db10; -- 创建db10数据库
use db10; -- 切换到db10数据库
create table dept( -- 创建部门表
deptno int primary key, -- 部门编号
deptname varchar(), -- 部门名称
loc varchar() -- 部门位置
);
create table emp( -- 创建员工表
empno int primary key, -- 员工编号 primary key设置主键:值必须唯一且不能为空
empname varchar(), -- 员工姓名
job varchar(), -- 职位
mgr int, -- 直属上级
hiredate date, -- 受雇日期
sal int, -- 薪资
comm int, -- 奖金
deptno int, -- 所在部门编号
foreign key(deptno) references dept(deptno)
);
-- ----------------------------
-- Records of dept 部门表数据
-- ----------------------------
INSERT INTO `dept` VALUES ('', '会计部', '北京');
INSERT INTO `dept` VALUES ('', '调查部', '杭州');
INSERT INTO `dept` VALUES ('', '销售部', '上海');
INSERT INTO `dept` VALUES ('', '营销部', '深圳'); -- ----------------------------
-- Records of emp 员工表数据
-- ----------------------------
INSERT INTO `emp` VALUES ('', '张无忌', '办事员', '', '1980-12-17', '', null, '');
INSERT INTO `emp` VALUES ('', '曹操', '推销员', '', '1981-02-20', '', '', '');
INSERT INTO `emp` VALUES ('', '杨志', '推销员', '', '1981-02-22', '', '', '');
INSERT INTO `emp` VALUES ('', '朱元璋', '经理', '', '1981-04-02', '', null, '');
INSERT INTO `emp` VALUES ('', '殷天正', '推销员', '', '1981-09-28', '', '', '');
INSERT INTO `emp` VALUES ('', '张三丰', '经理', '', '1981-05-01', '', null, '');
INSERT INTO `emp` VALUES ('', '关羽', '经理', '', '1981-06-09', '', null, '');
INSERT INTO `emp` VALUES ('', '宋江', '分析员', '', '1987-04-19', '', null, '');
INSERT INTO `emp` VALUES ('', '韩少云', '董事长', null, '1981-11-17', '', null, '');
INSERT INTO `emp` VALUES ('', '孙二娘', '推销员', '', '1981-09-08', '', '', '');
INSERT INTO `emp` VALUES ('', '张飞', '办事员', '', '1987-05-23', '', null, '');
INSERT INTO `emp` VALUES ('', '赵云', '办事员', '', '1981-12-03', '', null, '');
INSERT INTO `emp` VALUES ('', '诸葛亮', '分析员', '', '1981-12-03', '', null, '');
INSERT INTO `emp` VALUES ('', '夏侯惇', '办事员', '', '1982-01-23', '', null, '');

要求:

-- .列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

-- .列出薪资比关羽高的所有员工。

-- .列出所有员工的姓名及其直接上级的姓名。

-- .列出最低薪资大于1500的各种职位及从事此职位的员工人数。

-- .列出在销售部职位的员工的姓名,假定不知道销售部的部门编号。

-- .列出与曹操从事相同职位的所有员工及部门名称。

-- .列出薪资高于在销售部(已知部门编号为30)就职的所有员工的薪资的员工姓名和薪资、部门名称。

-- .列出在每个部门职位的员工数量、平均工资。

-- .查出至少有一个员工的部门。显示部门人数、部门编号、部门名称、部门位置。

-- .列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。

-- .列出所有职员的姓名及其部门名称,部门的人数。

答案:

+----------+-------+---------+--------+------+------------+------+------+--------+
| deptname | empno | empname | job | mgr | hiredate | sal | comm | deptno |
+----------+-------+---------+--------+------+------------+------+------+--------+
| 会计部 | | 关羽 | 经理 | | -- | | NULL | |
| 会计部 | | 韩少云 | 董事长 | NULL | -- | | NULL | |
| 会计部 | | 夏侯惇 | 办事员 | | -- | | NULL | |
| 调查部 | | 张无忌 | 办事员 | | -- | | NULL | |
| 调查部 | | 朱元璋 | 经理 | | -- | | NULL | |
| 调查部 | | 宋江 | 分析员 | | -- | | NULL | |
| 调查部 | | 张飞 | 办事员 | | -- | | NULL | |
| 调查部 | | 诸葛亮 | 分析员 | | -- | | NULL | |
| 销售部 | | 曹操 | 推销员 | | -- | | | |
| 销售部 | | 杨志 | 推销员 | | -- | | | |
| 销售部 | | 殷天正 | 推销员 | | -- | | | |
| 销售部 | | 张三丰 | 经理 | | -- | | NULL | |
| 销售部 | | 孙二娘 | 推销员 | | -- | | | |
| 销售部 | | 赵云 | 办事员 | | -- | | NULL | |
+----------+-------+---------+--------+------+------------+------+------+--------+ -- .列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
/*
列: deptname, emp.*
条件: emp.deptno=dept.deptno
*/
select d.deptname, e.*
from dept d left join emp e
on e.deptno=d.deptno; -- .列出薪资比关羽高的所有员工。
/*
列: emp.*
表: emp
条件: sal>(关羽的薪资)
*/
-- 求出关羽的薪资: select *
from emp
where sal> (select sal from emp where empname='关羽'); -- .列出所有员工的姓名及其直接上级的姓名。
/*
列: e1.empname, (直接上级)e2.empname
表: emp e1, emp e2
条件: e1.mgr=e2.empno
*/
select e1.empname, e2.empname
from emp e1, emp e2
where e1.mgr=e2.empno; -- .列出最低薪资大于1500的各种职位及从事此职位的员工人数。
/*
列: job 员工人数
表: emp
条件: 最低薪资(分组)>
分组条件: job
*/ select job, min(sal) 最低工资, count(*) 员工人数
from emp
group by job
having min(sal)>; -- .列出在销售部的员工的姓名,假定不知道销售部的部门编号。
/*
列: empname
表: dept d, emp e
条件: d.deptname='销售部' d.deptno=e.deptno
*/
select e.empname, d.deptname
from dept d, emp e
where d.deptname='销售部' and d.deptno=e.deptno; -- .列出与曹操从事相同职位的所有员工及部门名称。
/*
列: e.empname d.deptname
表: emp e, dept d
条件: job='曹操的职位' e.deptno=d.deptno
*/
select e.empname, d.deptname, e.job
from emp e, dept d
where e.deptno=d.deptno and job=(select job from emp where empname='曹操'); -- .列出薪资高于在销售部(已知部门编号为30)就职的所有员工的薪资的员工姓名和薪资、部门名称。
/*
列: e.empname, e.sal, d.deptname
表: emp e, dept d
条件: e.deptno=d.deptno sal> (30号部门的最高薪资)
*/
select d.deptname, e.* /*select d.deptname, e.sal, e.empname*/
from emp e, dept d
where e.deptno=d.deptno and e.sal > (select max(sal) from emp where deptno=); -- .列出在每个部门职位的员工数量、平均工资。
/*
列: 员工数量, 平均工资
表: emp
分组条件: deptno
聚合函数: count(*), avg(sal)
*/
select deptno, count(*) 员工数量, avg(sal) 平均工资
from emp
group by deptno; -- .查出至少有一个员工的部门。显示部门人数、部门编号、部门名称、部门位置。
/*
列: 部门人数(count(*)) d.deptno, d.deptname, d.loc
表: emp e, dept d
条件: e.deptno=d.deptno
分组条件: e.deptno
*/
select d.*, count(*) 部门人数
from emp e, dept d
where e.deptno=d.deptno
group by e.deptno; -- .列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
/*
列: e.empno, e.empname, d.deptname
表: emp e1, emp e2, dept d
条件: e1.hiredate<e2.hiredate and e1.mgr=e2.empno and e1.deptno=d.deptno
*/
select e1.empno, e1.empname, d.deptname
from emp e1, emp e2, dept d
where e1.hiredate<e2.hiredate and e1.mgr=e2.empno and e1.deptno=d.deptno; -- .列出所有职员的姓名及其部门名称,部门的人数。
/*
张三丰 调查部
列: e.empname, count(*)(分组e.deptno), d.deptname
表: emp e, dept d
条件: e.deptno=d.deptno
分组条件: e.deptno
*/
--查询员工及对应的部门
select e.empname, d.deptname, d.deptno
from emp e, dept d
where e.deptno=d.deptno; --查询部门的人数
select deptno, count(*) cnt
from emp
group by deptno --关联查询
select e.empname, d.deptname, e.deptno, e2.cnt 部门人数
from emp e, dept d, (
select deptno, count(*) cnt
from emp
group by deptno
) e2
where e.deptno=d.deptno and e.deptno=e2.deptno;

MySQL 数据库查询练习的更多相关文章

  1. mysql数据库查询pdo的用法

    最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...

  2. 提高MySQL数据库查询效率的几个技巧(转载)

    [size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]      MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我 ...

  3. 将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成

    将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成. 代码比较乱,但是方法还是对的,大家又需要的选择看,希望对博友 有帮助,欢迎留言分享! public class s ...

  4. MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row_number变相实现方法)

    转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_numbe ...

  5. Mysql数据库查询数据文件大小

    参考网站:https://zhidao.baidu.com/question/201227796936321525.html 用SQL命令查看Mysql数据库大小 要想知道每个数据库的大小的话,步骤如 ...

  6. 面试题:谈谈如何优化MYSQL数据库查询

    1.优化数据类型 MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码速度,或者选择最明显的选择,因此,你可 ...

  7. 【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)

    上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完 ...

  8. mysql 数据库查询最后两条数据

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011925175/article/details/24186917  有一个mysql数据库的 ...

  9. mysql数据库查询缓存总结

    概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...

  10. mysql数据库查询过程探究和优化建议

    查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...

随机推荐

  1. xlrd基本操作

    #coding=utf-8import xlrd def read_excel(): workbook = xlrd.open_workbook('people.xlsx') sheet2 = wor ...

  2. c++ 将容量设置为容器的长度(shrink_to_fit)

    #include <iostream> #include <vector> using namespace std; int main () { vector<); co ...

  3. 在iframe外层head中插入link

    let src = 'abc.css?v='+Math.random(); let link = window.parent.document.createElement('link'); link. ...

  4. [sql]java.sql.Types的具体对应值(jdbcType)

    public final static int BIT   =  -7; public final static int TINYINT  =  -6; public final static int ...

  5. 雷林鹏分享:Ruby 数据库访问 - DBI 教程

    Ruby 数据库访问 - DBI 教程 本章节将向您讲解如何使用 Ruby 访问数据库.Ruby DBI 模块为 Ruby 脚本提供了类似于 Perl DBI 模块的独立于数据库的接口. DBI 即 ...

  6. Java 调用PHP的Web Service(三)

    usoap是PHP环境中的开源soap工具,算是用得比较多的一个工具了. 在utf-8环境中,nusoap可以工作得很好.但是当用于中文环境中时,nusoap经常会出现一些让人不得其解的问题. 最近一 ...

  7. 047——VUE中css过渡动作实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. MVC3 之asp.net 与vb.net 互转练习

    vb.net mvc3相关教程http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc3/vb/ad ...

  9. java 注解总结

    @Controller用于标注控制层组件 @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法.通 ...

  10. Winform工具栏ToolStrip和状态栏StatusStrip

    工具栏和状态栏的设置与前面的菜单基本相似 1.ToolStrip 从工具栏选项卡上拖一个放入窗体即可,位置也是通过其Dock设置的.先上一张图,红色部分就是工具栏,工具栏中可以放置如图下拉菜单中的Bu ...