zoukankan      html  css  js  c++  java
  • MySQL 关于记录详细操作

    一、记录详细操作

    # [] 表示可选的
    # {}表示必选的
    #
    #     insert [into] 表名[字段名] value|values(字段值....);
    #     into 可省略
    #     [字段名] 可选
    #         如果写了 你后面的值 必须与 写的字段匹配
    #         不写  后面的值 必须和表的结构完全匹配
    #     value 插入一条记录
    #     values 插入多条记录
    # 
    #
    #     update 表名 set 字段名 = 新的值[,字段n = 新值n]  [where 条件]
    #     可以同时修改多个字段 用逗号隔开   注意最后一个字段不能加逗号
    #     where 可选
    #         有就 修改满足条件的记录
    #         没有就全部修改
    #
    #     delete from 表名 [where 条件]
    #     where 可选
    #         有就 删除满足条件的记录
    #         没有就全部删除
    #         如果你需要全部删除 请使用truncate table 表名
    #         delete 是逐行比对  删除 效率低
    #         delete删除的行号会保留
    # 
    # 查询
    #     完整的查询语句
    #     select  [distinct] {* | 字段名 | 聚合函数 | 表达式} from 表名
    #         [where 条件
    #         group by 字段名
    #         having 条件
    #         order by 字段名
    #         limit 显示的条数]
    # 
    #     注意: 关键字的顺序必须与上述语法一致
    # 
    # 
    #     简单查询 ******
    # 
    #     1.* 表示所有列 都显示
    #     2.也可以手动指定要显示的列  可以是多个
    #     3.distinct 用于去除重复的记录
    #         只取出完全相同的记录
    #         当然 你也可以手动指定要显示的列 从而来去重
    #    4.表达式  支持四则运算
    
    
        # 执行顺序
         def select()
            from() 打开文件
            # where() 读取每一行并判断是否满足条件
            # group() 对数据进行分组
            # having() 再分组之后进行过滤     having不单独出现 仅用于分组之后进行过滤
            # distinct() 去重
            # order() 用于对筛选后的数据 进行排序
            # limit() 限制显示的条数
            # 最后根据select后制定的字段来显示数据
    
    # 准备数据:
    create table stu(id int primary key auto_increment,name char(10),math float,english float); insert into stu values(null,"赵云",90,30); insert into stu values(null,"小乔",90,60); insert into stu values(null,"小乔",90,60); insert into stu values(null,"大乔",10,70); insert into stu values(null,"李清照",100,100); insert into stu values(null,"铁拐李",20,55); insert into stu values(null,"小李子",20,55);
        # 查询所有人的总成绩
    
    select name,english+math 总分 from stu;
    select name,english+10 英语 from stu;
    # 需要 在字段的数据前加上字段名:
    #  name:赵云   english:90  math:30
    #  需要使用字符串拼接函数
    #  concat(字符串)
    
     # 案列:
     select
     concat("name:",name),
     concat("english:",english),
      concat("math:",math)
      from stu;
    
    
    # 观光代码 
    select
    (case
        when english + math < 150 then
            concat(name," shit")
        when english + math >= 150 then
            concat(name," nice")
    end) 评语 from stu;
    # 对查询后的条件语句详解
    # 一、where
    #     从硬盘上读取数据时的一个过滤条件
    # 
    #     where支持的运算符见图1
    # 
    #     where 的筛选过程
    #     在没有索引的情况下  挨个比较  效率低
    #     所以我们应该给表添加索引
    # 
    # 二、group by
    #     作用 用于给数据分组
    #     为什么要分组?  思考生活为什么要分组
    #     1.在生活中是为了方便管理
    #     2.在数据库中是为了 方便统计
    
        # 准备数据
        create table emp (id int,name char(10),sex char,dept char(10),job char(10),salary double);
        insert into emp values (1,"刘备","","市场","总监",5800),
         (2,"张飞","","市场","员工",3000),
          (3,"关羽","","市场","员工",4000),
           (4,"孙权","","行政","总监",6000),
            (5,"周瑜","","行政","员工",5000),
             (6,"小乔","","行政","员工",4000),
              (7,"曹操","","财务","总监",10000),
               (8,"司马懿","","财务","员工",6000);
    
    #      按照部门给数据分组
    #      错误;select *from emp group by dept;
    #      正确;select dept from emp group by dept;
    #      有两种情况
    #      1.sql_mode中 没有设置 ONLY_FULL_GROUP_BY 显示每个组的第一条记录 没有意义 所以新版中 自带ONLY_FULL_GROUP_BY
    #      2.sql_mode中有设置 ONLY_FULL_GROUP_BY  直接报错
    #         原因是:  * 表示所有字段都要显示  但是 分组后 记录的细节被隐藏 只留下了
    #         这意味着:只有出现在group by 后面的字段才能被显示
    #         分组是为了统计分组数据  如何统计?
    #         需要使用到聚合函数
    # 
    # 
    # 聚合函数:
    #     将一堆数据经过计算,得到一个数据
    #     sum() 求和
    #     avg() 求平均数
    #     max()/min() 求最大值 / 最小值
    #     count() 个数
    
    
    # 2.查询每个部门有几个人
    select dept,count(*) from emp group by dept;
    
    # 3.计算每个部门的平均工资
    select avg(salary) from emp  group by dept;
    
    # 总结 什么时候需要使用分组   只要你的需求中 带有 每个这样的字眼 就需要分组
    #     每个岗位  每个部门  每个性别
    
    # 5.查询平均工资大于5000的部门
        select avg(salary) from emp where avg(salary) > 5000 group by dept;
        # where 语句后面 不能使用聚合函数
        select avg(salary) from emp;
    
        # 总结where 条件不能用于筛选分组后的数据
    
    
        # group_concat 用于分组后 将组中的某些字段拼接成字符串
        select  dept,group_concat(name) from emp group by dept;
    
    #     其实 没啥意义  为啥?  你为什么要分组?是为了统计数据    如果你不需要统计 就没有必要分组
    # 三、having
    #     用于对分组后的数据进行过滤
    #     having不会单独出现 都是和group by 一起出现
    # 
    #     与where的区别
    #         相同点: 都用于过滤数据
    #         不同点:
    #                 1.where是最先执行   用于读取硬盘数据
    #                   having 要等到数据读取完之后 才能进过滤 比where晚执行
    #                 2.where中不能使用聚合函数
    #                   having中可以
    # 
    #         需求:
    #       5.查询平均⼯工资⼤大于5000的部⻔
          select dept,avg(salary) from emp group by dept h0aving avg(salary) > 500;
    
          # 6.查询工资最高的人的姓名和他的工资
          #   需要用到子查询
    # 四、order by [desc,asc]
    #     用于对记录进行 排序
    # 
    #     desc为降序
    #     asc为升序
    
        # 按照工资的从低到高顺序 显示所有的员工
        select *from emp order by salary;
        # 默认为升序
    
        # 修改为降序
        select *from emp order by salary desc;
    
        # 按照每个部门的平均工资 降序排序
        select dept,avg(salary) from emp group by dept order by avg(salary) desc;
    
    
    # limit  
    #     用于限制显示的条数
    #     limit [start,]count
    
        # 看看表里前三条数据
        select *from emp limit 3;
    
        # 看看表里的3-5条
        select * from emp limit 2,3;
    
        # 查看工资最高的那个人的信息
        select *from emp order by salary desc limit 1;
    
        limit 常用于 数据的分页展示  比如腾讯新闻 的上拉加载新的而一页
        select *from emp limit 0,10; #第一页     页数 减1  乘以条数 得到起始位置
        select *from emp limit 10,10;# 第2页
        select *from emp limit 20,10;# 第3页
    
    # 补充:关于拷贝的详解如下:
    # 拷贝表 
    
    create table copy_table select *from customer ;
    # 拷贝结构 与数据
    create table copy_table select *from customer where 0 > 1;
    # 仅拷贝结构
    # 
    # 共同点: 索引 不能拷贝   描述不能拷贝(自增)
  • 相关阅读:
    HBase- 安装单机版HBase
    javascript中的设计模式之模板方法模式
    win 设置自动启动软件
    php高精度加减乘除
    frp实现内网穿透,实现夸服务器访问
    OCM 12c 直考预备知识点
    Oracle 19c New Features : Active Data Guard DML Redirect
    3级搭建类302-Oracle 19c RAC 双节点搭建
    VMWare WorkStation 15.5 配置RAC共享存储节点二无法识别共享磁盘UUID解决办法
    你还在争论 count(*) 与 count(column) 哪个更快?
  • 原文地址:https://www.cnblogs.com/ageliu/p/9651649.html
Copyright © 2011-2022 走看看