MySql学习笔记04
复习
day01 数据库相关:
create database db4 character set utf8; show databases; show create database db4; drop database db4; use db4;
表相关:
create table t1 (字段); show tables; desc t1; show create table t1; create table t2 (字段)engine=innodb/myisam charset=utf8;
修改:
rename table t2 to t3;
alter table t2 add age int;
change age age2 int;
modify age double after id;
drop age;
drop table t2;
数据相关:
,,),(,,) ,); ; ; select * from t1; ;
day02:
主键 primary key 唯一 非空 auto_increment not null comment ‘’ `` 事务 ; show variables like '%autocommit%' begin commit rollback 数据库分类 DDL:数据定义语言 craete alter drop DML: 数据操作语言 insert update delete select DQL select TCL:事务控制语言 begin commit rollback DCL:数据控制语言 控制表的权限 数据类型 整数 int bitint 浮点数 double decimal(m,d) 日期 date time datatime timestamp 字符串 char varchar text 其他
day03
别名
去重 distinct
where
and or
,,)
between x and y
like _ 单个未知 %多个未知
order by 字段名1,字段名2
limit ,
concat(s1,s2,s3)
数值计算
,)
日期:
now() curdate() curtime()
date(now()) time(now())
extract(year from now())
month day hour minute second
date_format(now(),'') %Y y m c d H h i s
str_to_date('','') 把字符串时间转成date
age = ifnull(x,y);
聚合函数
sum() avg() count(*) max() min()
字符串函数
char_length()
instr(x,y)
locate(x,y)
insert(str,begin,length,newStr)
lower() upper()
left() right()
,)
trim()
repeat ()
replace(str,'a','b')
reverse('abc')
数学
floor()
)
truncate
,
GROUP BY 语句
-查询hero表中男女的平均年龄
select sex,avg(age) from hero group by sex;
-查询hero表 每类型的平均年龄
select type,avg(age) from hero group by type;
-查询 每种类型中 价格最贵的
select type,max(money) from hero
group by type;
-查询每种类型的人数
select type,count(*) from hero
group by type;
-查询 每种性别 平均价格,最大年龄和最便宜的价格 是多少
select sex,avg(money) 平均价格,max(age) 最大年龄,min(money) 最便宜价格 from hero
group by sex;
-查询 每种类型 年龄在30岁以下的人数是多少
select type,count(*) from hero
group by type;
-查询 每种类型下男女各多少人
select type,sex,count(*) from hero group by type,sex;
-- 查询出每个分类下商品的库存总量
select category_id,sum(num)
from t_item
group by category_id;
-- 查询出每个分类商品所对应的平均单价
select category_id,avg(price)
from t_item
group by category_id;
-- 查询每个部门各多少人
select deptno,count(*)
from emp
group by deptno;
1.案例:查询emp表中每个部门的编号,人数,工资总和,最后根据人数进行升序排列,如果人数一致,根据工资总和降序排列。
select deptno,count(*) c,sum(sal) s
from emp
group by deptno
order by c,s desc;
2.案例:统计每个部门下工资在1000~3000之间的部门的编号,平均工资,最低工资,最高工资,根据平均工资进行升序排列。
select deptno,avg(sal) a,min(sal),max(sal) from emp
group by deptno
order by a;
3.案例:查询含有上级领导的员工,每个职业的人数,工资的总和,平均工资,最低工资,最后根据人数进行降序排列,如果人数一致,根据平均工资进行升序排列
select job,count(*) c,sum(sal),avg(sal) a,min(sal)
from emp
where mgr is not null
group by job
order by c desc,a;
练习
-- 1. 每个部门中,每个主管的手下人数
select deptno,mgr,count(*)
from emp
group by deptno,mgr;
-- 2. 每种工作的平均工资
select job,avg(sal)
from emp
group by job;
-- 提高题 3. 每年的入职人数
select extract(year from hiredate) y,count(*)
from emp
group by y;
有条件分组统计
HAVING 子句
-聚合函数不能写在where 后面 因为执行where的时候聚合函数还没有执行
-having要和聚合函数结合使用,虽然可以写普通字段的条件 但是普通字段的条件推荐写在 where后面
-查询hero表中平均年龄在30岁以下的类型
select type,avg(age)
from hero
group by type
order by 字段名
SQL关键字执行顺序: 1.from 从那张表 2.where 普通字段过滤 3.group by 分组 4.having 聚合字段过滤 5.order by 排序 6.select 筛除
-查询所有分类商品所对应的库存总量中,高于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;
回顾:group by 和 having
课堂练习
1.案例:查询emp表中,每个部门的平均工资高于2000的部门的编号,部门的人数,平均工资, 最后根据平均工资进行升序排列。
select deptno,avg(sal) a,count(*)
from emp
group by deptno
order by a;
2.案例:查询emp表中名字中不是以'K'开头的信息,每个部门的最低工资高于1000的部门的编号,工资总和,平均工资以及最低工资,最后根据平均工资进行升序排列。
select deptno,min(sal) m,sum(sal),avg(sal) a
from emp
where ename not like 'k%'
group by deptno
order by a;
3.案例:查询emp表中部门编号是10,30号部门的员工,每个职业的最高工资低于5000的职业的名称,人数,平均工资,最高工资,最后根据人数进行升序排列,如果人数一致,根据最高工资进行降序排列。
select job,max(sal) m,count(*) c,avg(sal) a
from emp
,)
group by job
order by c,m desc;
4.案例:查询emp表中,每个部门的编号,人数,工资总和,最高工资以及最低工资,过滤掉最高工资是5000的部门,根据部门的人数进行升序排列,如果人数一致,则根据最高工资进行降序排列。
select deptno,count(*) c,sum(sal) s, max(sal) max, min(sal) min
from emp
group by deptno
order by c,max desc;
5.案例:查询emp表中工资在1000~3000之间的员工信息,每个部门的编号,工资总和,平均工资,过滤掉平均工资低于2000的部门,按照平均工资进行升序排列
select deptno,sum(sal) s,avg(sal) a
from emp
group by deptno
order by a;
6.案例:查询emp表中名字不是以‘S’开头,每个职位的名字,人数,工资总和,最高工资,过滤掉工资是3000的职位,根据人数进行升序排列,如果人数一致,根据工资总和进行降序排列。
select job,count(*) c,sum(sal) s,max(sal) m
from emp
where ename not like 's%'
group by job
order by c,s desc;
7.案例:查询emp表的信息,每个职位的名称,人数,平均工资,最低工资,过滤掉平均工资是3000的职位信息,根据人数进行降序排列,如果人数一致,根据平均工资进行升序排列
select job,count(*) c,avg(sal) a,min(sal)
from emp
group by job
order by c desc,a;
子查询
MySQL子查询
思考:查询攻击力最高的英雄的所有信息
-如果不用子查询 需要写两行sql
;
-通过子查询 把两条sql语句整合到一起
select * from hero where att=(select max(att) from hero);
-练习:查询年龄大于平均年龄的英雄信息
select * from hero where age>(select avg(age) from hero);
**能用where用where 不能才用having**
**having要和group by结合使用**
.案例:拿最低工资的员工信息
select * from emp
where sal=(select min(sal) from emp);
.案例:工资多于平均工资的员工信息
select * from emp
where sal>(select avg(sal) from emp);
.案例:最后入职的员工信息
select * from emp
where hiredate=(select max(hiredate) from emp);
.案例:查询出哪些分类在商品表中出现过,并查询此分类的详情
-得到商品表里出现的分类id
select distinct category_id from t_item
-从分类表里查询商品表出现的分类信息
select * from t_item_category
where id in (select distinct category_id from t_item);
.案例:查询工资高于20号部门最高工资的员工的所有信息
select * from emp where sal>(select max(sal) from emp
);
.案例:查询emp表中姓名是‘KING’所属的部门的编号,名称
select * from dept
where deptno=(select deptno from emp where ename='king');
.案例:查询部门名称是SALES的部门下所有员工的编号,姓名,职位,以及所属部门的编号
select empno,ename,job,deptno
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';
关联查询数据
查看每个员工的名字以及所在部门的名字
select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;
查看每个商品及所对应的分类名称
select i.title,c.name from t_item i,t_item_category c where i.category_id=c.id;
如果不写关联关系
笛卡尔积
通常情况下 笛卡尔积是无用的结果
是两张表相乘得到的结果
切记工作时不要出现这种情况
.查看在new york工作的员工
select e.ename,d.loc
from emp e,dept d
where e.deptno=d.deptno
and d.loc='new york';
.查看工资高于3000的员工,名字,工资,部门名,所在地
select e.ename,e.sal,d.dname,d.loc
from emp e,dept d
where e.deptno=d.deptno
;
等值连接/内连接
-等值连接
select * from A,B
-内连接
select * from
A [inner] join B
on A.x=B.x
.查看在new york工作的员工
select e.ename,d.loc
from emp e join dept d
on e.deptno=d.deptno
where d.loc='new york';
.查看工资高于3000的员工,名字,工资,部门名,所在地
select e.ename,e.sal,d.dname,d.loc
from emp e join dept d
on e.deptno=d.deptno
;
.查询价格高于1000的dell商品,显示商品名字,库存,商品分类名,结果按库存降序排序
内连接只能查询出有关联关系的数据
select
from type t right join hero h
on t.id=h.typeid
左外连接 以join左边的表为基准 查询结果显示左边表的所有数据,没有关联关系的显示null select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno 右外连接 以join右边的表为基准 查询结果显示右边表的所有数据,没有关联关系的显示null select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;
关联查询数据案例
代码实践
-- 查询出所有可以匹配的商品分类及商品数据
select *
from t_item i join t_item_category c
on i.category_id=c.id;
-- 查询出所有的分类,以及与之匹配的商品
select *
from t_item i right join t_item_category c
on i.category_id=c.id;
-- 查询出所有的商品,以及与之匹配的分类
select *
from t_item i left join t_item_category c
on i.category_id=c.id;
强化练习
代码实践
-- 查询出所有有地址的用户
select *
from emp join dept
on emp.deptno=dept.deptno
where dept.loc is not null;
-- 查询出所有用户,同时查出这些用户的地址
select *
from emp left join dept
on emp.deptno=dept.deptno;
-- 查询出所有的地址,同时查出地址所对应的用户信息
select *
from emp right join dept
on emp.deptno=dept.deptno;
课程回顾: 1. group by 分组 having 聚合函数的条件 2. 子查询 在sql语句中嵌套dql 可以多层 3. 关联查询 等值连接 和 内连接 4. 左外和右外
练习
每个部门的人数,根据人数排序
每个部门中,每个主管的手下人数
每种工作的平均工资
每年的入职人数
少于等于3个人的部门
拿最低工资的员工信息
只有一个下属的主管信息
平均工资最高的部门编号
下属人数最多的人,查询其个人信息
拿最低工资的人的信息
最后入职的员工信息
工资多于平均工资的员工信息
查询员工信息,部门名称
员工信息,部门名称,所在城市
DALLAS 市所有的员工信息
按城市分组,计算每个城市的员工数量
查询员工信息和他的主管姓名
员工信息,员工主管名字,部门名
员工信息,部门名,和部门经理
员工和他所在部门名
案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,根据工资的等级进行升序排列
案例:查询emp表中所有员工的编号,姓名,职位,工资以及该员工上级领导的编号,姓名,职位,工资
案例:查询emp表中名字中没有字母'K'的所有员工的编号,姓名,职位以及所在部门的编号,名称,地址
案例:查询dept表中所有的部门的所有的信息,以及与之关联的emp表中员工的编号,姓名,职位,工资
案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,该等级的最低工资,按照员工的编号进行升序排列。
MySql学习笔记04的更多相关文章
- MySQL学习笔记04 插入中文时出现ERROR 1366 (HY000)
1 环境: MySQL Server 6.0 命令行工具 2 问题 : 插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...
- 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)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
随机推荐
- 【ACM】拦截导弹 - 0-1背包问题
拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
- JavaScript 获取 Url 上的参数(QueryString)值
获取URL里面传的参数,在Js中不能像后台一样使用Request.QueryString来获取URL里面参数,下面介绍两种方式用来获取参数 方式一:使用split分隔来获取,这种方法考试了地址中包含了 ...
- 使用tortoise git将一个现有项目推送到远程仓库
一.安装文件: 1.git https://git-scm.com/downloads 2.tortoise git https://tortoisegit.org/download/ 二.将一个现有 ...
- Sqoop Export HDFS
Sqoop Export应用场景——直接导出 直接导出 我们先复制一个表,然后将上一篇博文(Sqoop Import HDFS)导入的数据再导出到我们所复制的表里. sqoop export \ -- ...
- Practice encryptedblobstore
C++ BlobStore 使用范例(C++伪代码) 一个可能的接口设计示例(C++) Java BlobStore 使用范例(Java伪代码) 一个可能的接口设计示例(Java) 一个基于Key/V ...
- grep-检索文本
grep -r bes.dsf.server.zookeeper ./ //递归搜索,不支持指定文件类型 find ./ -name "*.entity.xml" -exec gr ...
- ThinkPHP- 3.1
基础: 1. 基础概念 LAMP LAMP是基于Linux,Apache,MySQL和PHP的开放资源网络开发平台.这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境.名字来源于每个程序的第一 ...
- Spring Cloud Ribbon负载均衡
目录 一.简介 二.客户端负载均衡 三.RestTemplate详解 GET请求 POST请求 PUT请求 DELETE请求 一.简介 Spring Cloud Ribbon是一个基于HTTP 和 ...
- ASP.NET Core集成微信登录
工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com ...
- JavaSE_5_线程
1.多线程中的i++线程安全吗?为什么? 不安全,因为每个线程都有自己的工作内存,每个线程需要对共享变量操作时必须把共享变量从主内存中加载到自己的工作内存,等完成操作后再保存到内存中,如果一个线程运算 ...