使用SQL语句删除没有学生选修的课程记录

2020-11-19 05:34:10 字数 7918 阅读 5469

1楼:匿名用户

这个我也答了

delete from 课程 where 课程号 not in(select 课程号 from 选课)

使用sql语句删除没有学生选修的课程记录

2楼:匿名用户

delete from 课程 where 课程号 not in(select 课程号 from 选课)

3楼:匿名用户

delete 课程 where 课程号 in(select 课程号 from 选课 a where not exists (select 学号 from学生 where a.学号=学号))

如此即可

sql语句查询没有被学生选修过的课程(即课程号没有在sc表中出现过)的名称.

4楼:匿名用户

1、创建学生及课程表,

create table test_student(stu_id number, class_id number);

create table test_class(class_id number, class_name varchar2(30));

2、插入测试数据,

insert into test_student values(1,1001);

insert into test_student values(2,1001);

insert into test_student values(3,1002);

insert into test_student values(4,1003);

insert into test_student values(5,1003);

insert into test_student values(6,1003);

insert into test_class values(1001,'美术');

insert into test_class values(1002,'**');

insert into test_class values(1003,'绘画');

insert into test_class values(1004,'跆拳道');

3、查询学生选修的课程,

select * from test_student t, test_class b where t.class_id = b.class_id

4、查询无学生选修的课程,可以发现1004 跆拳道课程,无人选择,

select b.*

from test_student t, test_class b

where t.class_id(+) = b.class_id

and t.class_id is null

5楼:偶梅花象婷

一般情况来说,有一个关于选修课程的表,我暂时叫他t_course,pk是courseid

一个学生表,叫t_student,pk是studentid,一个关系表,叫t_join,

pk是joinid,

fk是studentid和courseid我们定义了很多课程,然后有很多学生,如果一个学生选修了一个课程,就会有条关联的数据放在t_join里面,这样的话,我们要知道有多少学生选修了一门课程的话,只需要

select

count(0)

from

t_courese

cinner

join

t_joinjon

c.courseid

=j.courseid

where

c.courseid=

6楼:匿名用户

1)select a.课程 from 课程表 a where not exists(

select 1 from sc b where b.课程号=a.课程号);

2)select distinct a.课程 from 课程表 a left join sc b

on a.课程号=b.课程号 where b.课程号 is null;

请按实际调整**中的表名和字段名。

如果碰到大数据表时在有可利用的索引情况下推荐语句1其效率很高,否则语句1可能效率低下,这种情况下应采用语句2。

7楼:匿名用户

select a.**o

from sc a

where

not exists

(select b.**o

from sc b

where a.**o=b.**o);

用sql语句写出没有选修某门课的学生

8楼:匿名用户

select * from student a where not exists

(select 'x' from elective where student_id = a.id and course_id = '5')

select * from student where id not in

(select student_id from elective where course_id = '5')

第一种写法的效率要比第二种高

9楼:匿名用户

select name from student where id not in

(select student_id from elective where course_id in

(select id from course where course_id=5));

10楼:匿名用户

select name from student where not exists(select * from elective where student_id=id and course_id=5)

11楼:

select id, name from student where id not in

(select student_id from elective where course_id =5)

12楼:匿名用户

select student.name from course where course_id=5

求用sql语言在数据库中查找没有选修任何课程的学生的学号,姓名的命令?

13楼:匿名用户

假设学生表为

a,学号字段为id,姓名字段为name;

课程表为b,其中row_id为课程编号,stu_no为选修该门课的学生的学号

sql:

select a.id,a.name

from a

where a.id not in (select distinct b.stu_no from b)

14楼:匿名用户

应为三张表:

学生表a 课程表b 选修表c(cid aid bid)--没有选修任何课程的学生的学号

select*fromawhereaidnotin(selectdistinctaidfromc)--为已选修的人

如有问题可以追问,我当及时回答.

希望能帮到你!

15楼:抽插小旋风

select 学号,姓名 from 表 where 选修课程 is null

或者select 学号,姓名 from 表 where 选修课程 =‘’

用sql语句设计 第四题 删除三门以上不及格的学生记录 急求!!! 20

16楼:bendan阿修

delete 学生(表)

from ( select 学号

,count(学号) as num from 成绩(表)where 成绩 < 60

group by 学号 ) t

where 学生.学号 = t.学号

数据库中,用sql语言如何查询没有选修1号课程的学生姓名

17楼:哈皮的小逗比

student--学生表

student_id,

student_name,

student_no

course--课程表

course_id,

course_name

sc--选课信息表

student_id,

course_id

select *

from student

where student_id not in(select student_id

from sc

where course_id in

(select course_id from course where course_name = '1号课程'))

18楼:冉涵阳翁隽

假设学生表为a,学号字段为id,姓名字段为name;

课程表为b,其中row_id为课程编号,stu_no为选修该门课的学生的学号

sql:

select

a.id,a.name

from

awhere

a.id

notin

(select

distinct

b.stu_no

fromb)

19楼:匿名用户

selectsname

fromstudent

wherenotexists

(select*

fromsc

wherestudent.sno=sc.snoand**o='1');

数据库sql语句中 查询选修了全部课程的学生的学号和姓名 理解

20楼:匿名用户

首先头脑中有三点概念:

1 。 exists 子查询找到的

提交not exists 子查询中 找不到的提交

说明:不要去翻译为存在和不存在,把脑袋搞晕。

2 。 建立程序循环的概念,这是一个动态的查询过程。如 for循环 。

3 。 exists执行的流程exists首先执行外层查询,再执行内存查询,与in相反。 流程为首先取出外

层中的第一元组, 再执行内层查询,将外层表的第一元组代入,若内层查询为真,即有结果

时。返回外层表中的第一元 组,接着取出第二元组,执行相同的算法。一直到扫描完外层整表 。

for(int i =0; i<>eofout;i++)

然后再来看一个例子: 三张表 学生表student (sno,sname), 课程表course (**o,**ame) 选课表sc

(sno,**o)

要求查询出 :选修了全部课程的学生姓名

我的思路:

首先学生的选课信息存在于sc表中, 要想知道某个学生是否选修了全部课程,至少我们需要知道一共有

几门课程,这是首要的条件。其次,学生选修了与否,我们又要扫描sc全表,统计出选修了所有课程的

学生号,最后在student表中根据学生号打出姓名 。

语句如下: (已测试)

select sname from student

where sno in

(select sno from sc

group by sno //根据sno分组,统计每个学生选修了几门课程。如果等于course的总数,就是我们要找的sno

having count(*) = (select count(*) from course )) //统计course中共有几门课程

另一种思路:

引入:将题目换为 查找学号为 00003 没有选修的科目

思路:我们可以将已知学号代入,把每一个科目代入(循环),这将形成1*count(*)种组合。

将这组成作为条件,一一与sc表种进行比对,找不到匹配的我们提交 。

select **ame from course where

not exists //找不到的组合,提交course

(select * from sc where course.**o = **o and sno = ''00003'')

//在sc中匹配

换个题目: 查找没有 没有选修科目的学生姓名

思路:学号未知 , 科目未知,说明有两个未知变量。应该有两个exists。我们可以扫描

student 和 course共有 s * c 中组合,将这些组合与sc的每一项进行匹配,注意s*c组合已经包含所

有可能。如果全部找到 ,就说明已经选修了全部课程。找不到就说明有课程没选修 。再将没选修的的

提交给上一exists 循环 。若上一exists 不存在的再提交给外循环。

最后详细回答你的问题:数据库sql语句中 查询选修了全部课程的学生的学号和姓名

查询选修了全部课程的学生姓名。

select sname

from student

where not exists

(select *

from course

where not exists

(select *

from sc

where sno= student.sno

and **o= course.**o);

理解如下: 查询选修了全部课程的学生姓名。

不用管怎么样,第一个select 必定是在 student 表里选 sname 既:

select sname

from student

加上条件即: where

条件是什么呢? 条件就是---------------------》 查询选修了全部课程的

因为没有 (任意一个)谓词, 只能用 exists 或者 not exists 来表示。 这点理解吧?

所以要把条件翻译成 -----------------------》 不存在一门课程这个学生没有选修

where后面就是 不存在(not exists) (

一门课程这个学生没有选修

)接下来就是把course表中的课程依次拿出来找出 没有选修的

怎么找呢? 因为 not exists 子查询中 找不到的提交

另外你要明白 ----------------------------not exists 查询 都是相关查询----------

所以只要把 在最后一个select 中

where sno= student.sno

and **o= course.**o);

就是将这个同学通过 sc 表 和 crouse的 课程连接一遍,找到连接不上的,即: 没有选修的, 这样就找到了一门课这个学生没有选修, 存在没有选修的课,那么该学生被pass掉了,

一次进行一个同学的判断 。

若你学过程序编程,可以看下面的内容, 若没有则可忽略、。----------

上述是理解是数据库系统内部的实现,可以用for循环表示

for(i=1; i

}最后你找记住

1. 第一个select 就是 你要选的就是 学生

select sname

from student

2. 第二个 select 就是 课程

3. 第三个select 就是 学生和课程发生关系的表 ------------sc选修表

让他们连接起来

固定的模式 1 你要的结果的表 学生

2 满足条件的表 课程表

3 产生关系的表 选修表

where 通过选修表把他们连接起来