zoukankan      html  css  js  c++  java
  • 记录的详细操作

    拷贝表
    拷贝结构 与数据
    create table copy_table select *from customer ;
    仅拷贝结构
    create table copy_table select *from customer where 0 > 1;
    共同点: 索引 描述(自增) 不能以下语法中

    记录的详细操作
    [] 表示可选的
    {}表示必选的

    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后制定的字段来显示数据


    where
    从硬盘上读取数据时的一个过滤条件
    在没有索引的情况下 挨个比较 效率低
    where 条件不能用于筛选分组后的数据


    group by
    作用:给数据分组方便统计

    按照某一字段给数据分组select *from 表名 group by 字段名
    有两种情况
    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() 个数



    having
    用于对分组后的数据进行过滤
    having不会单独出现 都是和group by 一起出现

    与where的区别
    相同点: 都用于过滤数据
    不同点:
    1.where是最先执行 用于读取硬盘数据
    having 要等到数据读取完之后 才能进过滤 比where晚执行
    2.where中不能使用聚合函数
    having中可以



    order by [desc,asc]
    用于对记录进行 排序
    desc为降序
    asc为升序


    limit
    用于限制显示的条数
    limit [start,]count
    # 看看表里前三条数据
    select *from 表名 limit 3;
    # 看看表里的3-5条
    select * from 表名 limit 2,3;
    limit 常用于 数据的分页展示 比如腾讯新闻 的上拉加载新的而一页
    select *from emp limit 0,10; 第一页 页数 减1 乘以条数 得到起始位置
    select *from emp limit 10,10; 第2页
    select *from emp limit 20,10; 第3页


    多表查询的方式
    1.笛卡尔积查询
    用坐标中的一条记录 去链接另一张表的所有记录
    就像是把 两张表的数据做了一个乘法
    用 where 筛选出正确的数据
    select *from emp,dept where emp.dept_id = dept.id;

    on关键字
    作用 用于多表查询是 进行条件限制

    2.内连接查询
    inner join
    select *from emp inner join dept on emp.dept_id = dept.id;

    3.左外连接
    left join
    左边表中的数据完全显示 右边表中的数据匹配上才显示
    select *from emp left join dept on emp.dept_id = dept.id;

    4.右外连接
    right join
    左边表中的数据匹配上才显示 右边表中的数据完全显示
    select *from emp right join dept on emp.dept_id = dept.id;

    5. 全外链接
    full join mysql不支持 oracle支持
    可以通过union 间接实现
    union 表示合并查询 意思是把多个查询结果合并在一起显示
    要求是 被合并的表结构必须相同,默认去除重复
    union all合并但是不去除重复

    select *from emp right join dept on emp.dept_id = dept.id
    union
    select *from emp left join dept on emp.dept_id = dept.id;


    总结:多表链接 在书写时 按照填空来书写
    如果左边要全部显示 用left join
    右边全部显示 用right join
    全部显示 把左链接的结果和右链接的结果 合并
    当然 也可以更多表一起查 但是 没有意义 并且你要尽量避免 太多表 一起查
    最多三张 在多对多的时候


    子查询
    将上一次查询的结果 作为本次查询的原始数据(或是查询条件)
  • 相关阅读:
    【Mysql+shell】查询结果导出到文件,文件数据导入到数据库
    【mysql】IP地址整数int和varchar的转换
    【JVM】Class结构之常量池
    【Java】Java初始化过程总结
    【转】探索 ConcurrentHashMap 高并发性的实现机制
    【并发编程】使用BlockingQueue实现<多生产者,多消费者>
    【FTP】FTP文件上传下载-支持断点续传
    【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控
    【大数据】基本概念--01(转)
    【Java】Java环境变量配置
  • 原文地址:https://www.cnblogs.com/liangchengyang/p/9648522.html
Copyright © 2011-2022 走看看