• 数据库常用语句


    1 MySQL安装--->mysql启动
    2 基本sql
      create table
      create database
      select
      insert
      update
      delete
    
    3 select
      模糊查询 like
      分组查询 group by
      排序     order by
      聚合函数 sum count avg min max
      分页     limit index,count
    
      为什么要分页:数据量比较大 如果全部查询 出现一下问题:
      1 全部数据都展示用户 数据量太大 用户难以接受
      2 数据量大  查询慢
      3 如果将大量数据读取到java内存中 可能存储崩溃
     (  4GB
         1GB = 1024MB
         1MB = 1024KB 
         1KB = 1024B
         1B  = 8b
         
         int a = 10    4字节
     )
      
      分页:(链接数据库查询 是非常占用资源)
      A  全部查询 在前台展示的时候 只展示 其中的一部分(js)
         (数据库较少) 
      B  数据库获取数据的时候 就只查询部分数据(当前页展示的数据)然后前台直接展示
         (数据量大)
    
      B : 在查询的时候 只查询部分数据 -----》 limit  index,length
    
           select *  from product  limit 0,5 -- 1 5
           select *  from product  limit 1,5 -- 2 6
           select *  from product  limit 3,7 -- 4 10
    
           首页 上一页 1 2 3 4 5 6 下一页 尾页 跳转【】页  每页【5】条 共20页
    
       问题1 :  第一页   limit  0,5
                 第二页   limit  5,5
                 第三页   limit  10,5
                 第四页   limit  15,5
    
                 第n页 每页x条 limit (n-1)* x  ,x
    
       问题2 : 100条 5 总:20
                101条 5 总:21
                105条 5 总:21
                106条 5 总:22
                t条  x  总:(t+x-1)/x
    
    4 多表查询
    
      1 为什么会多表 (主键,外键)
       
       学生表
       id    name   age   grade
        1    张三   18    QY97
        2    李四   18    QY97
        3    王五   60    QY98
        4    马六   61    QY98
      
      领导通知: QY97 ----》 最强97
      班主任 : update student set grade = 最强97 where grade = QY97 (80亿)
      数据库数据冗余(减少冗余)
       
       学生表                            班级表
       id    name  age  gid                 id   gname
       1     张三   18   1                   1    QY97
       2     李四   18   1                   2    QY98
       3     王五   18   2
       4     马六   18   2
       
       班主任: update grade set gname=最强97 where id = 1
    
       2 两张表如何查询数据?
            
          select * from student
    
    1    张三     18    1
    2    李四    18    1
    3    吴昂无    18    2
    4    王阿斯顿18    2
    5    阿斯顿    19    3
    6    暗室逢灯19    3
    
        班级我们其实希望看到 是 班级的名字 并不是班级的编号(我们需要将数据多表存储 又需要在查询的时候 将多表的数据 全部查询出来)
    
    多表查询会出现  "笛卡尔乘积"问题 
    (a,b) (c,d) ===> ac,ad,bc,bd
    
    (哪几张表,各个表之间的联系)
    内连接
    
      隐式内连接
      SELECT
        s.id,s.name,s.age,g.gname
      FROM
        student s,
        grade g
      WHERE
        s.gid = g.id  ==>消除笛卡尔乘积
    
      显示内连接
      SELECT
        s.id,
        s. NAME,
        s.age,
        g.gname
       FROM
        student s
       INNER JOIN grade g ON s.gid = g.id
    
       select 列名 from 表1 inner join 表2 on 表1.列 = 表2.列
    
    外连接
    
      左外(需求:查询所有学生信息 如果有班级显示班级名称)
       SELECT
        s.id,
        s. NAME,
        s.age,
        g.gname
       FROM
        student s  
       left JOIN grade g ON s.gid = g.id
      右外
      SELECT
        s.id,
        s. NAME,
        s.age,
        g.gname
       FROM
        student s  
      right JOIN grade g ON s.gid = g.id
    
      内连接查询的是多个表的交集 
      外连接查询的是一张表的全部数据和另一张表满足要求的数据
    
    5 子查询
      需求: 查询张三的同班同学
    
      1 查询张三是哪个班?
        select gid from student WHERE name = "张三"
    
      2 查询和张三班级一样的同学
        select *  from student where gid = 1
    
      SELECT
        *
      FROM
        student
      WHERE
        gid = (
            SELECT
                gid
            FROM
                student
            WHERE
                NAME = "张三"
        )
    数据库范式(数据库设计的规范):
    注意:后面的范式一定满足前面
    
    第一范式: 原子性(范式、事务ACID、线程)(不可再分 列不能再分)
    
    表:存储用户信息  手机号 (需求 一个用户可能没有手机号 也可能有多个手机号)
    
    错误一:(
    关系型数据库(列固定 行多个)MySQL oracle sqlserver 
    非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis 
    )
    id name age sex tel tel1 tel2 tel3 tel4 tel5
    
    错误二:
    id  name age sex   tel
     1  张三 182  李四 18  男    110
     3  王五 18  男    120,130,140
    
    正确
    User                       telephone
    id  name  age  sex          id   uid  tel
    1   张三   18   男           1    2   120             
    2   李四   19   男           2    3   130
    3   王五   19   男           3    3   140
    
    
    第二范式:唯一性 
    
    设计:  学生  选修课  成绩
    
    id  姓名  年龄   选修课  成绩
     1  张三  18     化学     99
     2  张三  18     毛概     66
     3  李四  18     物理     99
     4  李四  18     java     59
    
     学生表                成绩表
    id  姓名  年龄        id sid  课程  成绩
    1   张三  18           1  1    化学  99              
    2   李四  18           2  1    毛概  66 
                           3  2    物理  99
                           4  2    java  59
    
    
    第三方式:减少冗余
    
     id  name age  gname  班主任
      1  张三 18   QY97   罗
      2  李四 18   QY97   罗
      3  王五 18   QY98   罗
      4  赵六 18   QY98   萝
    
      id name age gid      id gname
      1  张三 18   1        1  QY97
      2  李四 18   1        2  QY98
      3  王五 18   2
      4  赵六 18   2
    
      问题: 主外键  总结 哪张表应该加外键 
      一对多   一个班级 有 多个学生
               一个用户 有 多个手机号
               一个学生 有 多个课程
    
    
    反三范式:在实际开发中,适当的冗余能提高开发效率
  • 相关阅读:
    疯狂
    绝对基金的最爱,今年推荐
    蛛丝马迹中愤怒的老总
    值得作一年投资的股票
    狂牛终于被制服了,一起来享受盛宴吧(公布一些数据)
    敬而远之
    发现一庄两股
    一下表格大家好好研究吧
    怎样申购新股以及申购技巧
    股市比女人还善变
  • 原文地址:https://www.cnblogs.com/qurui1998/p/10786269.html
Copyright © 2020-2023  润新知