环境:mysql服务+navicatforsql
这篇是自己这学期正在学数据库的课程,第一个基础实验,有很多语句,算是一个自己的记录。冲鸭!
数据的表可以利用navicat很方便的建立(如下图所示),这里主要是一些常用语句的记录。
(1):在student表中,为姓名为’Zhang’且系信息错填为’Physics’的同学修改信息,将其系信息修改为’CS’:
注意:修改用update
UPDATE student
set DEPT='CS'
WHERE SNAME='Zhang' AND DEPT='Physics';
(2):删除teacher表中,属于Finance学院的教师信息;
注意:“删除”用delete
DELETE FROM teacher
WHERE DEPT='Finance';
(3):在teacher表中,为工资低于或等于70000的教师增长10%的工资,为工资高于70000的教师增长5%的工资:
**注意:(1)如果使用两次选择,那么第二次选择会受到第一次的影响。比如:先涨工资低于7000的教师工资10%,再对高于7000的教师涨工资。然而因为先涨低于7000的工资,涨完之后,可能他们工资就超过7000了,此时还会进行第二次涨5%。采用以下语句,能对他们同时进行涨幅的变动,而不会受先后顺序的影响。
(2)case语句语法:
case r
when …… then ……
when …… then ……
else……
end
**
UPDATE teacher
SET SALARY=CASE
WHEN SALARY<=7000 THEN SALARY*1.1
ELSE SALARY*1.05
END;
(4):基于teacher表,找出“物理系Physics和生物系Biology”所有教师的名字和工资SELECT TEAME,SALARY FROM teacher WHERE DEPT IN('Physics','Biology')
(5):基于teacher表,列出教师所在的各个系名,要求每个系名仅出现一次:
注意:select并不去除重复,如果不用distinct,那么选择结果就是CS,Biology,Physics,Physics,CS,CS。关键字distinct为我们可以自动剔除重复。
SELECT DISTINCT DEPT
FROM teacher;
(6):基于teacher表,希望查看“若将每位教师的工资提高20%后”各位教师的姓名和工资是多少:
注意:这里是希望查看,所以并不改变表的相对应的数值,使用select语句直接选出来并对其进行相应的操作即可,select不对值进行修改,update是对表进行修改的。
SELECT TEAME,SAlARY*1.2
FROM teacher;
(7):基于表student、SC和course,查看到计算机系CS的每位学生所选课程的所有信息,包括学生姓名、所在系、课程名称、课程学分的情况。
注意:(1)第一步学生表中选出所有的CS学生,再与SC表进行左连接:
内连接/自然连接:只保留两张表中相同属性下取值相同的元组,其他不保留;
左连接:保留左边表所有的元组以及两张表中相同属性下取值相同的元组(此处保留了左边所有CS的学生信息,没有选课的学生的教师部分属性为null),没有的属性设置为null;
右连接:保留右边表所有的元组以及两张表中相同属性下取值相同的元组,没有的属性设置为null;
(2):第二步将第一步得到的表与course表依据CID进行连接:
为什么要依据CID进行连接? 因为第一步得到的表有DEPT属性(学生所处的系),course表也有DEPT属性(开课学院所处的系)。如果自然连接(讲究同属性下取值相同),将会只选出上本学院开课的学生信息。所以我们需要让表依据CID进行连接。学生所选的课程号(确定了学生上的哪门课)与course表中的课程号(确定了一门课程的所有信息)相同就连接,即可以获得学生上的这门课的所有信息。
A(表名) join B(表名) using x(属性)
SELECT *
FROM(SELECT *
FROM student
WHERE DEPT='CS') as n
NATURAL LEFT JOIN SC LEFT JOIN course USING (CID);
加油!!!