美文网首页Android开发经验谈
[]编程笔记]大脑进化过程

[]编程笔记]大脑进化过程

作者: 我以前是学渣 | 来源:发表于2017-12-07 19:50 被阅读0次

    MySxQL可视化工具的常用关键字和乱码问题

    使用可视化工具时遇到的一个问题.

    昨天我用黑框口储存了一些历史人物信息,今天安装了MySQL的可视化工具SQLyog,在用这个工具打开我之前储存的数据的时候,我发现里面所有的中文数据都变成了乱码了,于是我做了各种有关调试字符集的操作,但依然没有将数据恢复成中文.然后我就上网找答案,网上有各种各样的答案,每一个我几乎都试过了,但依然没有解决我的问题,最后我找了老师才解决了问题. 原因是因为某些编码规则,原来的数据已经无法再变回中文,所以我再改也改不回来了.但之后的添加的数据是可以显示中文的,

    如果你以后再用到这类工具的时候,最好先用一些数据测试一下工具的属性,不要直接把数据仍进去.

    在数据库查询数据常用的关键字和语法

    1.我创建了两张表,一张是部门表,里面有人事部,后勤部,保安部.一张是员工表,里面有6个员工.我在给两张表添加关联的时候出现了问题:alter table ku.yg_table add constraint FK_yg_table FOREIGN KEY ('duishu') REFERENCES bm_table (bid)

    什么意思,根本看不懂......过了一会儿,我找出问题所在,(duishu)是我定义的字段,它类名字是用引号快起来的,于是我去检查了一下我定义的字段类型,原来是我把数字类型定义成了字符类型,这件事情告诉了我,类型定义错误可能是以后常会遇到的问题,还有,不管问题的表达形式是中午还是英文,只要耐下性子分析,总能解决问题.

    2.成功的完成一对多的表格案例,我又创建了一个数据库,在里面创建了3张表,这次我的需求是让目标形成多对多的关系.我创建了一个学生表,里面有学生的id和姓名,接着我创建了一张课程表,里面有课程的id和课程名,一个学生可以选择多门课程,一门课程也可以被多名学生学习.这就是多对多的关系.要想表达这种关系,我必须再创建一张表,把学生的id和课程的id都放进去,再做的时候我又遇见一个错误,那就是在每次创建关联的时候系统会给一个默认关联名,你在创建第二个关联的时候,依然是那个默认名子,于是名字重复了.还有,通过这次错误,我知道了在哪里看错误信息,我之前一直在最上面,可事实是在下面......

    这大概也是粗心之人长犯之错,写下来注意下.

    3.这次增加了一个需求,每个学生都有自己的班级,班级和学生的关系是一对多,一个班级可以有多

    个学生,一个学生只能有一个班级.建立一对多关系有一个原则:必须在多的那个表里添加一个外键(和外部链接的"键"(代表唯一)).

    4.这是一个练习题:实现一个网上商城案例,在商城中会有用户,商品,订单,商品分类。

    分析:

    它们的流程是:用户---订单---商品

    用户和订单的关系:一个用户可以有多个订单,一个订单只能有一个用户,关系为一对多.

    商品和订单的关系:一个商品可以有多个订单,一个订单可以有多个商品,关系为多对多.

    商品和商品分类:一个类里面可以有多个商品,但普遍一个商品只能属于一个类.关系为一对多.

    分析其实写的很对,但是最做的过程中就乱套了,反过来把分析改了好几次,改来改去又改回来了.

    多表查询

    (查询语句中的*号是所有记录的意思)
    交叉查询:SELECT * FROM 表名1,表名2;
    内连接查询:
        显示内连接:SELECT * FROM 表名1 INNER JOIN 表名2 WHERE 表头名=表头名;
                // 查询  *   从 此表到  内部连接的  表2  表头相等的那些.
                //如果不加WHERE,得出来的数据有重复(也叫垃圾数据)
        隐式内连接:SELECT * FROM 表名1,表名2 WHERE 表头名=表头名;
                // 查询  *  从   表1到表2   表头相等的那些.
                // 如果不加WHERE,得出来的数据有重复,
    外连接:
        左外连接:SELECT * FROM 表名1 LEFT OUTER JOIN 表名2 ON 表头名=表头名;
                //查询  * 从   表1 的左边外面的链接   打开表2找两个表头里相等的元素.
                //如果不加会报错
        右外链接:SELECT * FROM 表名1 RIGHT OUTER JOIN 表名2 ON 表头名=表头名;
                //查询  * 从   表1 的右边外面的链接   打开表2找两个表头里相等的元素.打开表2找表头相等的.                 
                //如果不加条件会报错.       
    
    子查询-IN    SELECT * FROM shangping WHERE sid IN(      
                //查询 所有记录 从  表1    sid里 1,7     
                //这里括号外的查询条件由括号里面的查询结果决定      
                //注意:里面如果有多条查询结果,就会报错    
                SELECT yid FROM yonghu WHERE qian<100000);     
                //这行语句得出的id是1,7               
    
    子查询-EXISTS
                SELECT * FROM shangping WHERE sid EXISTS(
                //如果括号里面所查询的物品存在,就执行括号外的语句.
                SELECT yid FROM yonghu WHERE qian<100000);
            
    
    子查询-ANY
                SELECT * FROM shangping WHERE sid<ANY (
                  SELECT did FROM dingdan);
                //sid大于括号里面的任意数,举个例子:
                //括号内id--1,2,3,4 (用这里面任意一个数和它比较,你会发现,用里面最小的数比较是最省事的.)
               //括号外id  括号内id
                    1   >   1 不成立
                    2   >   1 成立
                    3   >   1 成立
                    4   >   1 成立
                //得出来的id号就是2,3,4
                //有人会问,为什么要用最小的数来比较呢?这里面其实没有什么大不了的逻辑,只是用最小数来比较会省事一些.
                //这个WHERE和比较试中间可以加个NOT,为反条件执行.
                //我有一个问题:如果把 > 换成 < 结果是什么样的?
    
    
    子查询--ALL
               SELECT * FROM shangping WHERE sid>ALL (
               SELECT did FROM dingdan);
               //这个比较要求,查询大于括号内所有id的括号外id.
               //这个WHERE和比较试中间可以加个NOT,为反条件执行.
    

    查询练习

    先找出分均分大于80的人的id,再用COUNT统计一共有多少id
    先找出分均分大于80的人的id
    SELECT xid FROM chengjibiao GROUP BY xid HAVING AVG(chengji>80)
    再用COUNT统计一共有多少id
    SELECT COUNT(*) FROM student s WHERE s.xid IN(SELECT xid FROM chengjibiao GROUP BY xid HAVING AVG(chengji>80));
    

    本来还有几个练习,但因为自己太笨,暂时没做出来,于是就只写了一道.

    解释部分

    这篇文章可以说是笔记,也可以说是我的进化记录,因为在做这些事情的过程中,我在弥补我的思维漏洞.学习这件事,一定要放弃自己智商.智商这东西学习不能靠它.我总觉得自己解决问题是一件很了不起的事情.虽然大多数人认为效率更重要,认为时间是宝贵的,15分钟解决不了一个问题是可耻的.这时候就要请人帮忙,说这叫做面向对象的思想.

    但我不是这么定义效率的.我认为的效率是多维度的,而不是一个维度上的15分钟,对于人来说,分析问题的能力可以说是学习能力中最重要的,没有之一.我常常一道题要做很长时间,最长的一次是从中午一点做到晚上八点,于是我就思考,我什么我的速度会这么慢,而有的人10分钟就搞定了.这些差异是怎么来的?

    差异来自积累,一切的差异都源自积累,分析能力的差异也必须来自积累.

    重新定义效率

    下面所说的效率,仅代表学习效率.

    你所认为的效率正的是效率吗?上面说了,分析能力是积累出来的,那么请问!你每一次都叫别人来解决问题,你的分析能力从哪里来?所以,你所认为的高效,本质上是用另一个更为重要的方面的低效换来的.我知道一个简单易懂的提高分析能力的方法:

    • 遇到问题自己解决
    • 解决不了就记录下来,以后解决.

    这样一来,虽然你在单位时间解决问题变慢了,但是你在解决问题的时候不仅增长了知识,培养了耐心,还积累了分析能力,这样一来,你是一份努力三份回报,这才是效率吧!

    ....

    相关文章

      网友评论

        本文标题:[]编程笔记]大脑进化过程

        本文链接:https://www.haomeiwen.com/subject/oimjixtx.html