经典SQL题3

1、  如何删除有自增长ID的数据表中的重复数据?

2、为管理岗位业务培训信息,建立3个表:

  S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄

  C (C#,CN ) C#,CN 分别代表课程编号、课程名称

  SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩

题目:

(1). 使用标准SQL语句查询选修课程名称为’税收基础’的学员学号和姓名

(2). 使用标准SQL语句查询选修课程编号为’C 2 的学员姓名和所属单

(3). 使用标准SQL语句查询不选修课程编号为’C 5 的学员姓名和所属单位

(4). 使用标准SQL语句查询选修全部课程的学员姓名和所属单位

(5). 查询选修了课程的学员人数

(6). 查询选修课程超过5门的学员学号和所属单位

 

3、某个表有两个字段(phonesendtime
phone                   sendtime
13908000800           2006-3-8  16:20:25
13918001800           2006-3-8  17:15:20
13908000800           2006-3-8  16:25:25
13908000800           2006-3-9  07:15:20

......

请写出一个sql语句,实现的功能为:取出每个号码(phone)的最新发送时间(sendtime)的记录?

4、在SQL Server 数据库中,有一个表StudentAchievement(学生成绩),它有三个字段:StudentID(varchar(8),学生编号)CourseID(varchar(10),课程编号)Achievement(int ,成绩),写一条SQL语句,筛选出每门课程的前两名的学生编号,课程编号,成绩并排序。

5、用一条SQL语句,查询表中从第20到第30行的数据

 

参考答案:

--1、如何删除有自增长ID的数据表中的重复数据?
DELETE FROM S
WHERE [S#] NOT IN(SELECT MIN([S#]) [s#],sn,sd FROM S GROUP BY SN,SD)

SELECT MIN([S#]) [s#],sn,sd FROM S GROUP BY SN,SD
SELECT * FROM S
order by sd

2、CREATE TABLE S (S# INT,SN VARCHAR(10),SD VARCHAR(50),SA INT) --S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄

CREATE TABLE C (C# INT,CN VARCHAR(10)) --C#,CN 分别代表课程编号、课程名称

CREATE TABLE SC ( S# INT,C# INT,G INT ) --S#,C#,G 分别代表学号、所选修的课程编号、学习成绩

INSERT INTO S VALUES(1,'XA','微软',20)
INSERT INTO S VALUES(2,'XB','IBM',25)
INSERT INTO S VALUES(3,'XC','SABEAS',20)
INSERT INTO S VALUES(4,'XD','CA',20)

INSERT INTO C VALUES(1,'SQLServer')
INSERT INTO C VALUES(2,'.NET')
INSERT INTO C VALUES(3,'UML')
INSERT INTO C VALUES(4,'税收基础')
INSERT INTO C VALUES(5,'设计模式')
INSERT INTO C VALUES(6,'中国历史')
INSERT INTO C VALUES(7,'XP')

INSERT INTO SC VALUES(1,1,60)
INSERT INTO SC VALUES(1,2,70)
INSERT INTO SC VALUES(1,3,60)
INSERT INTO SC VALUES(2,1,60)
INSERT INTO SC VALUES(3,1,60)
INSERT INTO SC VALUES(2,2,60)
INSERT INTO SC VALUES(2,3,60)
INSERT INTO SC VALUES(2,4,60)
INSERT INTO SC VALUES(2,5,60)
INSERT INTO SC VALUES(2,6,55)
INSERT INTO SC VALUES(3,3,65)

INSERT INTO SC VALUES(2,7,65)
INSERT INTO SC VALUES(3,4,65)
INSERT INTO SC VALUES(3,5,65)
---------------------------------------------------------------------------------------

--(1). 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
--实现代码:
解1
SELECT SN,SD FROM S
INNER JOIN SC
ON S.S#=SC.S#
INNER JOIN C
ON C.C#=SC.C#
WHERE CN='税收基础'

解2
SELECT SN,SD FROM  S
WHERE [s#] IN(
SELECT [S#] FROM C,SC
WHERE C.[C#]=SC.[C#]
AND CN='税收基础')

--(2). 使用标准SQL嵌套语句查询选修课程编号为2的学员姓名和所属单位
--实现代码:
解1
SELECT S.SN,S.SD FROM S
INNER JOIN SC
ON S.[S#]=SC.[S#]
WHERE  SC.[C#]=2

解2
SELECT S.SN,S.SD FROM S,SC
WHERE S.[S#]=SC.[S#]
AND SC.[C#]=2

--(3). 使用标准SQL嵌套语句查询不选修课程编号为2的学员姓名和所属单位
--实现代码:

SELECT SN,SD FROM S
WHERE [S#] NOT IN(
SELECT [S#] FROM SC
WHERE [C#]=2)

--(4). 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
--实现代码:
解1
select s.s#,sd from s
where  (select count(*) from sc where s.s#=sc.s#)=(select count(*) from c)

解2
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
RIGHT JOIN
C ON SC.[C#]=C.[C#] GROUP BY [S#]
HAVING COUNT(*)=(SELECT COUNT(*) FROM C))

--(5). 查询选修了课程的学员人数
--实现代码:
SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC

--(6). 查询选修课程超过5门的学员学号和所属单位
--实现代码:
解1
select s.s#,sd from s
where  (select count(*) from sc where s.s#=sc.s#)>=5

解2
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
GROUP BY [S#]
HAVING COUNT(DISTINCT [C#])>5)

5、解1:
select top 10 * from A where id not in (select top 30 id from A)
--解2: 
select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
--解3: 

select * from (select top 3 * from
(select top 6 * from employees ) as e order by EmployeeID desc) as s
order by EmployeeID asc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值