2021-03-23

第一篇 我的博客


2021-03-23 星期二 晴
作为一名大二学生,面对疫情大一下册根本没学什么东西,自从昨天听了专业教育之后,发现了很多东自己还不明白,还有很多东西需要自己去追求,也是第一次以博客的这种方式写下一些东西,很多博客的功能还需要慢慢去摸索,也算是希望通过博客记录总结自己学到什么东西吧(也是指导老师提到希望我们通过这种方式去强化自己)希望能和更多人进行交流学习,有很多地方还写不明白,但我尽量通过自己的理解去总结我学到的东西。
之前落下太多东西了,希望自己能够通过一年时间专心学习能赶得上明年3,4,5月的企业校招。

言归正传,就跟大家分享一些我自己目前学到的吧。

今天想总结一下,昨天晚上做的PTA上的老师布置的 “数据库原理及应用试验二”相关题目吧。

讲真,开始学习数据库的时候,前面几节课我都是处于一个神游状态,只有在开始做实验之后才慢慢进入状态去学习,如果有什么不对的地方,如果有人看到了欢迎跟我交流。

首先先说说第一题吧,10-1 sql-select-sample,对于初学者来说,这是一道非常友好的题目,就我自己的思维来说,首先要明白我们要怎么做。第一行要怎么写,第二行要怎么写,如何才能得到输出样例。
2021-03-23
就我来说吧,我一开始学就记得“老三行”(我自己取得名。。)
SELECT xxx
FROM xxx
WHERE xxx
我觉得这三行基本上是最开始学习数据库的答案,SELECT xxx ,这里的xxx就可以理解为你想要得到什么(可以理解为比如你去买冰棍,你告诉老板你要什么冰棍)比如这里的输出样例是id和name,那么我们想要的到的数据就是id,name,就直接可以输入SELECT id,name(注意这里一定是使用,如果使用,就不对了)到时候输出的第一行就是你所输入的xxx。

第二行FROM xxx,就我的理解来说,这个就是告诉计算机从哪个表里进行查找,(就老板告诉你,哪个冰箱里有你想要的冰棍),就相当于一个路径。xxx就直接写你这个表的名称就可以了,比如这里图中是Student表,就可以直接写FROM Student

第三行 WHERE xxx,这个就是限制查找的一个条件(买的冰棍要巧乐兹还是小布丁),限制了条件之后,计算机就会根据你设置的条件在表中寻找符合条件的表列。如这里题干中的需求是所有符合id>50的记录。就可以写成 WHERE id>50; PS:其实区别大小写更加严谨,这里pta中没有区分我就没有进行特别得到区分

2021-03-23
其实掌握了方法之后就很简单,在把一道道成功自己做出来之后就很有成就感,就想接着做。

第二道10-2 查询学生表中的女生信息 2021-03-23
首先拿到题,最重要的我觉得是看题干,题目中要检索出stu表中所有的女生记录
而这里我们发现,在输出样例中,首行输出是中文的学号和姓名,而在stu表中对应学号和姓名相关数据的是sno和sname两个变量。这里我开始做的时候其实是懵的,也是在网上和书上查找之后发现,可以根据AS进行变量的设置。

所以这里可以写为
SELECT sno as 学号,sname as 姓名
FROM stu
WHERE sex=‘0’;(这里题干中写明当sex为0时表示女生就直接限制条件)

2021-03-23
然后我遇到了一个计算年龄的问题,如下2021-03-23
刚开始的时候真的很困惑,stu表样例中只有birdate并没有办法直接计算年龄,我就特别懵,去网上搜索了方法,给我的结果是使用 SELETE datediff(year,birdate,getdate()) as 年龄

但是这个函数不适用,首先我明白的是,year代表用年计算,birdate是引用表中数据,getdate是获取当前时间,但很奇怪的就是题干中是假定日期为“2020-03-01”,所以当时就特别难受
就写成
select sno as 学号,sname as 姓名,sex as 性别, mno as 专业,
datediff(year,birdate,getdate()) as 年龄, memo as 备注
from stu
where sex=‘0’ and datediff()>19;,结果当然是错误的。

后来我问了老师,他叫我直接引用函数,我没懂,我去问了我们班的一个大佬,他就告诉我直接使用year-year就可以了,哇,当时我就一下子思路清晰了。

所以后来我就写成了
select sno as 学号,sname as 姓名,sex as 性别, mno as 专业,
year(“2020-3-1”)-year(birdate) as 年龄, memo as 备注
from stu
where sex=‘0’ and year(“2020-03-01”)-year(birdate)>19;
答案正确出来那一刻,给我高兴坏了,可能这就是软工人的快乐吧!!
PS:注意这里日期一定要带引号
2021-03-23

最后写一个我目前遇到的困难吧,今天老师讲了一个可以将检索出的内容当作一个新的表。例如:
SELECT sex
from stu
where sname='小明‘;
这个检索出之后就其实表现为

sex

这样一个格式,然后再和另外一个表合并搜索,例如:(mno表示专业号)
SELECT mno
from stu,
(SELECT sex
from stu
where sname='小明‘;)as B
where stu.mno=B.mon;
这个的意思就是检索stu中的所有等于小明的专业号与小明的专业号相等的吧,但我在做相同题时却报错了。2021-03-23
题干时检索stu表中与’张三’同一个专业的学生记录, 我首先写的就是
SELECT mno
FROM stu
WHERE sname=‘张三’;

然后写了
SELECT sno as 学号,sname as 姓名
FROM stu,(SELECT mno
FROM stu
where sname=‘张三’;)as B
WHERE stu.mno=B.mno.
结果得到答案错误

后来我再看了一下嵌套检索就改为了

select sno as 学号, sname as 姓名
from stu
where mno =
(select mno
from stu
where sname=‘张三’);

但结果还是答案错误2021-03-23
目前做到这里就很困惑了,问了老师目前还没有回复我,应该是很简单的一个问题。。

pta有大佬的,有要交流的欢迎各位找我交流哇,大家一起加油!

就总结一下我的做题思路:
看题干→看输出案例首行→写第一行select→写第二行from xxx表→根据题干写第三行where/group by/order等需求。
目前是这个思路,根据后续的学习还要慢慢更新我的思路。第一次,稀里哗啦的写了4000多字,希望自己能坚持下去吧,再精简一下自己的语言!加油,各位软工人!

上一篇:阿里Java学习路线:阶段 2:数据库开发-SQL进阶及查询练习:课时6:非空和唯一约束


下一篇:JavaScript字符串拼接