zoukankan      html  css  js  c++  java
  • 百度学习笔记---查询数据库

    注:转载于百度-百家号-人人都是产品经理

    ***本文从实际工作中梳理出7个方面的总结:数据库,常用sql语句,数据传输,文档语法,逻辑规则,交互方案,扩展技能***

    随着数据量增大,业务扩展,服务器吃紧,加上开发跑路比较频繁,常常导致后端网站很‘烂’,这可能是你一段时间内不得不面对的常态。

    这就决定了后端产品思维更要接近技术,绕不开百万级数据,业务逻辑,数据规则。在工作中无法像前端产品那样做甩手掌柜:反正我要的告诉你了,怎么实现我不管。而事实上往往还要产品给开发一两个建议方案,并告诉他要避免那些坑,尽管这些都是前任的锅。

    一、数据库

    1.理解数据库

    (1)、前段看到的内容,如果不是代码写死的,那么就是从数据库读取的(本地缓存的数据也算)。

    (2)、早期比较流行的数据库模型有三种:层次式数据库,网络式数据库和关系型数据库。现在最常用的即是关系型数据库和非关系型数据库。

    (3)、关系型数据库:mysql为典范,以二维报表的形式展示,因此MySQL和PHP的组合是比较完美的(表报多)

    (4)、比MySQL强大的关系型数据库还有Oracle.b比如1000w条数据以上级别的数据,一般用的比较多的是Oracle。

    (5)、MySQL每张表只能用一个主键。但是开发会创建多个字段的索引。目的是为了提高查询速度。至少提升上百倍的查询速度。

    (6)、非关系型数据库(NoSQL):NoSQL是作为传统关系型数据库的一个有效补充,处理对储存要求高,并且并发处理较高的场合。

    Mongodb:数据是散漫的,以键值对的形式储存。

    (7)、分布式账本数据库:区块链的数据库存储方式。也有叫时间轴数据库。略知即可

    (8)、图片的存储比较特别:

    一种是:直接把图片转换成二进制文件存储在数据库中。适合储存量少且重要的图片信息。

    另一种是:储存图片的路径到数据库,用的时候直接调用路径给image等图像控件即可。适合储存量大但是不是太重要的图片。

    2、实战注意

    (1)、建表的时候一般会增加冗余字段,比如unique_code,用于储存备用字段来去重。

    (2)、建表的时候可以增加预留字段:当数据量大的时候很难再加新字段,所以预估到数据增长较快的时候,一定要预留几个字段空位,便于日后数据表扩展。

    (3)、当一个表无法再加字段的时候可以增加扩展表,后缀 _ext ,于原表通过 id 关联。

    (4)、新增表字段:要考虑到数据库初始化比如历史数据全部为空或者刷为某一个值。

    (5)、统一规范表名前缀,比如可以定义 t_ 前缀表示类型, f_ 前缀表示从其他系统获取。

    二、SQL语句

    1、基本函数

    (1)、磁盘经理一般不去建表,该表,所以 create table <tablename> , alter table <tablename> , drop table <tablename> 知道就可以。产品经理更多是的查询、统计、或者写出更新/插入/删除语句让开发执行。

    (2)、select 语句是使用最多的,配合函数: 

      count:统计记录数

      avg:计算字段值的平均值

      sum:计算字段值的总和

      max:查询字段的最大值

      min:查询字段的最小值

    (3)、排序:order by 字段 desc/asc

      例如:select * from financ_order order_by update_time desc limit 3;

    (4)、不包含某个字段

      例如:select * from table where 字段 not in (select 字段 from table where name = 'c');

    (5)、包含某个字段

      例如:select * from table where 列名 like 'a%'; 利用模糊查询

    (6)、查询表 p_product 中的第10,11,12,13行数据

      例如:select * from product limit 4 offset 9;

      例如:select * from product limit 9,4;

    (7)、in 括号内为或的关系

      例如:select name from product where goods in ('1037','1027') and (shelf_time > '2018-10-09 16:22:00' or title like '_tylish%');

    (8)、去重搜索

      例如:select distinct(goods) from tablename;

    (9)、GROUP BY 语句进行组合

      例如:select customer,SUM(OrderPrice) from orders GROUP BY custome;

    (10)、查询前10条记录

      例如:select top10 *  from table 1 where xxxx;

    (11)、连表查询用join

       Inner Join 最常见,叫做内连接,可以缩写成Join,找的是两张表共同拥有的字段。

       Left Join 叫做左连接,以左表(join符号前面的那张表)为主,返回所有的行,如果右表用共同字段,则以并返回,如果没有,则为空。

          A  Full Join  B  =  A  Left  Join  B  +  A  Right  Join  B  -  A  lnner  Join  B

         还有其他连接方式:

    (12)、查表 f_oms 中字段 order_number 值相同的且数据量大于1个

      例如:select order_number, count(*) from f_oms group by order_number having count(*) > 1;

    (13)、从 ' Persons ' 表中选取居住的城市不已‘A’ 或者 ‘L’ 或者 ‘N’ 开头的人:

      例如:select * from Persons where city like '[!ALN]%';

    2、技巧

    (1)、and 优先级高于 or ,一般这种混合的句子建议使关系清晰。

      例如: A > 0 or B < 0 and c = 0,相当于 A > 0 or (B < 0 and c = 0)

    (2)、为了防止数据导出因位数过长而使字符串变成科学计数法,导出的文件格式选择XLS格式的文档。

    (3)、提升查询速度,SQL语句快于MySQL自带的筛选选项,并且自带的只显示前一千条。所以优先使用语句查询。

    (4)、导出的表头换成汉子注释的方式:

      例如:select a.ds_sn as '编码' , a.pdt_name as '名称' from p_pro;

    (8)、is 和 = 有时是不同的,比如写作 is null ,而不写 = null

  • 相关阅读:
    Parrot虚拟机
    JAVA数据结构二叉排序树
    mysql基本操作
    ruby数组操作
    JAVA核心技术之球体碰撞多线程版
    JAVA数据结构选择排序
    JAVA的线程让步
    Perl 与数学:一份快速参考
    科学计算软件包python(x,y)简介
    JAVA数据结构解析数学表达式
  • 原文地址:https://www.cnblogs.com/xushuhai/p/9761334.html
Copyright © 2011-2022 走看看