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)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...
随机推荐
- mybatis批量处理sql
转载大神 https://www.cnblogs.com/xujingyang/p/8301130.html
- jdb应用
场景: 外网可以登录远程主机,但是因为安全限制,不能在外网直接访问docker应用的端口,因此不能远程调试.远程主机shell内部可以连接docker应用,也没有图形界面,没有log,考虑使用原始的j ...
- 练习二十二:python兵乓求比赛顺序练习,关于连个兵乓球队进行比赛
已知有两支兵乓球队进行比赛,每队各出3人: 甲队有a,b,c三人,乙队有x,y,z三人,已抽签决定比赛名单 问题:有人向队员打听比赛名单.a说他不和X比,c说他不和x,z比,程序找出比赛对手 方法一: ...
- spring boot(10) 基础学习内容
A Spring boot(10) 基础学习内容 B SpringBoot(16) 基础学习内容
- 再谈Drupal 7.X的性能优化运行速度问题
D6升级D7之后,性能着实让人头大,不妨参考下面文章,另外站内搜索DOOOOR里其他优化文章,中西医结合吧.其中CDN和BOOST效果还可以,其他的没试过. 1,服务器 Web服务器建议,推荐使用HA ...
- Promise 用es5的基础实现
只实现 then 和 catch function promise(fn) { var state = 'pending'; // 声明函数 var nowResolve = function (ar ...
- 创建有输出参数的存储过程并在c#中实现DataGridView分页功能
不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...
- python.h没有那个文件或目录解决方法
我用的是Deepin Linux,这应该是linux平台的问题,别的linux os也是执行安装,命令不同而已,windows和Mac不太清楚. 如果你使用的是python2.x,那么使用下面的语句: ...
- bootstrap Table 服务端处理分页 后台是.net
要考虑函数可被可重复使用(调用),需要将可变化的变为参数封装起来 function HQCreatTables(ob) { var option = { method: 'get', dataType ...
- 解决移动端浏览器页面 X轴横向滚动条问题
写web端页面的时候,总是会出现横向滚动条,即 X 轴滚动条,导致页面左右滑来滑去. 即使设置了 body,html {overflow-x:hidden;width:100%;} 也无法生效. 解决 ...