一点小感悟
学习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位同学一起努力,早日转行成功!