一、显示所有学生学号,名字,专业,班级
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)