数据库实验3

一、显示所有学生学号,名字,专业,班级

select
  b.stu_id,
  b.stu_name,
  a.cls_name,
  a.grade
from t_student b
INNER JOIN t_class a ON a.cls_id=b.cls_id


二、创建虚拟表(视图),并更改列的名称

CREATE VIEW students
AS
select
  b.stu_id id,
  b.stu_name name,
  a.cls_name,
  a.grade
from t_student b
INNER JOIN t_class a ON a.cls_id=b.cls_id

三、在视图中根据学号查询学生年级、专业

SELECT
  a.id,
  a.grade,
  a.cls_name
FROM students a
WHERE a.id ='20107072'


四、聚合函数的应用

  • (1)按学号查询学生成绩大于75分的科目,并保证学科不能重复*
SELECT
    DISTINCT c.course_name,
    b.scroll
FROM t_student a
INNER JOIN t_mark b 
  ON a.stu_id=b.stu_id
INNER JOIN t_course c 
  ON c.course_id=b.course_id
WHERE
  a.stu_id='20107072'
  AND
  b.scroll>='75'

  • (2)根据学号查询学生挂科总学分、挂科次数
 SELECT
    SUM(a.course_credit),
    COUNT(*),
    COUNT(DISTINCT a.course_name)
FROM t_course a
INNER JOIN t_mark b 
  ON a.course_id=b.course_id
WHERE
  b.stu_id='20107072'
  AND
  b.scroll<60

  • (3)查询‘会计’专业,‘2012’年级挂科的学生

One:

SELECT
   DISTINCT a.stu_name
FROM  t_student a
INNER JOIN t_mark b 
  ON a.stu_id=b.stu_id
INNER JOIN t_class c 
  ON c.cls_id=a.cls_id
WHERE
  c.subject='会计'
  AND
  c.grade='2012'
  AND 
  b.scroll<60

Two:

SELECT b.stu_id,b.stu_name
FROM t_class a
INNER JOIN  t_student b 
  ON a.cls_id=b.cls_id
WHERE 
  a.subject='会计'
  AND
  a.grade=2012
  AND
  b.stu_id IN(
    SELECT c.stu_id FROM t_mark c
    WHERE c.scroll<60)

Three:使用EXISTS函数,函数中的子查询不会返回任何数据,而是返回TRUE或FALSE,查询只是检测行是否存在。

SELECT b.stu_id,b.stu_name
FROM t_class a
INNER JOIN t_student b ON a.cls_id=b.cls_id
WHERE
  a.subject='会计'
  AND
  a.grade=2012
  AND
  EXISTS(
    SELECT 0 FROM t_mark c
    WHERE c.stu_id=b.stu_id AND c.scroll<60)

猜你喜欢

转载自blog.csdn.net/qq_40247103/article/details/85032444