• 数据库实验 --查询选修了“c1”课程没有选修“c2”课程的学生学号 问题: 查询选修了“c1”课程没有选修“c2”课程的学生学号。 查询中嵌套查询语法格式,及使用IN,ANY,ALL,EXISTS操作符和比较运算符对数据库...

    数据库实验 --查询选修了“c1”课程但没有选修“c2”课程的学生学号

    问题:

    查询选修了“c1”课程但没有选修“c2”课程的学生学号。
    查询中嵌套查询语法格式,及使用IN,ANY,ALL,EXISTS操作符和比较运算符对数据库进行嵌套查询的操作。

    方法一:采用 in 的方法

    select s_num as 学号
    from  selectCourse A
    where A.c_num = 'C1' and  s_num  not in (select  s_num from selectCourse
                                          where  c_num ='C2' )
    
    

    方法二:采用exists方法

    select s_num as 学号
    from  selectCourse A
    where A.c_num = 'C1' and  not exists (select * from selectCourse B
                                          where A.s_num=B.s_num  and  c_num ='C2' )
    

    方法三:采用 集合操作 : INTERSECT 返回多个查询结果中相同的部分

    select   s_num as 学号 from selectCourse
    								       where  s_num  not  in
    								        (
    										select  s_num  from  selectCourse
    										where  c_num ='C2'   
    										) 
    NTERSECT  
    select   s_num as 学号 from selectCourse
    								      where  s_num   in
    										(
    										 (select  s_num  from  selectCourse
    										where  c_num ='C1')  
    										) 	
    

    实验数据

    在这里插入图片描述

    实验结果

    在这里插入图片描述

    补充说明:

    方法一:采用 in 的方法
    方法二:采用exists方法
    具体in和 exists区别请看SQL中IN和EXISTS用法的区别

    方法三: 采用 集合操作 : INTERSECT 返回多个查询结果中相同的部分-----------------也就是数学中的交集

    补充:

    集合操作
    在这里插入图片描述

    数据如下所虚的相关代码:

    --创建选课表
    create table selectCourse
    (
     s_num  int,
     c_num varchar(20),
     score numeric(3,1)   ,
     primary key (s_num,c_num),
     foreign key ( s_num) references student(s_num),
     foreign key (c_num) references course(c_num),
    )
    drop table selectCourse
    --插入数据
    
    insert into  selectCourse(s_num, c_num, score) 
                                        values(1815001,'C1',93),
    									         (1815002,'C1',90),
    											 (1815003,'C1',99),
    											 (1815004,'C1',96),								
    			                                 (1815001,'C2',80),
    											 (1815001,'C3',90),
    											 (1815001,'C4',78),
    											 (1815001,'C5',88),
    											 (1815001,'C6',98),
    											 (1815005,'C3',88),							   
    											 (1815004,'C3',98)
    insert into  selectCourse(s_num, c_num ) 
                                   			  values(1815005,'C4')
    
    展开全文
  • select Sname,Student.Sno ...left join SC on SC.Sno=Student.Sno --通过课程号左连接选修表 left join Course on SC.Cno=Course.Cno--通过课程号左连接课程表 where Student.Sno not in(select Sno from S...

    select Sname,Student.Sno

    from Student --从学生表中查询姓名、学号

    left join SC on  SC.Sno=Student.Sno --通过课程号左连接选修表

    left join Course on SC.Cno=Course.Cno--通过课程号左连接课程表

    where Student.Sno not in(select Sno from SC where Cno=(select Cno from Course where Cname='数据库')) --选择没有学习数据库的学生

    group by Sname,Student.Sno--按姓名、学号分组

    展开全文
  • 选修课程管理系统数据库课程设计
  • 为了解答“如何查询选修人数最大的课程号?”和“如何查询员工人数最多的部门编号?”的问题,我用尽各种方式搜索,还是没有找到绝对能解释清楚这个问题的答案。在搜索了近百个答案后,我吸收了很多零散的知识点,...

    前言:
    为了解答“如何查询选修人数最大的课程号?”和“如何查询员工人数最多的部门编号?”的问题,我用尽各种方式搜索,还是没有找到绝对能解释清楚这个问题的答案。在搜索了近百个答案后,我吸收了很多零散的知识点,结合自己的分析,加上尝试N次的情况下,总算理解清楚并解答出来。我将把我梳理清楚的解题思路与知识点写出来,给这乱七八糟的网页内容多一份精确的答案,帮助迷途羔羊们。

    一、题目

    题目来源:数据库系统原理–实验二 数据库定义与操作语言–习题答案
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (1)如何查询选修人数最大的课程号?

    二、答案

    SELECT courseNo
    FROM (
    	SELECT courseNo,COUNT(studentNo) Snum
    	FROM Score
    	GROUP BY courseNo) A
    WHERE Snum=(
    			SELECT MAX(Snum)
    			FROM(
    				SELECT courseNo,COUNT(studentNo) Snum
    				FROM Score
    				GROUP BY courseNo) A)
    

    在这里插入图片描述

    三、分析

    要解决这道题,我们得先理解文字意思,一个是查询统计选修人数最大,另一个是查询“统计选修人数最大”对应的课程号。
    那么,如何去查询这道题呢?我们需要把思路先理清一下。
    为了查询到“统计选修人数最大”对应的课程号,我们得先查询到统计选修人数最大;为了查询到统计选修人数最大,我们得先查询到统计选修人数。
    所以,我们要解决问题有3个。

    1. 如何查询到统计选修人数?
    2. 如何查询到统计选修人数最大?
    3. 如何查询到“统计选修人数最大”对应的课程号?

    解答:

    1. 如何查询到统计选修人数?
    SELECT courseNo,COUNT(studentNo) Snum
    				FROM Score
    				GROUP BY courseNo
    

    在这里插入图片描述

    1. 查询到统计选修人数最大?
    SELECT MAX(Snum)
    FROM(
    	SELECT courseNo,COUNT(studentNo) Snum
    	FROM Score
    	GROUP BY courseNo) A
    

    在这里插入图片描述

    1. 查询到“统计选修人数最大”对应的课程号?
    SELECT courseNo
    FROM (
    	SELECT courseNo,COUNT(studentNo) Snum
    	FROM Score
    	GROUP BY courseNo) A
    WHERE Snum=(
    			SELECT MAX(Snum)
    			FROM(
    				SELECT courseNo,COUNT(studentNo) Snum
    				FROM Score
    				GROUP BY courseNo) A)
    

    在这里插入图片描述

    四、相关知识点说明

    这题用到了sql server 的 COUNT函数、MAX函数、FROM后面可以接查询语句当作虚表。
    在这题中,
    COUNT函数有生成一个Snum列名,指的是“统计选修人数”的个数;
    而MAX函数后面却没有生产新的列名,这是为什么呢?因为在这题中,我们要的是“个数最大”的值,而没用到与最大值新生成的列名,所以可以不用,如果有生产新的列名,那也不影响结果。
    FROM后面接的虚表需要把查询语句括号起来,然后用个字母或单词跟在括号后面当作这个虚表的名字。

    五、举例练习

    题目来源:数据库系统原理–第3章练习–习题答案

    题目

    现有某公司HR(人力资源)系统的关系模式如下:
    Emp (emp_id,ename,age,salary,address)
    // 职工(职工编号,姓名,年龄,工资,住址)
    Dep (dep_id,dname,address)
    // 部门(部门编号,部门名称,部门所在地)
    Works(emp_id,dep_id,begin_date, end_date)
    // 工作(职工编号,部门编号,开始工作日期,离职日期)
    注:Works表记录了职工在不同时间段在公司各部门工作的履历,
    如果离职日期(end_date)为空,表明该职工目前仍在此部门工作。

    (1)查询员工人数最多的部门编号。

    答案

    --查询员工人数最多的部门编号。
    SELECT dep_id
    FROM (--把"查询部门编号和职工编号的人数"当作虚表A
    	SELECT dep_id,COUNT(emp_id) Ce
    	FROM Works
    	GROUP BY dep_id)A
    WHERE Ce=(--查询虚表A中职工编号的人数Ce的最大值
    		SELECT MAX(Ce)
    		FROM (--把"查询部门编号和职工编号的人数"当作虚表A
    			SELECT dep_id,COUNT(emp_id) Ce
    			FROM Works
    			GROUP BY dep_id)A)
    

    注明:

    --查询部门编号和职工编号的人数
    SELECT dep_id,COUNT(emp_id) Ce
    FROM Works
    GROUP BY dep_id
    

    如果有更好的方法,在评论区里提出来,供大家参考。如果很有用,我将加进去。

    推荐文章
    数据库系统概论(基础篇)-笔记

    展开全文
  • 查询选修了3门课程以上的学生的学号; Data 其中Sno字段为student表的外键,Cno字段为course表的外键。 | ScID[int] | Sno[char(7)] | Cno[char(10)] | Grade[int] | isTec[varchar(10)] | | :————: | :————:...

    Aim

    查询选修了3门课程以上的学生的学号;

    Data

    其中Sno字段为student表的外键,Cno字段为course表的外键。

    | ScID[int] | Sno[char(7)] | Cno[char(10)] | Grade[int] | isTec[varchar(10)] |
    | :————: | :————: | :————: | :————: |
    | 1 | 9512101 | c01 | 90 | 必修 |
    | 2 | 9512101 | c02 | 86 | 选修 |
    | 3 | 9512101 | c06 | 45 | 必修 |
    | 4 | 9512102 | c02 | 78 | 选修 |
    | 5 | 9512102 | c04 | 66 | 必修 |
    | 6 | 9521102 | c01 | 82 | 选修 |
    | 7 | 9521102 | c02 | 75 | 选修 |
    | 8 | 9521102 | c04 | 92 | 必修 |
    | 9 | 9521102 | c05 | 50 | 必修 |
    | 10 | 9521103 | c02 | 68 | 选修 |
    | 11 | 9521103 | c06 | 56 | 必修 |
    | 12 | 9531101 | c01 | 80 | 选修 |
    | 13 | 9531101 | c05 | 95 | 必修 |
    | 14 | 9531102 | c05 | 85 | 必修 |

    Method

    select Sno from dbsc group by Sno having count(*)>3;
    

    Reference

    • https://www.educoder.net/tasks/yvfk546nmelw
    展开全文
  • 此为大三数据库课程设计、后几经修改,有需要的同学拿去当毕业设计吧。。。 界面预览:http://www.codesky.net/pic2004/201122819151331.gif 本程序提供几大模块: 用户管理模块(权限控制) 修改密码模块 操作日志...
  • 学生选修课程系统设计 假定有n门课程,每门课程有:课程编号,课程名称, 课程性质(公共课、必修课、选修课),总学时,授课学时, 实验或上机学时,学分,开课学期等信息,学生可按要求 (如总学分不得少于60)自由...
  • select Student.Sno,Sname from SC --从选修表中查询学号、...on Student.Sno not in(select Sno from SC where Cno='1')--选择没有选修1号课程的 group by Student.Sno,Sname;--通过学号、姓名分组 //SELECT Sna...

    select Student.Sno,Sname

    from SC --从选修表中查询学号、姓名

    left join Student --左连接学生表

    on Student.Sno not in(select Sno from SC where Cno='1')--选择没有选修1号课程的

    group by Student.Sno,Sname;--通过学号、姓名分组

    //SELECT Sname,Sno

    from Student

    where not exists

    (select *

    from SC

    WHERE Sno=Student.Sno and Cno='1');

    展开全文
  • select Course.Cno,Cname,avg(Grade) avgGrade from Course--从课程表中查询课程号、课程...left outer join SC on SC.Cno=Course.Cno--通过课程号左连接选修表 Group by Cname,Course.Cno;--按课程名、课程号分组...
  • 数据库SQL语句中 查询选修了全部课程的学生的学号和姓名查询选修了全部课程的学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * fROM SC WHER...
  • SELECT sname FROM student WHERE NOT EXISTS ( SELECT * FROM sc WHERE student.sno = sc.sno AND sc.cno = '1' )
  • 简易的学生管理系统,前端 java
  • select * from student where sno in(select sno from sc group by sno having count(*)=(select count(*)from course))通过sc表中sno分组,如果总条数等于课程表总课程,说明已找出选修所有课程的学生no ...
  • 由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。 2、总体设计 整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块...
  • 先给出sql 代码: select sno, sname from students where not exists( select * from course where not exists( select * from sc where sno =
  • 问题:查询没有学生选的课程信息 表dbo.Student 列名 数据类型 Stu_id varchar(10) Stu_name varchar(10) Stu_sex varchar(2) Birthdate datetime Phone varchar(8) Address varchar(100) 表dbo...
  • 一、SQL语言查询选修了全部课程的学生的学号和姓名。 两种解决途径: 第一种:  我们可以表示为在SC表中某个学生选修课程数等于C表中课程总数。相应的SQL语言如下: select S#,SNAME from S where S# ...
  • 山东大学数据库课程设计 学生信息管理系统的源代码与数据库文件,与大家分享,不足之处请见谅。
  • 接着我们是要分析 到底有谁选修了全部课程 而选修课程信息在选课表中也有显示 所有我们通过 grade_88这个选课表 并且对学号进行分组 (用到 group by)当每一个学号有五条记录的时候(选一门课 对...
  • 查询选修了全部课程的学生姓名: 第一种: 理解为:查询一个人的姓名,这个人不存在课程没选择。 思路: 1.拿出Student表的第一行数据 2.拿出Course表的第一行数据 3.拿出SC表的第一行数据 (其实这个表...
1 2 3 4 5 ... 20
收藏数 13,048
精华内容 5,219