MySQL 数据库查询练习
-- ----------------------------
-- 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 数据库查询练习的更多相关文章
- mysql数据库查询pdo的用法
最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...
- 提高MySQL数据库查询效率的几个技巧(转载)
[size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size] MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我 ...
- 将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成
将从mysql数据库查询的信息,遍历到List<>以及一些随机数的生成. 代码比较乱,但是方法还是对的,大家又需要的选择看,希望对博友 有帮助,欢迎留言分享! public class s ...
- MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row_number变相实现方法)
转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_numbe ...
- Mysql数据库查询数据文件大小
参考网站:https://zhidao.baidu.com/question/201227796936321525.html 用SQL命令查看Mysql数据库大小 要想知道每个数据库的大小的话,步骤如 ...
- 面试题:谈谈如何优化MYSQL数据库查询
1.优化数据类型 MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码速度,或者选择最明显的选择,因此,你可 ...
- 【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)
上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完 ...
- mysql 数据库查询最后两条数据
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011925175/article/details/24186917 有一个mysql数据库的 ...
- mysql数据库查询缓存总结
概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...
- mysql数据库查询过程探究和优化建议
查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...
随机推荐
- LA 3938 动态最大连续和(线段树)
https://vjudge.net/problem/UVALive-3938 题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答.对于询问(a,b),需要找到两个下标x和y,使得a≤x ...
- Hive 建外链表到 Hbase(分内部表、外部表两种方式)
一. Hive 建内部表,链到hbase :特点:Hive drop表后,Hbase 表同步删除 drop table if exists hbase_kimbo_test1;CREATE TABLE ...
- c# lambda表达式学习
1. 普通绑定: public void button1_Click(object sender, EventArgs e) { MessageBox.Show("ok"); } ...
- 初识webservice 服务
1.获取电话号码归属地查询 首先访问: http://www.webxml.com.cn/zh_cn/web_services.aspx ①新建一个MyEclipse项目(WebService) ht ...
- MyBatis Generator去掉生成的注解
是不是很讨厌mybatis Generator帮我们生成代码的时候在Mapper和mapper.xml文件中生成的一大堆注解?今天在看MyBatis Generator代码的时候发现,原来mybati ...
- Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量
Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...
- python自动化运维之路2
list列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 #!/usr/bin/env python # _*_ encoding:utf-8 _*_ # a ...
- 在JavaScript中进行文件处理,第四部分:对象URLs
译注:原文是<JavaScript高级程序设计>的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考.原文链接:这里 学习到这里,你已经了解在传统方式中如何使用文件, ...
- java.io.File中的 pathSeparator 与separator 的区别
先总的说一下区别: File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如: java -cp test.jar;abc.jar HelloWorld 就是指“;” ...
- PostgreSQL逻辑复制槽
Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...