2019-01-13

                               一点小感悟

学习mysql一周的时间,首先要非常感谢群主“凡人求索”。从3月份开始关注,其实断断续续自学效果非常地差。所以有一个机会,可以免去安装软件免去找中肯的视频免去胡乱找习题的困扰,这种学习感觉非常适合自己。

其次,mysql其实之前是有看过相关视频的,而且也看过《mysql必知必会》,但是还是没有实操,真的是熟能生巧。反复的看书,反复的刷视频和习题,现在的体会还是比较深的!

像操作类的一些,比如create table,导入表格等等,都有非常多的坑,哪怕安装一个wordbench我估计都能难住一大票人,包括以前的自己,当然现在装软件还是水平不行。

也就一周的时间,基本上就把mysql内容过了,后续就是不断刷题来提高熟练度,要是自学估计猴年马月了!

对于mysql,有很多想分享的,但是因为都非常花时间,我就挑一件事情说下,那就是表格的联接。

举例,有一个学生表Student as S(SId,Sname,Sage,Sex),老师表Teacher as T(TId,Tname),分数表Score as SC(SId,CId,score),和课程表course(CId,Cname,TId).

四个表格,都是关系型表格,任意两个表格都是可以通过主键和外键进行联结,for example,




可以看到四张表格互相关联。那么我们查询任何信息都可以不用管中间过程,因为计算机的逻辑非常强大,你做select的时候,首先问下,你需要什么数据,其次这个数据存在于哪个表中。这样基本就可以写出你的select语句了。

举例:查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩?

分析:这里的学号,姓名是来自于Student表,而平均成绩肯定是来自于SC表。

那么我们肯定需要用到这两张表,那对Student和SC表进行一个关联,

有:

select Student.SId,Sname,avg(score) from SC,Student #分别是学号,姓名和平均成绩

where Student.SId = SC.SId #关联两张表

group by SC.SId #因为要求平均成绩,必须先按照SId分组

having avg(score) > 85 #平均成绩要>85

说实话写到这里其实有点生疏了!但是还是写成功了!

只有自己去联系几十道题,才能体会我说的联结。

当然select * fron A,B

where A.字段 = B.字段

等价于 select * from A inner join B on A.字段 = B.字段

上面叫做inner join ,也简称联结。

还有一个left join不展开了。

join 的意思可以举例说明!#要深刻理解笛卡儿积,下面举例说明。

比如

其实笛卡尔积也就是数学上的叉乘。就是A有m行,B有n行,叉乘则有m*n行。

而这个结果当然会受到我们表格关联的限制就是SId要相等,

所以inner join的结果就是S.SId = J.SId

结果就变成了两行。所以内联结其实是叉乘的部分行!

个中感觉还是只有自己体会方知。

最后用一句话总结,学过编程的人都听说过汉诺塔问题,就是程序的递归。也就是人做起来复杂,但是机器很熟悉。同样,SQL管理表格也是一样的,高度逻辑化,基本上只要知道select 什么,from 哪些表,最后把这些表格关联一下就好了!

以上。也不知道对不对,姑且作为总结把。最后当然要感谢我们46位同学一起努力,早日转行成功!




你可能感兴趣的:(2019-01-13)