一点儿sql 语句

CREATE DATABASE Scores
go
use Scores
create table 学生(
学号 char(4) not null primary key,
姓名 varchar(10) not null ,
年龄 int not null,
)
insert into 学生 (学号,姓名,年龄) values ('0001','李明',22)
insert into 学生 (学号,姓名,年龄) values ('0002','刘林',19)
insert into 学生 (学号,姓名,年龄) values ('0003','刘芳',20)
insert into 学生 (学号,姓名,年龄) values ('0004','欧阳丰',21)

create table 选课(
学号 char(4) not null foreign key references 学生(学号),
课程号 char(2) not null foreign key references 课程(课程号),
成绩 int
)
insert into 选课 (学号,课程号,成绩) values ('0002','01',90)
insert into 选课 (学号,课程号,成绩) values ('0001','02',67)
insert into 选课 (学号,课程号,成绩) values ('0001','01',99)
insert into 选课 (学号,课程号,成绩) values ('0002','02',58)
insert into 选课 (学号,课程号,成绩) values ('0003','02',null)

create table 课程(
课程号 char(2) not null primary key,
课程名 varchar(10) not null,
学分 int not null,
任课老师 varchar(10) not null
)
insert into 课程 (课程号,课程名,学分,任课老师) values ('01','VFP',2,'李明')
insert into 课程 (课程号,课程名,学分,任课老师) values ('02','SQL',2,'张科')
insert into 课程 (课程号,课程名,学分,任课老师) values ('03','ACCESS',3,'王洋')


--1、查询年龄在19到21范围内的学生信息。
select 学号 ,姓名 from 学生 where 年龄<21 and 年龄 >19
--2、查询成绩不在60到90范围内的学生选课信息。
select  课程.课程名 from 课程,选课 where 课程.课程号=选课.课程号 and 成绩 between 60 and 90
--3、查询姓“欧阳”且全名只有3个汉字的学生信息。
select * from 学生 where 姓名 like '欧阳_'
--4、查询没有成绩(为空)的学生的学号。
select 学号 from 选课 where 成绩 is null
--5、先按学号升序排序,再按成绩降序排列,检索出学生选课信息。
select * from 选课 order by 学号, 成绩 desc
--6、查询选修了课程的学生人数。
select count(distinct 学号) from 选课
--7、查询每门课程的选课人数及课程号。
select count(distinct 学号),课程号 from 选课 group by 课程号
--8、查询至少选修了2门课程的每个学生的平均成绩。
select AVG(成绩),课程号 from 选课 where 课程号 in
(select 课程号 from 选课 group by 课程号 having count(学号)>1) group by 课程号
--9、查询没有选课的学生信息
select 学号 from 学生 where 学号 not in (select distinct 学号 from 选课 )
--10、查询学生的学号,姓名,课程号,成绩。
select 学生.学号 ,学生.姓名,选课.课程号,选课.成绩 from 学生 ,选课 where 学生.学号=选课.学号
--11、查询选修课程号为’02’的学生姓名。
select 学生.姓名 from 学生,选课 where  学生.学号=选课.学号 and 课程号='02'
--12、查询不选修课程编号为’02’的学生姓名。
select 姓名 from 学生 where 姓名 not in (select 学生.姓名 from 学生,选课 where  学生.学号=选课.学号 and 课程号='02')
--13、找出没有选修过“李明”老师讲授课程的所有学生姓名。
select 学生.姓名 from 学生,课程,选课 where 学生.学号 = 选课.学号 and 选课.课程号 = 课程.课程号 and 任课老师 = '李明'
--14、查询选修SQL这门课的成绩最高的学生学号。
 select 学号 from 选课 where 成绩 in(  select max(选课.成绩) from 选课,课程 where 课程.课程号=选课.课程号 and 课程名='sql' )
--15、查询成绩排在前三名的学生的成绩信息。
select  top 3* from 选课  order by 成绩 desc
--16、列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩。<60
select 学生.姓名,avg(选课.成绩) from 学生 , 选课 where 学生.学号=选课.学号 and 选课.成绩<60
group by 学生.姓名 having count(学生.学号)>1
--17、列出“01”号课成绩比“02”号该同学课成绩高的所有学生的学号
select distinct 一.学号  from 选课 as 一,选课 as 二 where 一.成绩 > 二.成绩
and 一.课程号 ='01' and 二.课程号 = '02' and 一.学号 = 二.学号

Select 选课.学号,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO
--18、列出“01”号课成绩比“02”号同学该门课成绩高的所有学生的学号及其“01”号课和“02”号课的成绩
select distinct 一.学号,一.成绩,二.成绩  from 选课 as 一,选课 as 二 where 一.成绩 > 二.成绩
and 一.课程号 ='01' and 二.课程号 = '02' and 一.学号 = 二.学号
select * from 学生
select * from 选课
select * from 课程

--17,18题有点意思  表 >选课< as 一 和 >选课<as 二    是将表 >选课<看做  表>一< 和 表>二<  两个表 俩表 数据一样 

--17 题主要查 >学号<   01的学号成绩>02的学号成绩              18题 是>成绩< 就是 02号课成绩 <01 号课成绩

posted @ 2010-11-05 20:16  初学软件  阅读(338)  评论(0编辑  收藏  举报