• mysql复习篇及一对多和多对多的总结(17.6.26 )


    一、疑问

      1.varchar  与 char  区别

      答:char 只能存储指定的字符长度,varchar存储的字符长度是可变动的

        例子 char(10),varchar(10) ,10代表是字符长度是10,char表示只能存储10个字符大于10不存储小于10也按10个位置来,varchar,存入多少就按多少来。

        char优缺点:效率高,与varchar相比浪费内存。

        varchar优缺点; 节省空间,效率低。 

      2.select * from t1 where nid in (1,2,3)  代码意思;

      答:只显示规定的数据

      

      

      3.mysql 如何实现区间查询;

      答:select * from preson where nid betwenn 2 and 5;

      

      4.查询到的内容如何排序   提示:desc 

        select from 表 order by 列 asc                        - 根据 “列” 从小到大排列
        select from 表 order by 列 desc                      - 根据 “列” 从大到小排列
        select from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序

      5.限制   代码提示:

         select from 表 limit 5;          - 只显示前5行;

        select from 表 limit 4,5;         - 从第4行开始,显示后面的5行;
        select from 表 limit 5 offset 4    - 和上面一样

      6.分组(聚合函数) 代码提示:select from t1 group by partment

                     :select count(nid2) from t1 group by partment

                     :select count(nid) from t1 group by partment having count(nid)>2;    

        #sum avg min max  

        答:

        select num from 表 group by num  # num列中只显示不重合的

        select num,nid from 表 group by nid,num #nid列中显示所有不重合的,num依附nid  
        
        select num,nid from 表  where nid > 10 group by num,nid order nid desc
        #显示“表”中num和nid列,条件一、nid值大于10的,结果处理:num分组,且 nid列 大到小排个序。      
     
        select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
        # 显示列,分组;

      

      7.利用t2搜索t1(跨表操作)代码提示: select name email from t1 where nit in (1,2,3)

                         :select name email from t1 where nit in(select nid from t2)

      答: 显示t1中的name和email  前提是:nid 是 t2表中的nid

      8.查询到的结果重新命名,代码提示: select name as n ,email from t1;

      答:修改得到结果的表头为 'n'

      9.核实 pymysql 在执行完插入、更新、删除后 返回的结果是什么;

      答:结果是个num数值,表示删几行、增加几行、修改了几行。

      10.pymysql 获取插入内容的id;

      答:new_id = cursor.lastrowid  既可以获取新增数据的行数;

      二、一对多与多对多

      a.一多对多

      1、你所认识的一对多;

        答:就是一个表要利用另一个表的数据,不用再重新造重复的数据而产生的机制;

         一对多 是指:主表中的一项可以与副表中的某一项有关系(一夫一妻制);

      2.1、 Navicat for MySQL 实现一对多;

        答:实现成功,注意事项,最好在新建立表的时候就把外键一块给创建了,要不然后面很麻烦

          表设计==> 外键==>栏位(自己要借鉴的列)==>参考表==>参考的栏位==>ctrl+s

      2.2、  代码实现;  

    CREATE TABLE person1(
    nid INT (11) AUTO_INCREMENT,
    NAME VARCHAR (32),
    email VARCHAR (32),
    part_nid INT,
    PRIMARY KEY (nid),
    -- KEY fk_xxx (part_nit),
    CONSTRAINT fk_xxx FOREIGN KEY (part_nid) REFERENCES part1 (nid)
    )
    代码实现外键

      2.3、  代码删除和添加一对多;

        删除:alter table person1 drop foreign key fk_xxx

        添加:alter table person1 add constraint fk_xxx foreign key(part_nid) references part1(nid)

      3、实现一对一及一对多的查询:

        要求:分别用 left join、inner join 灵活实现;未能实现 

        普通条件查询   SELECT person.name,part1.nidd from person,part1 where person.nid = part1.nidd

        一张表的关联查询:

        select * from 主表 left join 副表 on 主表关联列 = 副表关联列   where ...

        与多张表的关联查询:

        select * from 主表

           left join 副表 on 主表关联列 = 副表关联列  

           left join 副表 on 主表关联列 = 副表关联列  

          where ...

        还有 inner join  与 right join   功能 都差不多。

      b.多对多

      1、你是如何理解多对多的;

        多对多 是指:主表中的一项可以与副表中的多项有关系(一夫多妻制);

      2、Navicat for MySQL 实现多对多,提示:创建表一,表二、表三、  利用表三建立表一与表二的关系;

       答:完成

      3、实现灵活查找 提示 利用join

        select * from 主表

           left join 副表1 on 主表关联列 = 副表1关联列  

           left join 副表2 on 主表关联列 = 副表2关联列  

          where ...

      

        

        

  • 相关阅读:
    String判空效率比较
    myeclipse数据库逆向hibernate教程
    博客使用说明和我的学习心得(技术路线和书单)
    【小记】go如何判断key是否在map中
    MySQL必知必会笔记——MySQL其他操作
    MySQL必知必会笔记——查询的进阶知识
    MySQL必知必会笔记——查询的基础知识
    MySQL必知必会笔记-Mysql基本操作
    Linux学习笔记:Linux命令之权限管理命令
    Linux学习笔记:用户与用户组
  • 原文地址:https://www.cnblogs.com/learn-python-M/p/7081682.html
Copyright © 2020-2023  润新知