复习

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. 左外和右外

练习

  1. 每个部门的人数,根据人数排序

  2. 每个部门中,每个主管的手下人数

  3. 每种工作的平均工资

  4. 每年的入职人数

  5. 少于等于3个人的部门

  6. 拿最低工资的员工信息

  7. 只有一个下属的主管信息

  8. 平均工资最高的部门编号

  9. 下属人数最多的人,查询其个人信息

  10. 拿最低工资的人的信息

  11. 最后入职的员工信息

  12. 工资多于平均工资的员工信息

  13. 查询员工信息,部门名称

  14. 员工信息,部门名称,所在城市

  15. DALLAS 市所有的员工信息

  16. 按城市分组,计算每个城市的员工数量

  17. 查询员工信息和他的主管姓名

  18. 员工信息,员工主管名字,部门名

  19. 员工信息,部门名,和部门经理

  20. 员工和他所在部门名

  21. 案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,根据工资的等级进行升序排列

  22. 案例:查询emp表中所有员工的编号,姓名,职位,工资以及该员工上级领导的编号,姓名,职位,工资

  23. 案例:查询emp表中名字中没有字母'K'的所有员工的编号,姓名,职位以及所在部门的编号,名称,地址

  24. 案例:查询dept表中所有的部门的所有的信息,以及与之关联的emp表中员工的编号,姓名,职位,工资

  25. 案例:查询emp表中所有员工的编号,姓名,职位,工资以及工资的等级,该等级的最低工资,按照员工的编号进行升序排列。

MySql学习笔记04的更多相关文章

  1. MySQL学习笔记04 插入中文时出现ERROR 1366 (HY000)

    1 环境: MySQL Server 6.0  命令行工具 2 问题 :  插入中文字符数据出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\ ...

  2. MySql学习笔记(一)之DQL常用查询

    MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前, ...

  3. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  4. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  5. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  6. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  7. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  8. MySQL学习笔记-锁相关话题

    在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因.   Mysql常用存储引擎的锁 ...

  9. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

随机推荐

  1. mybatis批量处理sql

    转载大神 https://www.cnblogs.com/xujingyang/p/8301130.html

  2. jdb应用

    场景: 外网可以登录远程主机,但是因为安全限制,不能在外网直接访问docker应用的端口,因此不能远程调试.远程主机shell内部可以连接docker应用,也没有图形界面,没有log,考虑使用原始的j ...

  3. 练习二十二:python兵乓求比赛顺序练习,关于连个兵乓球队进行比赛

    已知有两支兵乓球队进行比赛,每队各出3人: 甲队有a,b,c三人,乙队有x,y,z三人,已抽签决定比赛名单 问题:有人向队员打听比赛名单.a说他不和X比,c说他不和x,z比,程序找出比赛对手 方法一: ...

  4. spring boot(10) 基础学习内容

    A Spring boot(10) 基础学习内容 B SpringBoot(16) 基础学习内容

  5. 再谈Drupal 7.X的性能优化运行速度问题

    D6升级D7之后,性能着实让人头大,不妨参考下面文章,另外站内搜索DOOOOR里其他优化文章,中西医结合吧.其中CDN和BOOST效果还可以,其他的没试过. 1,服务器 Web服务器建议,推荐使用HA ...

  6. Promise 用es5的基础实现

    只实现 then 和 catch function promise(fn) { var state = 'pending'; // 声明函数 var nowResolve = function (ar ...

  7. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  8. python.h没有那个文件或目录解决方法

    我用的是Deepin Linux,这应该是linux平台的问题,别的linux os也是执行安装,命令不同而已,windows和Mac不太清楚. 如果你使用的是python2.x,那么使用下面的语句: ...

  9. bootstrap Table 服务端处理分页 后台是.net

    要考虑函数可被可重复使用(调用),需要将可变化的变为参数封装起来 function HQCreatTables(ob) { var option = { method: 'get', dataType ...

  10. 解决移动端浏览器页面 X轴横向滚动条问题

    写web端页面的时候,总是会出现横向滚动条,即 X 轴滚动条,导致页面左右滑来滑去. 即使设置了 body,html {overflow-x:hidden;width:100%;} 也无法生效. 解决 ...