MySql学习笔记05
复习
- GROUP BY 语句
HAVING 子句
-- 查询每个分类商品所对应的库存总量中,高于1000的总量 select category_id,sum(num) s from t_item group by category_id ; -- 查询每个分类商品所对应的平均单价中,低于100的均价 select category_id,avg(price) a from t_item group by category_id ; -- 查询编号238和编号917分类商品的平均单价 select category_id,avg(price) from t_item ,) group by category_id;
having子句中经常跟聚合函数经常使用,如果没有使用到聚合函数,就要注意是否可以写在where条件中。
子查询
.案例:查询emp表中姓名是‘KING’所属的部门的编号,名称 select * from dept where deptno=(select deptno from emp where ename='king'); .案例:查询部门名称是SALES的部门下所有员工的编号,姓名,职位,以及所属部门的编号 select * from emp where deptno=(select deptno from dept where dname='sales'); .案例:查询部门地址是DALLAS的部门下所有员工的所有信息 select * from emp where deptno = (select deptno from dept where loc='dallas'); .案例:查询跟JONES同样工作的员工的所有信息(包含JONES) select * from emp where job=(select job from emp where ename='jones') and ename!='jones';关联查询数据
使用where关联查询
.查看在new york工作的员工 select * from emp where deptno = (select deptno from dept where loc='new york');
使用内连接的关联查询
.查看在new york工作的员工 select * from emp join dept on emp.deptno=dept.deptno where dept.loc='new york'; .查看工资高于3000的员工,名字,工资,部门名,所在地 select e.ename,e.sal,d.dname,d.loc from emp e join dept d on e.deptno=d.deptno ; .查询emp表中员工的编号,姓名,职位以及所属部门的编号,名称 .查询emp表中员工的编号,姓名,入职时间以及所属部门的名称和地址 select emp.empno,emp.ename,emp.hiredate,emp.deptno,dept.loc from emp join dept on emp.deptno=dept.deptno
外连接
左外连接
右外连接
-查询hero表中 各职业(type)中 平均年龄最高的 职业名称和平均年龄
第一种实现方案: 通过limit得到一条最高的
,;
任何查询语句查询出来的结果都可以作为一张新表
- 第二种实现方案:通过子查询的嵌套 select type,avg(age) a from hero group by type having a=(select max(a) from (select type,avg(age) a from hero group by type) n);
上面第二种实现 因为平均年龄是个小数 所以会出现误差,如果想解决需要去掉小数点后面某位小数后进行比较 ,但是此种方案 不可取 太麻烦
-查询每个职业(type) 英雄总金额 最大的职业,并且显示结果只要职业的名称 -第一种解决方案 select type from hero group by type order by sum(money) desc limit 0,1 -第二种解决方案 select type from (select type,sum(money) s from hero group by type order by s desc limit 0,1)n;
-查询各种分类中 平均价格最高的分类 显示 分类的id和分类的名称
- 先得到分类的平均价格
select categoryid,avg(price) a from titem group by category_id
得到最高的平均价格,直接在上面代码上排序去第一条 select categoryid,avg(price) a from titem group by category_id
order by a desc limit 0,1 3.把查询出来的结果当成一张新表 select c.id,c.name from (select categoryid,avg(price) a from titem group by categoryid order by a desc limit 0,1)n join titemcategory c on n.categoryid=c.id
-查询 每个分类下 库存总量 最少的分类 该分类下的所有商品的信息
select category_id,sum(num) s from t_item where category_id is not null group by category_id order by s limit , select * from (select category_id,sum(num) s from t_item where category_id is not null group by category_id order by s limit ,)n join t_item on n.category_id=t_item.category_id
练习
- 每个部门的人数,根据人数排序 select deptno,count(*) c from emp group by deptno order by c;
- 每个部门中,每个主管的手下人数 select deptno,mgr,count(*) from emp group by deptno,mgr;
- 每种工作的平均工资 select job,avg(sal) from emp group by job;
- 每年的入职人数 select extract(year from hiredate) year,count(*) from emp group by year;
少于等于3个人的部门 select deptno,count(*) c from emp group by deptno having c<=3;
拿最低工资的员工信息
select * from emp where sal=(select min(sal) from emp);
只有一个下属的主管信息
select e.* from (select mgr,count(*) c from emp group by mgr having c=1)n join emp e on n.mgr=e.empno;
平均工资最高的部门编号
select deptno from emp group by deptno order by avg(sal) desc limit 0,1
下属人数最多的人,查询其个人信息
select * from emp where empno=(select mgr from emp group by mgr order by count(*) desc limit 0,1);
拿最低工资的人的信息
select * from emp where sal=(select min(sal) from emp);
最后入职的员工信息
select * from emp where hiredate = (select max(hiredate) from emp);
工资多于平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp);
查询员工信息,部门名称
select emp.*,dept.dname from emp join dept on emp.deptno=dept.deptno;
员工信息,部门名称,所在城市
select emp.*,dept.dname,dept.loc from emp join dept on emp.deptno=dept.deptno
DALLAS 市所有的员工信息 select e.* from emp e join dept d on e.deptno=d.deptno where d.loc='dallas';
按城市分组,计算每个城市的员工数量 select d.loc,count(*) from emp e join dept d on e.deptno=d.deptno group by d.loc
查询员工信息和他的主管姓名
select e.*,m.ename from emp e join emp m on e.mgr=m.empno
员工信息,员工主管名字,部门名 1.直接在第17题后面join select e.ename 员工名,m.ename 主管名,d.dname 部门名 from emp e join emp m on e.mgr=m.empno join dept d on e.deptno=d.deptno; 2.把第17题查询出来的数据当成一张新表 select n.ename,n.mname,d.dname from (select e.ename,e.deptno,m.ename mname from emp e join emp m on e.mgr=m.empno)n join dept d on n.deptno=d.deptno
案例:查询emp表中所有员工的编号,姓名,职位,工资以及该员工上级领导的编号,姓名,职位,工资 SELECT e.
EMPNO,e.ENAME,e.SAL,e.JOB,m.EMPNO,m.ENAME,m.JOB,m.SALFROM emp e JOIN emp m ON e.MGR=m.EMPNO案例:查询emp表中名字中没有字母'K'的所有员工的编号,姓名,职位以及所在部门的编号,名称,地址
select * from emp e join dept d on e.deptno=d.deptno where e.ename not like '%k%';
案例:查询dept表中所有的部门的所有的信息,以及与之关联的emp表中员工的编号,姓名,职位,工资
select * from dept d left join emp e on d.deptno=e.deptno
自关联查询
如果一张表中保存的数据存在层级关系如:
员工和直属上级领导、分类和上级分类、部门和直属部门
注意事项:查询数据时 把一张表当成两张表用
一对一关联
user userinfo
id 用户名 密码 id 性别 年龄 住址 电话 邮箱 工资 年龄
用户表和用户信息表
一对多关联
部门和员工
商品和分类
学生和班级:
**一对多的关系,在多的表中添加一个关联关系的字段**
多对多关联
老师表 和 学生表
**多对多必须使用中间表保存两张表之间的关系**
设连接方式和关联关系的区别
-连接方式:
使用sql语句查询存在关联关系的表的数据的时候 使用的查询方式 包括:内连接 外连接(左、右)
-关联关系:
数据表之间存在的逻辑关系 包括:1对1 1对多 多对多
数据库设计之权限管理
用户表 角色表 模块表
什么是权限管理
每个用户会有不同的权限 通过 用户 角色 模块 和 用户角色关系表、角色模块关系表来保存每个用户所对应的模块信息
如何设计多对多关系的表

查询用户名为 小明 的模块名 .先从user表中查询出小明的userid .通过userid 去 ur表中查询 多个roleid .通过roleid 去 rm表中查询 多个moduleid .通过moduleid 去 module表中查询 模块名
select modulename from module where moduleid in(select moduleid from rm where roleid in (select roleid from ur where userid=(select user_id from user where name='小明')));
-面试题:
.创建流水表 和 人物表 ),date timestamp,pid int);
),name ),rel ));
第三题: SELECT SUM(money) FROM trade WHERE DATE > STRTODATE('2018-02-15','%Y-%m-%d');
第四题: ;
第五题:
group by type
MySql学习笔记05的更多相关文章
- MySql学习笔记(一)之DQL常用查询
MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前, ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- 初识mysql学习笔记
使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...
- MySQL学习笔记-锁相关话题
在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因. Mysql常用存储引擎的锁 ...
- MySQL学习笔记-事务相关话题
事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
随机推荐
- 2017 ACM/ICPC Asia Regional Shenyang Online card card card
题意:看后面也应该知道是什么意思了 解法: 我们设置l,r,符合条件就是l=起始点,r=当前点,不符合l=i+1 学习了一下FASTIO #include <iostream> #incl ...
- Linux--7
一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...
- jquery——下载、使用
jQuery是目前使用最广泛的javascript函数库. 怎样安装? 这是下载地址:https://code.jquery.com/ minified是压缩版的 新建一个网页打开上面这个网址,ctr ...
- 007 Reverse Integer 旋转整数
Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example ...
- (转)linux配置网卡的命令
linux配置网卡的命令 原文:http://blog.51cto.com/lanxianting/1754923 1.配置命令 如果一台服务器需要通外网,能被远程连接,就得给这个台服务器配置ip,子 ...
- 【C#】C#委托使用详解(Delegates)
摘要 委托是C#编程一个非常重要的概念,也是一个难点.本文将系统详细讲解委托. 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻.说实话,每个人都委托都有不同的见解,因为看问题的 ...
- (六)Redis主从自动恢复-sentinel
原文地址,转载请注明出处: http://blog.csdn.net/qq_34021712/article/details/72026313 ©王赛超 准备工作:(1个master,2个sl ...
- 用汇编实现add函数
平台 macOS 工具 nasm clang 文件 main.c #include <stdio.h> int add(int a, int b); int main() { printf ...
- Java爬虫初体验
年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...
- IDEA运行时报错(IDEA不识别新语法):Error:java: Compilation failed: internal java compiler error
File-->setting...-->Buil,Execution,Deployment-->Compiler-->Java Compiler中,改一下Module,我的原来 ...