单关系表和多关系表数据查询
where和having子句的根本区别在于,where子句作用于基本表或视图,从中选择满足条件的原组,having子句作用于组(group后的组),必须用在group by子句之后,但group by子句可以没有having子句。
这里的查询语句用到的数据来自:https://blog.csdn.net/dzydzy7/article/details/102632467
1 |
--查询各位学生的学号、班级和姓名 select number, class, name from stu --查询课程的全部信息 select * from course --查询数据库中有哪些专业班级 select class from stu group by class --查询学时数大于60的课程信息 select * from course where period > 60 --查询在1986年出生的学生的学号、姓名和出生日期 select number, name, birth from stu where DATENAME(YEAR, birth) = '1986' --查询三次作业的成绩都在80分以上的学号、课程号 select stu_no, c_No from stu_work where (w_one > 80 and w_two > 80 and w_three > 80) --查询姓张的学生的学号、姓名和专业班级 select number, name, class from stu where name like '张%' --查询05级的男生信息 select * from stu where class like '%05' --查询没有作业成绩的学号和课程号 select stu_No, c_No from stu_work where(w_one is null or w_two is null or w_three is null) --查询学号为0538的学生的作业1总分 select stu_No, sum(w_one) as 'sum' from stu_work where(stu_No = '0538') group by stu_No --查询选修了K001课程的学生人数 select c_No, COUNT(stu_No) as 'cnt' from stu_work where c_No = 'K001' group by c_No --查询数据库中共有多少个班级 select count(distinct class) from stu --查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分 select stu_No, avg(w_one) as avg1, avg(w_two) as avg1, avg(w_three) as avg1, count(c_No) as cnt from stu_work inner join stu on stu.number = stu_work.stu_No group by stu_No having count(c_No) >= 3 --查询于兰兰的选课信息,列出学号、姓名、课程名(使用两种连接查询的方式) --方法一 select stu.number, stu.name, course.c_Name from course inner join stu_work on course.c_No = stu_work.c_No inner join stu on stu_work.stu_No = stu.number where stu.name = '于兰兰' --方法二 select R1.number, R1.name, R3.c_Name from (select stu.number, stu.name from stu where(stu.name = '于兰兰'))as R1 inner join (select stu_work.stu_No, stu_work.c_No from stu_work)as R2 on R2.stu_No = R1.number inner join (select course.c_Name, course.c_No from course)as R3 on R2.c_No = R3.c_No --方法二简化 select R1.number, R1.name, R3.c_Name from (select stu.number, stu.name from stu where(stu.name = '于兰兰'))as R1 inner join (select stu_work.stu_No, stu_work.c_No from stu_work)as R2 on R2.stu_No = R1.number, (select course.c_Name, course.c_No from course)as R3 where(R2.c_No = R3.c_No) |