问答题
题1:SQL 查询语句中 WHERE 、 GROUP BY 、 HAVING 这些关键字区别和用法总结错误的是?
A: HAVING
在查询语句中必须依赖于GROUP BY
B: WHERE
子句用来限制 SELECT
语句从表中指定选取的行
C: GROUP BY
子句用来分组WHERE子句的输出结果集
D: HAVING
子句用来从分组的结果中筛选列
提示:并不是删选列,而是删选行
题2:定义学生、教师和课程的关系模式
S (S#,Sn,Sd,Dc,SA )(学号、姓名、所在系、所在系的系主任、年龄)
C ( C#,Cn,P# )(课程号、课程名、先修课)
SC(S#,C#,G)(学号、课程号和成绩)
则该关系为?
答案:第二范式
提示:范式是符合某一种级别的关系模式的集合。满足最低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推;
第一范式:主属性(主键)不为空且不重复,字段不可再分(存在非主属性对主属性的部分依赖)
第二范式:如果关系模式是第一范式,每个非主属性都没有对主键的部分依赖
第三范式:如果关系模式是第二范式,没有非主属性对主键的传递依赖和部分依赖
BCNF范式:所有属性都不传递依赖于关系的任何候选键。题目中关系模式满足第二范式,但在关系模式S中,学生所在系依赖于学号(S#→Sd),但系本身确定了系主任(Sd→Dc),存在传递依赖,不满足第三范式
题3:设有一个数据库mydb中有一个表tb1,表中有六个字段,主键为ID,有十条记录,ID从0到9,以下代码输出结果是?
<?php
$link = mysql_connect("localhost","mysql_user", "mysql_password")
ordie("Could not connect: " . mysql_error());
$result = mysql_query("SELECT id,name,age FROM mydb.tb1 where id < 5");
ordie("Could not query: . mysql_error());
echo mysql_num_fields($result);
mysql_close($link);
?>
提示:mysql_num_fields()
返回结果集的字段数(列数),可以看到 selete 后面接了三个字段,所以返回三.另外还有一个函数,mysql_num_rows()
返回结果集的条目数(行数)
题4:在下面的两个关系中,职工号和部门号分别为职工关系和部门关系的主键(或称主码)职工(职工号、职工名、部门号、职务、工资) 部门(部门号、部门名、部门人数、工资总额) 在这两个关系的属性中,只有一个属性是外键(或称外来键、外码、外来码),它是 ?
A: 职工关系的“职工号”
B: 职工关系的“部门号”
C: 部门关系的“职工号”
D: 部门关系的“部门号”
提示:外键是指关系中的某个属性(或属性组)虽然不是该关系的主码或主码的一部分,但却是另一个关系的主码,在职工关系中,部门号不是其主码,而是部门关系的主码,所以部门号是职工关系的外键
题5:语句 SELECT IF(-1,5,2) 的返回值是?
答案:5
提示:if(条件,表达式1,表达式2),如果条件为真(非0),执行表达式1,否则,执行表达式2.
题6:数据库中存在学生表S、课程表C和学生选课表SC三个表,它们的结构如下:
S(S#,SN,SEX,AGE,DEPT)
C(C#,CN)
SC(S#,C#,GRADE)
其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩,请检索选修课程号为C2的学生中成绩最高的学号?
A:
SELECT S#,SUM(GRADE)FROM SC WHERE
GRADE>=60 GROUP BY S# ORDER BY 2 DESC
HAVING COUNT(*)>=4 WHERE C#="C2" AND
GRADE >=(SELECT GRADE FORM SC WHERE C#="C2")
B
SELECT S# FORM SC
WHERE C#="C2" AND GRADE IN
(SELECT GRADE FORM SC WHERE C#=“C2”)
C
SELECT S# FORM SC
WHERE C#=“C2” AND GRADE NOT IN
(SELECT GRADE FORM SC WHERE C#=“C2”)
D
SELECT S# FORM SC
WHERE C#=“C2” AND GRADE>=ALL
(SELECT GRADE FORM SC WHERE C#=“C2”)
编程题
题1:红与黑
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的(上下左右四个方向)黑色瓷砖移动,请写一个程序,计算你总共能够到达多少块黑色的瓷砖
输入描述:输入包含多组数据。每组数据第一行是两个整数 m 和 n(1≤m, n≤20)。紧接着 m 行,每行包括 n 个字符。每个字符表示一块瓷砖的颜色,规则如下:
"."
:黑色的瓷砖;"#"
:白色的瓷砖;"@"
:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次