当前位置:首页 » 课程设计 » 查询001课程比002课程

查询001课程比002课程

发布时间: 2021-02-28 14:10:23

㈠ 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名; Select S#,Sname from (s

(select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') AS score2
from Student,SC where Student.S#=SC.S# and C#='001') AS S_2
注:sc sc_2=sc as sc_2
组成一个包含s#,sname,score,score2的表,这个表叫S_2
在S2表中取S#,sname,加个where条件
中间省略专了3个as,这样就容易懂属了。

㈡ sql中怎么实现如下查询: 学生01学了001,002俩课程,怎么查询出和学生01所学课程完全一样的同学

SELECT * FROM STUDENT WHERE SID IN
(SELECT a.SID FROM (SELECT SID,GROUP_CONCAT(CID ORDER BY CID ) AS gc FROM SC GROUP BY SID )a WHERE a.gc = (SELECT GROUP_CONCAT(CID ORDER BY CID) FROM SC WHERE SID = '01') AND a.SID <>'01')
解题思路:
STUDENT 为学生表 有 SID 和 其他学生信息
SC为成绩表 有 课程CID 和 SID 关联
先查回SC 表 获取 SID 和 对应所选课程 按一答定顺序排序的 CID 字符串的拼接(如 学号01 选了课程 01 02 03 那么对CID进行字符串拼接 成 学号 :01 gc:01,02,03 格式 )然后获取 01 学生的gc 字符串 , 再获取其他gc = 01 学生的gc 排除 01的 SID 最后 查 STUDENT 信息 根据获取的 SID 到此结束。

㈢ 求同时选修了001和002号课程的学生号

第一个正确。
第一个结果是选修了001和002课的学生。
第二个结果还要包括成绩相同

㈣ 数据库查询 查询“001”课程比“002”课程成绩高的所有学生的学号

分析如下:

--1selectSC1.S#fromSCSC1JOINSCSC2ONSC1.S#=SC2.S#

WHERESC1.C#='001'ANDSC2.C#='002'ANDSC1.score>SC2.score

--2selectS#,AVG(score)

平均成绩fromSCgroupbyS#

havingAVG(score)>60--3selectStudent.S#,

Sname,COUNT(*)选课数,SUM(score)总成绩

fromStudentJOINSConStudent.S#=SC.S#

groupbyStudent.S#,Sname

(4)查询001课程比002课程扩展阅读:

数据库操作的注意事项

1、对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null

最好不要给数据库留NULL,尽可能的使用NOT NULL填充数据库.

备注、描述、评论之类的可以设置为NULL,其他的,最好不要使用NULL。

不要以为NULL不需要空间,比如:char(100)型,在字段建立时,空间就固定了,不管是否插入值(NULL也包含在内),都是占用100个字符的空间的,如果是varchar这样的变长字段,null不占用空间。

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num = 0

3、应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

4、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or Name = 'admin'

可以这样查询:
select id from t where num = 10
union all
select id from t where Name = 'admin'

5、in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

很多时候用exists 代替 in是一个好的选择:select num from a where num in(select num from b)

用下面的语句替换:select num from a where exists(select 1 from b where num=a.num)

6、下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’

若要提高效率,可以考虑全文检索。

7、如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。

㈤ 使用sql语言查询下列语句,特急,求答案,谢谢了

很简单 但这也太多了 !
别说一个都不会啊
还没分,那会有人给你做啊
你挑出几个不会的 再问吧

㈥ 关于sql语句:查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

这个语句前抄半段您能理解吧袭,即【 select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001' 】,这段是筛选出学过‘001’课程的学生姓名和学号,而后半段【 and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002') 】则是判断该学生是否也学过‘002’课程,留意SC表自连接这一段,即【 where SC_2.S#=SC.S# 】这个是关键,正是因为有了这个条件,所以才把整条语句的前半段和后半段的结果结合起来,如果没有这个条件的话就会变成,你所说的‘返回值恒等于true’。

简单来说就是,前半段是【学过‘001’课程的学生】,后半段是【学过‘002’课程的学生】;其中【 where SC_2.S#=SC.S# 】是把前后两段结果连接起来的关键,相当于把两个结果 Inner Join,从而得出最终结果【同时学过‘001’和‘002’的学生】。

㈦ 怎么查询“001”课程比“002”课程成绩高的所有学生的学号表结构如下:

select a.sid, a.score as score1,b.score as score2 from (select * from scoretable where cid='001') a
left join
(select * from scoretable where cid='002')b
on a.sid=b.sid
where a.score>b.score

㈧ sql 查询课程为001的成绩大于课程为002成绩的学生

select * from table where 001成绩>002成绩
你不说你的表结构,也只能写这个了

㈨ 用sql语言进行查询

亲,你这个也太高难度了吧,帮你解答完,都不知道需要多少时间啊,最好是自己做吧

热点内容
幼师专业怎么样 发布:2021-03-16 21:42:13 浏览:24
音乐小毛驴故事 发布:2021-03-16 21:40:57 浏览:196
昂立中学生教育闸北 发布:2021-03-16 21:40:47 浏览:568
建筑业一建报考条件 发布:2021-03-16 21:39:53 浏览:666
2017年教师资格注册结果 发布:2021-03-16 21:39:49 浏览:642
中国教师资格证查分 发布:2021-03-16 21:39:41 浏览:133
踵什么成语有哪些 发布:2021-03-16 21:38:20 浏览:962
东营幼师专业学校 发布:2021-03-16 21:35:26 浏览:467
机械电子研究生课程 发布:2021-03-16 21:33:36 浏览:875
杭州朝日教育培训中心怎么样 发布:2021-03-16 21:33:28 浏览:238