MySQL基础3——常用命令

1.MySQL分组求TopN

 1 分组求出成绩之和
 2 SELECT sum(score),studentId from score GROUP BY studentId; 
 3 
 4 两表联合
 5 select * from student left join (SELECT sum(score) as score,studentId from score GROUP BY studentId) as stu on student.id =stu.studentId;
 6 
 7 分组求TopN
 8 select * from 
 9 (select * from student left join 
10 (SELECT sum(score) as score,studentId from score GROUP BY studentId) as stu on student.id =stu.studentId) as s1 
11 where 3>
12 (select count(*) from
13 (select * from student left join (SELECT sum(score) as score,studentId from score GROUP BY studentId) as stu on student.id =stu.studentId)as s2 where s1.sex =s2.sex and s1.score <s2.score);

 

2.求每七天的平均数

 1 时间相减
 2  SELECT DATEDIFF(datetime,'2018-6-1') from test;
 3 序号以7做运算得到一个划分的范围,向下取整得到具体范围
 4   SELECT DATEDIFF(datetime,'2018-6-1')/7 from test;
 5     SELECT Floor(DATEDIFF(datetime,'2018-6-1')/7)*7 from test;
 6 每一周的第一天和最后一天相加
 7  每一周的第一天
 8 select DATE_ADD('2018-6-1',INTERVAL Floor(DATEDIFF(datetime,'2018-6-1')/7)*7 day)from test;
 9 
10  每一周的最后一天
11 select DATE_ADD('2018-6-1',INTERVAL Floor(DATEDIFF(datetime,'2018-6-1')/7)*7+6 day)from test;
12 拼接
13 select CONCAT(
14 (select DATE_ADD('2018-6-1',INTERVAL Floor(DATEDIFF(datetime,'2018-6-1')/7)*7 day)),'~',
15 (select DATE_ADD('2018-6-1',INTERVAL Floor(DATEDIFF(datetime,'2018-6-1')/7)*7+6 day)))from test;

3.连表联查

3.1连表联查
    union:结果集进行合并(纵向合并)
  格式:
    查询语句 union 查询语句
  注意:
    查询列数必须相同
    字段为第一个sql语句的字段
    union默认去重
    union all不去重

3.2 left join(以左表为基准关联右表中的数据)
  格式:
    select * from 左表 left join 右表 on 关联条件;
  注意:
    左表匹配不到右表,以null不全
    右表匹配不到左表,不显示


3.3right join(以右表为基准关联左表中的数据)
  格式:
    select * from 右表 left join 左表 on 关联条件;
  注意:
    左表匹配不到右表,不显示
    右表匹配不到左表,以null不全

3.4 inner join(求两张表的交集)
  格式:
    select * from 右表 inner join 左表 on 关联条件;
  注意:
    关联条件可写可不写
    如果不写可以写为select * from 表1,表2 where 子句;

 

4 case的使用

1 -- case
2 -- when 条件一 then 要显示的值1或者语句
3 -- when 条件一 then 要显示的值1或者语句
4 -- when 条件一 then 要显示的值1或者语句
5 -- ...
6 -- else 要显示的值1或者语句
7 -- end

 

5.MySQL视图:由查询结果得到的一张虚拟表(临时表,虚表),虚拟表和基本表有一对一和一对多的关系

5.1 创建视图

    create view 视图名称 as 查询语句

5.2 视图可以实现的功能

    一对一(数据和基本表一样):增删改查
    一对一(数据由基本表聚合):查
    一对多(数据由基本表聚合):查
    一对多(数据由连表联查):查改
注意:虚拟表不存储任何数据,数据存储在基本表中,基本表当中数据发生改变虚拟表中的数据也能发生改变
创建视图,查询语句中不能出现子查询(不能作为一张表,可以作为结果进行筛选),把子查询作为视图之后再创建视图

5.3 查询视图结构:
    desc 视图名称;
    show create view/table 视图名称;

5.4 删除视图:
    drop view 视图名称; 

 

6. MySQL执行计划:     

        from--where--group by--select--having--order by
        from:需要从哪个数据表检索数据
        where:过滤表中数据的条件
        group by:如何将上面过滤出的数据分组
        having:对上面已经分组的数据进行过滤的条件
        select:查看结果集中的哪个列,或列的计算结果
        order by :按照什么样的顺序来查看返回的数据

7. 索引
    添加:
      alter table 表名 add index 索引名称(字段);
    删除:
      alter table 表名 drop index 索引名称;
    注意:每个字段都可以添加索引
      主键默认含有索引
      不要每个字段都添加索引(索引也需要消耗资源),只需要给常用字段添加索引

8. 事务:批处理,保证多个sql语句一起执行成功或一起执行失败(回滚撤销当前操作)

  开始事务:
      begin;
  回滚事务:
      rollback;
  提交事务:
      commit;
  结束事务:
      end;

  注意:没有commit或end之前,事务中的所有操作都是临时的(在缓存中的)
    commit或end之后,把这些临时的(在缓存中的)数据提交到原始数据中进行修改
    end默认执行commit;

 

9. shell操作mysql

1 #!/bin/sh
2 MYSQL="mysql -hmaster -uroot -p123456"
3 sql="select * from shujia.student where sex='0'"
4 result="$($MYSQL -e "$sql")"
5 echo "$result"

 

 

 

  

 

posted @ 2021-09-08 16:15  lmandcc  阅读(37)  评论(0编辑  收藏  举报