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 通过选修表把他们连接起来