软件测试之SOL面试题(一)

补充作业一

设有三个关系:

S(SNO, SNAME, AGE, SEX,Sdept)

SC(SNO, CNO, GRADE)

C(CNO, CNAME, TEACHER)

使用关系代数表达式表示下列查询:

1、查询学号为S3学生所学课程的课程名与任课教师名。

2、查询至少选修LIU老师所教课程中一门课的女生姓名。

3、查询WANG同学不学的课程的课程号。

4、查询至少选修两门课程的学生学号。

5、查询选修课程中包含LIU老师所教全部课程的学生学号。

补充作业二

三个关系同上,使用SQL语言表示下列查询:

1、 查询门门课程都及格的学生的学号

方法1:

提示:根据学号分组,就得到每个学生所有的课程成绩,在某个学生这一组成绩里,如果他所有的课程成绩都大于60分则输出该组学生的学号

Select sno frome sc group by sno having(min(grade)>=60)
  • 1

2、查询既有课程大于90分又有课程不及格的学生的学号

自身连接:

Select sno from sc where grade >90 and sno in (select sno from sc where grade<60)
  • 1

3、查询平均分不及格的课程号和平均成绩

Select cno , avg(GRADE) from sc group by cno having avg(grade)<60
  • 1

查询平均分及格的课程号和课程名

Select C.cno , Cname from SC,C where C.cno=SC.cno group by C.cno having avg(grade)>=60
  • 1

4、找出至少选修了2号学生选修过的全部课程的学生

提示:不存在这样的课程y,学生2选修了y,而学生x没有选。

SELECT DISTINCT Sno

  FROM SC as SCX

  WHERE NOT EXISTS

     (SELECT *

      FROM SC as SCY

      WHERE SCY.Sno =‘2’AND NOT EXISTS

                              (SELECT *

                                 FROM SC SCZ

                         WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5、求各门课程去掉一个最高分和最低分后的平均分

第一步,求所有成绩的平均分(去掉一个最高分和最低分)

select   avg(GRADE)   from   SC    
 where   GRADE   not   in (select   top   1   GRADE   from   SC order   by   GRADE)  
 and     GRADE   not   in (select   top   1   GRADE   from   SC order   by   GRADE   desc)
  • 1
  • 2
  • 3

第二步,将所有成绩按各门课程的课程号CNO分组

SELECT CNO avg(GRADE)   from   SC    
 where   GRADE   not   in (select   top  1  GRADE   from   SC order   by   GRADE)  
 and     GRADE   not   in (select   top  1  GRADE   from   SC order   by   GRADE   desc) group by CNO
  • 1
  • 2
  • 3

1、查询7号课程没有考试成绩的学生学号。

   Select sno fromsc where cno='7' and grade is null
  • 1

2、查询7号课程成绩在90分以上或60分以下的学生学号。

Select sno from sc where cno='7' and grade not between 60and 9
  • 1

3、查询课程名以“数据”两个字开头的所有课程的课程号和课程名。

Select cno,cname from c where cname like '数据%'
  • 1

4、查询每个学生所有课程的平均成绩,输出学生学号和平均成绩。

 Select sno,avg(grade)from sc group by sno
  • 1

5、查询每门课程的选修人数,输出课程号和选修人数。

   Selectcno,count(*) from sc group by cno
  • 1

6、查询选修7号课程的学生的学号、姓名、性别。

   Selects.sno,sname,ssex from s,sc where s.sno=sc.sno and cno='7'
  • 1

或:

Select sno,sname,ssex from s where sno in

             ( Select sno from sc where cno='7' )
  • 1
  • 2
  • 3

7、查询选修7号课程的学生的平均年龄。

   Selectavg(sage) from s,sc where s.sno=sc.sno and cno='7'
  • 1

或:

Select avg(sage) from s where sno in

             (Select sno from sc where cno='7' )
  • 1
  • 2
  • 3

8、查询有30名以上学生选修的课程号。

   Select cno fromsc group by cno having count(*)>30
  • 1

9、查询至今没有考试不及格的学生学号。

   Select distinctsno from sc where sno not in

        ( Select sno from sc where grade<60 )
  • 1
  • 2
  • 3

或:

Select sno from sc group by sno havingmin(grade)>=60
  • 1

补充三

1、找出选修课程号为C2的学生学号与成绩。

Select sno,grade from sc where cno='C2'
  • 1

2、找出选修课程号为C4的学生学号与姓名。

   Selects.sno,sname from s,sc where s.sno=sc.sno and cno='C4'
  • 1

注意本题也可以用嵌套做

思考本题改为“找出选修课程号为C4的学生学号、姓名与成绩”后还能用嵌套做吗?

3、找出选修课程名为 Maths 的学生学号与姓名。

   Selects.sno,sname from s,sc,c
   where  s.sno=sc.sno and c.cno=sc.cno andcname='Maths'
  • 1
  • 2

注意本题也可以用嵌套做

4、找出选修课程号为C2或C4的学生学号。

   Select distinctsno from sc where cno in ('C2','C4')
  • 1

或:

Select distinct sno from sc where cno='C2' or cno='C4'
  • 1

5、找出选修课程号为C2和C4的学生学号。

   Select sno fromsc where cno='C2' and sno in

        ( Select sno from sc where cno='C4' )
  • 1
  • 2
  • 3

注意本题也可以用连接做

思考:

Select distinct sno from sc where cno='C2' andcno='C4'正确吗?
  • 1

6、找出不学C2课程的学生姓名和年龄。

   Selectsname,sage from s where sno not in

        ( Selectsno from sc where cno='C2'
  • 1
  • 2
  • 3

或:

Select sname,sage from s where not exists

             (Select * from sc where sno=s.sno and cno='C2' )
  • 1
  • 2
  • 3

7、找出选修了数据库课程的所有学生姓名。(同3)

   Select snamefrom s,sc,c

where  s.sno=sc.snoand c.cno=sc.cno and cname='数据库'
  • 1
  • 2
  • 3

8、找出数据库课程不及格的女生姓名。

   连接:Select sname from s,sc,c
        where  s.sno=sc.sno andc.cno=sc.cno and cname='数据库'

               and grade<60 and ssex='女'

   嵌套:Select sname from s where ssex='女' and sno in

              (Select sno from sc where grade<60 and cno in

                    ( Select cno from c where cname='数据库' )

              )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

9、找出各门课程的平均成绩,输出课程名和平均成绩。

   Selectcname,avg(grade) from sc,c

   wherec.cno=sc.cno  group by c.cno,cname
  • 1
  • 2
  • 3

思考本题也可以用嵌套做吗?

10、找出各个学生的平均成绩,输出学生姓名和平均成绩。

   Selectsname,avg(grade) from s,sc

   wheres.sno=sc.sno group by s.sno,sname
  • 1
  • 2
  • 3

思考本题也可以用嵌套做吗?

11、找出至少有30个学生选修的课程名。

   Select cnamefrom c where cno in

        ( Selectcno from sc group by cno having count(*)>=30 )
  • 1
  • 2
  • 3

注意本题也可以用连接做

12、找出选修了不少于3门课程的学生姓名。

   Select snamefrom s where sno in

        ( Selectsno from sc group by sno having count(*)>=3 )
  • 1
  • 2
  • 3

注意本题也可以用连接做

13、找出各门课程的成绩均不低于90分的学生姓名。

  Select snamefrom s,sc where s.sno=sc.sno

        group bys.sno,sname having min(grade)>=90
  • 1
  • 2
  • 3

方法二:

Select sname from s where sno not in

        ( Selectsno from sc where grade<90 )
  • 1
  • 2
  • 3

只要有一门不小于90分就会输出该学生学号

14、找出数据库课程成绩不低于该门课程平均分的学生姓名。

   Select snamefrom s,sc,c

   where  s.sno=sc.sno and sc.cno=c.cno and cname='数据库' and grade>

        ( Selectavg(grade) from sc,c

          where sc.cno=c.cnoand cname='数据库'

        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

15、找出各个系科男女学生的平均年龄和人数。

   Selectsdept,ssex,avg(sage),count(*) from s group by sdept,ssex
  • 1

16、找出计算机系(JSJ)课程平均分最高的学生学号和姓名。

   Selects.sno,sname from s,sc where s.sno=sc.sno and sdept='JSJ'

   group bys.sno,sname

   havingavg(grade) >=ALL

        ( Selectavg(grade) from s,sc

          wheres.sno=sc.sno and sdept='JSJ'

          group bys.sno

        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

17、(补充)查询每门课程的及格率。

本题可以分三步做:

第1步:得到每门课的选修人数

createview  v_all(cno,cnt)

    as selectcno, count(*) from sc group by cno
  • 1
  • 2
  • 3

第2步:得到每门课及格人数

createview  v_pass(cno,cnt_pass)

    as selectcno, count(*) from sc where grade>=60 group by cno
  • 1
  • 2
  • 3

第3步:每门课的及格人数/每门课选修人数

selectv_all.cno, cnt_pass*100/cnt  from  v_all, v_pass

where v_all.cno = v_pass.cno
  • 1
  • 2
  • 3

18、查询平均分不及格的学生的学号,姓名,平均分。

   Selectsc.sno,sname,avg(grade) from student,sc

   wherestudent.sno=sc.sno

   group bysc.sno,sname

   havingavg(grade)<60
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

思考本题也可以用嵌套做吗?

19、查询平均分不及格的学生人数。

   Select count(*)from student

   where sno in

        ( selectsno from sc group by sno having avg(grade)<60 )
  • 1
  • 2
  • 3
  • 4
  • 5

下面是一个典型的错误

Select count(*) from sc group by sno havingavg(grade)<60
  • 1

这是每个学生有几门不及格的数目

补充四

1、查询工资在1000到3000元之间的男性业务员的姓名和办公室编号。

   SelectYname,Ono from YWY

   where Salarybetween 1000 and 3000 and Ysex='男'
  • 1
  • 2
  • 3

2、查询各个办公室的业务员人数,输出办公室编号和对应的人数。

   SelectOno,count(*) from YWY group by Ono
  • 1

3、查询每个客户在2002年5月购买的总金额,输出客户号和相应的总金额。

   SelectKno,sum(Fmoney) from FP

   where Fdatebetween '2002.5.1' and '2002.5.31'

   group by Kno
  • 1
  • 2
  • 3
  • 4
  • 5

4、查询2002年5月购买次数超过5次的所有客户号,且按客户号升序排序。

   Select Kno fromFP

   where Fdatebetween '2002.5.1' and '2002.5.31'

   group by Kno

   havingcount(*)>5

   order by KnoASC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5、查询各办公室男性和女性业务员的平均工资。

   SelectOno,Ysex,avg(Salary) from YWY group by Ono,Ysex
  • 1

6、查询2002年5月曾经在王海亮业务员手中购买过商品的客户号、 客户姓名和联系电话。

   SelectKno,Kname,Phone from KH where Kno in

        ( SelectKno from FP

          whereFdate between '2002.5.1' and '2002.5.31' and Yno in

                     ( Select Yno from YWY where Yname='王海亮' )

        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意本题也可以用连接做

7、查询所有工资比1538号业务员高的业务员的编号、姓名和工资。

   SelectYno,Yname,Salary from YWY where Salary >

        ( SelectSalary from YWY where Yno='1538' )
  • 1
  • 2
  • 3

8、查询所有与1538号业务员在同一个办公室的其他业务员的编号和姓名。

   SelectYno,Yname from YWY where Yno!='1538' and Ono in

        ( SelectOno from YWY where Yno='1538' )
  • 1
  • 2
  • 3

9、查询销售总金额最高的业务员的编号。

   Select Yno fromFP group by Yno having sum(Fmoney) >=ALL

        ( Selectsum(Fmoney) from FP group by Yno )
  • 1
  • 2
  • 3

10、查询所有业务员的编号、姓名、工资以及工资比他高的其他业务员的平均工资。

利用自连接

   SelectY1.Yno,Y1.Yname,Y1.Salary,avg(Y2.Salary)

   from   YWY Y1, YWY Y2

   where  Y1.Salary < Y2.Salary

   group by  Y1.Yno
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

补充五

1、找出每个班级的班级代码、学生人数、平均成绩。

   SelectBJDM,count(*),avg(CJ) from SC group by BJDM
  • 1

2、找出每个学生的班级代码、学生姓名、考试科目数、总成绩。

   SelectBJDM,XSXM,count(*),sum(CJ) from SC

   group byBJDM,BNXH,XSXM
  • 1
  • 2
  • 3

3、输出一张表格,每位学生对应一条记录,包括字段:班级代码、学生姓名、语文成绩、数学成绩、外语成绩。

   SelectSC1.BJDM,SC1.XSXM,SC1.CJ,SC2.CJ,SC3.CJ

   from  SC SC1, SC SC2, SC SC3

   whereSC1.BJDM=SC2.BJDM and SC1.BNXH=SC2.BNXH and

        SC2.BJDM=SC3.BJDM and SC2.BNXH=SC3.BNXH and

         SC1.KM='语文' and SC2.KM='数学' and SC3.KM='外语'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4、输出一张表格,有成绩低于60分的每位学生对应一条记录,包括字段:班级代码、学生姓名、最低成绩。

   SelectBJDM,XSXM,min(CJ) from SC

   where  CJ<60 group by BJDM,BNXH,XSXM

   或:SelectBJDM,XSXM,min(CJ) from SC

         group byBJDM,BNXH,XSXM

         havingmin(CJ)<60
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5、输出一张表格,有成绩低于60分的每位学生对应一条记录,包括字段: 班级代码、学生姓名、最高成绩、平均成绩。

   SelectBJDM,XSXM,max(CJ) from SC

   group byBJDM,BNXH,XSXM

   havingmin(CJ)<60


请思考下列做法是否正确:



         SelectBJDM,XSXM,max(CJ),avg(CJ) from SC

        where  CJ<60 group byBJDM,BNXH,XSXM
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

6、输出一张表格,所有成绩都不低于60分的每位学生对应一条记录,包括字段:班级代码、学生姓名、平均成绩。

   SelectBJDM,XSXM,avg(CJ) from SC

   group by BJDM,BNXH,XSXM

   havingmin(CJ)>=60
  • 1
  • 2
  • 3
  • 4
  • 5

7、输出一张表格,每一位学生对应一条记录,包括字段:班级代码、学生姓名、去掉一个最低分后的平均成绩。

   SelectBJDM,XSXM,(sum(CJ)-min(CJ))/(count(*)-1) from SC

   group byBJDM,BNXH,XSXM
  • 1
  • 2
  • 3

8、输出一张表格,每门科目对应一条记录,包括字段: 科目、去掉一个最低分后的平均成绩。

   Select KM,(sum(CJ)-min(CJ))/(count(*)-1)from SC

   group by KM
  • 1
  • 2
  • 3

补充六

1、查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。

   Selectsno,sname,sage from student

   where sagebetween 19 and 21 and ssex='女'

   order by sagedesc
  • 1
  • 2
  • 3
  • 4
  • 5

2、查询姓名中有“明”字的学生人数。

   Select count(*)from student

   where snamelike "%明%"
  • 1
  • 2
  • 3

3、查询1001课程没有成绩的学生的学号。

   Select sno fromsc where cno='1001' and grade is null
  • 1

4、查询JSJ、SX、WL系的学生学号,姓名,结果按系及学号排列。

   Selectsno,sname,sdept from student

   where sdept in( 'JSJ', 'SX', 'WL' )

   order bysdept,sno
  • 1
  • 2
  • 3
  • 4
  • 5

5、计算每一门课的总分、平均分,最高分、最低分。

   Selectcno,sum(grade),avg(grade),max(grade),min(grade)

   from sc

   group by cno
  • 1
  • 2
  • 3
  • 4
  • 5

6、查询平均分大于90分的男学生学号及平均分。

连接:

   selectsc.sno,avg(grade) from student,sc

   wherestudent.sno=sc.sno and ssex=’男’

   group by sc.sno

   havingavg(grade)>90
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

嵌套:

   selectsno,avg(grade) from sc

   where sno in (select sno from student where ssex='男')

   group by sno

   havingavg(grade)>90
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7、查询选修课程超过2门的学生姓名。

   select snamefrom student,sc

   where student.sno=sc.sno

   group bysc.sno,sname

   havingcount(*)>2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

本题也可以用嵌套做

8、查询 JSJ 系的学生选修的课程号。

   Select distinctcno from student,sc

   where  student.sno=sc.sno and sdept='JSJ'
  • 1
  • 2
  • 3

本题也可以用嵌套做

9、查询选修1002课程的学生的学生姓名(用连接和嵌套2种方法)

 连接:Select sname from student,sc

         wherestudent.sno=sc.sno and cno='1002'

   嵌套:Select sname from student where sno in

             (select sno from sc where cno='1002' )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

10、查询学生姓名以及他选修课程的课程号及成绩。

   Selectsname,cno,grade from student,sc

   wherestudent.sno=sc.sno
  • 1
  • 2
  • 3

思考本题也可以用嵌套做吗?

3.6 使用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:

(1)统计有学生选修的课程门数。

SELECT COUNT(DISTINCT C#) FROM SC
  • 1

(2)求选修C4课程的学生的平均年龄。

    SELECT AVG(AGE)
    FROM S
    WHERE S# IN
     (SELECT S#
     FROM SC
     WHERE C#='C4')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

或者

    SELECT AVG(AGE)
    FROM S,SC
    WHERE S.S#=SC.S# AND C#='004'
  • 1
  • 2
  • 3

(3)求LIU老师所授课程的每门课程的学生平均成绩。

   SELECT CNAME,AVG(GRADE)
   FROM SC ,C
   WHERE SC.C#=C.C# ANDTEACHER='LIU'
   GROUP BY C#   
  • 1
  • 2
  • 3
  • 4

(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

    SELECT DISTINCT C#,COUNT(S#)
    FROM SC
    GROUP BY C#
    HAVING COUNT(S#)>10
    ORDER BY 2 DESC, C# ASC
  • 1
  • 2
  • 3
  • 4
  • 5

(5)检索学号比WANG同学大,而年龄比他小的学生姓名。

    SELECT X.SNAME
    FROM S AS X, S AS Y
    WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE<y.age< span>
  • 1
  • 2
  • 3

(6)检索姓名以WANG打头的所有学生的姓名和年龄。

    SELECT SNAME,AGE
    FROM S
    WHERE SNAME LIKE 'WANG%'
  • 1
  • 2
  • 3

(7)在SC中检索成绩为空值的学生学号和课程号。

    SELECT S#,C#
    FROM SC
    WHERE GRADE IS NULL
  • 1
  • 2
  • 3

(8)求年龄大于女同学平均年龄的男学生姓名和年龄。

    SELECT SNAME,AGE
    FROM S AS X
    WHERE X.SEX='男' AND X.AGE>(SELECT AVG(AGE)FROM S AS Y WHERE Y.SEX='女')
  • 1
  • 2
  • 3

(9)求年龄大于所有女同学年龄的男学生姓名和年龄。

    SELECT SNAME,AGE
    FROM S AS X
    WHERE X.SEX='男' AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE Y.SEX='女')
  • 1
  • 2
  • 3

除法运算

3.7 使用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:

(1)往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。

    INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18)
  • 1

(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX)。

    INSERT INTO STUDENT(S#,SNAME,SEX)
     SELECT S#,SNAME,SEX
     FROM S WHERE  NOT EXISTS
      (SELECT * FROM SC WHERE
       GRADE<80 AND S.S#=SC.S#)
  • 1
  • 2
  • 3
  • 4
  • 5

(3)在基本表SC中删除尚无成绩的选课元组。

    DELETE FROM SC
     WHERE GRADE IS NULL
  • 1
  • 2

(4)把WANG同学的学习选课和成绩全部删去。

    DELETE FROM SC
     WHERE S# IN
      (SELECT S#
      FROM S
      WHERE SNAME='WANG')
  • 1
  • 2
  • 3
  • 4
  • 5

(5)把选修MATHS课不及格的成绩全改为空值。

    UPDATE SC
    SET GRADE=NULL
    WHERE GRADE<60 AND C# IN
      (SELECT C#
      FROM C
      WHERE CNAME='MATHS')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(6)把低于总平均成绩的女同学成绩提高5%。

    UPDATE SC
    SET GRADE=GRADE*1.05
    WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM SWHERE SEX='F')
  • 1
  • 2
  • 3

(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。

    UPDATE SC
     SET GRADE=GRADE*1.05
     WHERE C#='C4' AND GRADE<=75
    UPDATE SC
     SET GRADE=GRADE*1.04
     WHERE C#='C4' AND GRADE>75
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.8 “仓库管理”关系模型有五个关系模式:

零件 PART(P#,PNAME,COLOR,WEIGHT)

项目 PROJECT(J#,JNAME,DATE)

供应商 SUPPLIER(S#,SNAME,SADDR)

供应 P_P(J#,P#,TOTOAL)

采购 P_S(P#,S#,QUANTITY)

(1)使用SQLDDL语句定义上述五个基本表,并说明主键和外键。

    CREATE TABLE PART
    (P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL,
    COLOR CHAR(10),WEIGHT REAL,
    PRIMARY KEY(P#))
    CREATE TABLE PROJECT
    (J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL,
    DATE DATE,
    PRIMARY KEY(J#))
    CREATE TABLE SUPLIER
    (S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20),
    PRIMARY KEY(S#))
    CREATE TABLE P_P
    (J# CHAR(4),P# CHAR(4),TOTAL INTEGER,
    PRIMARY KEY(J#,P#),
    FOREIGN KEY(J#) REFERENCE PROJECT(J#),
    FOREIGN KEY(P#) REFERENCE PART(P#))
    CREATE TABLE P_S
    (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER,
    PRIMARY KEY(P#,S#),
    FOREIGN KEY(P#) REFERENCE PART(P#),
    FOREIGN KEY(S#) REFERENCE SUPLIER(S#))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

(2)试将PROGECT、P_P、PART三个基本表的自然联接定义为一个视图VIEW1,PART、P_S、SUPPLIER 三个基本表的自然联接定义为一个视图VIEW2。

    CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL)
          AS SELECT PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL
          FROM PROJECT,PART,P_P
          WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J# 
     
    CREATE VIEW VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)
          AS SELECT PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY
          FROM PART,P_S,SUPPLIER
          WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(3)试在上述两个视图的基础上进行数据查询:

1)检索上海的供应商所供应的零件的编号和名字。

    SELECT P#,PNAME FROM VIEW2 WHERE SADDR='SHANGHAI'
  • 1

2)检索项目J4所用零件的供应商编号和名字。

    SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1 WHERE J#='J4')
  • 1

3.9 对于教学数据库中基本表SC,已建立下列视图:

CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE)
FROMSC
GROUPBYS#
  • 1
  • 2
  • 3
  • 4

试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作。

(1)

SELECT*
FROMS_GRADE
      允许
   SELECT S#,COUNT(C#),AVG(GRADE)FROM SC GROUP BY S#
  • 1
  • 2
  • 3
  • 4

(2)

SELECTS#,C_NUM
FROMS_GRADE
WHEREAVG_GRADE>80
    允许
   SELECT S#,COUNT(C#) FROM SC WHEREAVG(GRADE)>80
  • 1
  • 2
  • 3
  • 4
  • 5

(3)

SELECTS#,AVG_GRADE
FROMS_GRADE
WHEREC_NUM>(SELECTC_NUM
FROMS_GRADE
WHERES#=‘S4’)
    允许
   SELECT S#,AVG(GRADE)
   FROM SC AS X
   WHERE COUNT(X.C#)>(SELECTCOUNT(Y.C#) FROM SC AS Y WHERE Y.S#='S4')
   GROUP BY S#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(4)

UPDATES_GRADE
SETC_NUM=C_NUM+1
WHERES#=‘S4’
    不允许
  • 1
  • 2
  • 3
  • 4

(5)

DELETEFROMS_GRADE
WHEREC_NUM>4
    不允许
  • 1
  • 2
  • 3

3.10 预处理方式对于嵌入式SQL的实现有什么重要意义?

预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式; 然后再用宿主语言的编译程序把源程序编译成目标程序。这样,不用扩充宿主语言的编译程序, 就能处理SQL语句。

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

### C++工程师面试相关题目和准备资料 #### 常见C++工程师面试题 以下是针对C++工程师职位的些常见面试题及其解答: 1. **TCP/IP 协议栈的分层及功能** TCP/IP 协议栈分为四层:应用层、传输层、网络层和链路层。每层都有特定的功能[^1]: - 应用层负责提供应用程序间的接口,如 HTTP、FTP 和 SMTP。 - 传输层主要负责端到端的数据传输可靠性,包括 TCP 和 UDP。 - 网络层负责数据包的路由选择,典型代表是 IP 协议。 - 链路层负责在同物理网络上的节点间传递数据帧。 2. **C++ 中使用 Socket 进行网络通信** 使用 Socket 编程的基本流程如下: - 创建套接字(`socket()` 函数)。 - 绑定地址和端口(`bind()` 函数)。 - 对于服务器端监听连接请求(`listen()`),并接受客户端连接(`accept()`);对于客户端发起连接(`connect()`)。 - 数据交互通过 `send()` 和 `recv()` 实现。 - 关闭套接字(`close()` 或 `shutdown()`)。 3. **阻塞 IO 和非阻塞 IO 的区别** 阻塞 IO 是指调用会直等待直到操作完成才返回,而非阻塞 IO 则立即返回状态或错误码[^1]。 - 阻塞模式适合简单的单线程程序,但可能因等待 I/O 而浪费资源。 - 非阻塞模式允许程序继续执行其他任务,但在频繁轮询时可能导致 CPU 开销增加。 4. **基于 TCP 的服务器和客户端通信实现** 基本实现步骤包括创建套接字、绑定地址、监听连接、接收新连接以及读写数据。以下是个简单示例代码: ```cpp // 服务器端代码片段 int server_fd, new_socket; struct sockaddr_in address; int opt = 1; // 创建 socket 文件描述符 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置 reuseaddr 选项 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定 bind(server_fd, (struct sockaddr *)&address, sizeof(address)); // 监听 listen(server_fd, 3); while(true){ if ((new_socket = accept(server_fd, (struct sockaddr *)NULL, NULL))<0){ perror("accept"); exit(EXIT_FAILURE); } char buffer[1024]; read(new_socket , buffer, 1024); printf("%s\n",buffer ); send(new_socket , "Hello from server", strlen("Hello from server"), 0); close(new_socket); } ``` 5. **多路复用的概念及其实现方法** 多路复用是种让多个文件描述符共享同个事件循环的技术[^1]。常用函数有 `select` 和 `poll`,其中 `select` 可监控有限数量的文件描述符集合的状态变化,而 `poll` 支持更多描述符且性能更优。 6. **TCP 的三次握手与四次挥手过程** - 三次握手机制用于建立可靠的连接[^1]:SYN -> SYN/ACK -> ACK。 - 四次挥手指令关闭已有的连接[^1]:FIN -> ACK -> FIN -> ACK。 7. **异步 IO 的概念及其实现** 异步 IO 不会在等待期间阻塞当前线程,而是由操作系统通知何时可以安全地进行下步操作。Linux 下可利用 AIO 接口或者 epoll 来实现高效的异步处理逻辑。 8. **HTTP 和 HTTPS 的差异** HTTP 明文传输数据存在安全隐患,而 HTTPS 加密了整个通信过程以保护隐私[^2]。HTTPS 主要依赖 SSL/TLS 层级的安全协议来保障信息完整性、机密性和真实性。 9. **RESTful Web 服务的设计原则** RESTful API 设计遵循统接口标准,采用资源导向的方式定义 URL 结构,并配合 GET、POST、PUT 和 DELETE 方法表达不同的业务需求。 10. **并发访问下的线程同步机制** 并发环境下需注意竞争条件问题,可通过锁原语解决冲突情况,比如互斥量(mutex)、信号量(semaphore)、条件变量(condition variable)等工具来协调资源共享行为。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值