sql考试题
㈠ 求解 sql server 2000 考试试题
1.一名学生可以选修多个科目,一个科目可以被多个学生选修,这种关系是
D.
A.一对一
B.一对多
C.多对一
D.多对多
2.现阶段处于数据处理技术的哪个阶段?
d
A.人工管理
B.文件管理
C.数据库系统
D.数据库系统管理
3.NULL是指
b
A.
0
B.
空
C.
不确定
D.
无意义
4.
向表中插入一条记录使用(
b
)语句。
A.
select
B.
insert
C.
create
D.
update
5.
如要查找姓李的同学,应使用(
c
)通配符。
A.
*
B.
_
C.
%
D.
^
6.
SELECT语句中与HAVING子句通常同时使用的是(
c
)子句。
A.ORDER
BY
B.WHERE
C.GROUP
BY
D.无需配合
7.
SQL
Server2000是一个(
c
)的数据库系统
A.网状型
B.层次型
C.关系型
D.以上都不是
8.假设“产品”表中有“产品ID”,“产品名称”,“价格”此三个字段,要在此表里添加一条新记录,下列SQL语句能实现添加功能的是
c
A.
UPDATE
INSERT
产品
VALUES('01008','花生','20');
B.
INSERT
产品
VALUES(01008,花生,20);
C.
INSERT
INTO
产品
VALUES('01008','花生','20');
D.
INSERT
*
FROM
产品
VALUES('01008','花生','20');
9.
用于删除表中所有数据行的命令是
c
A.DELETE
TABLE
表名
B.TRUNCATE
TABLE
表名
C.DROP
TABLE
表名
D.ALTER
TABLE
表名
10.
SQL
Server
2000提供了一整套管理工具和实用程序,其中负责启动、暂停和停止SQL
Server的4种服务的是
d
A.企业管理器
B.导入和导出数据
C.事件探察器
D.服务管理器
1.
在SQL中,用___update
_命令可以修改表中的数据,用__alter__命令可以修改表的结构。
2.
删除表命令是:_____drop______。
3.
数据库系统的特点分别是数据的结构化、数据的共享性高、冗余度低、易于扩充
、数据独立性和
数据由DBMS统一管理和控制
。
4.
在数据库的表中,
主键
是指表中的某一列,该列的值唯一标识一行。
5.
SQL
Server中索引类型包括的三种类型分别是_聚集____、__费聚集____和___唯一___。
6.
SQL
Server
2000的文件包括:
数据文件(.mdf或.ndf)和
ldf
。
1.数据的概念及种类:
所谓数据,通常指用符号记录下来的可加以鉴别的信息。例如,为了描述黑板的信息,可以用一组数据“黑色、矩形、3.2m×1.4m”来表示,由于“黑色”、“矩形”、“3.2”、“m”……这些符号已经被人们赋予了特定的语义,所以它们就具有了传递信息功能。
2.数据的特点:
数据是信息的符号表示或称为载体,信息则是数据的内涵,是对数据的语义解释。但另一方面,某一具体信息与表示它的数据的这种对应关系又因环境而异。同一信息可能有不同的符号表示,同一数据也可能有不同的解释。数据处理领域中的数据概念较之科学计算领域中数据概念已经大大地拓宽了。定义中所说的符号,不仅包含数字符号,而且包含文字、图像和其他符号;而所谓“记录下来”也不仅是指用笔写在纸上,还包括磁记录、光刻等各种记录形式。
3.数据库的概念:
数据库这个名词起源于20世纪50年代,当时美国为了战争的需要,把各种情报集中在一起,存入计算机,称为Information
Base或Database。1963年美国Honeywell公司的IDS(Integrated
Data
Store)系统投入运行,揭开了数据库技术的序幕。1965年美国利用数据库帮助设计了阿波罗登月火箭,推动了数据库技术的产生。当时社会上产生了许多行行色色的Database或Databank,但基本上都是文件系统的扩充。1968年美国IBM公司推出了层次模型的IMS数据库系统,并于1969年形成产品;1969年,提出了COBOL语言的美国CODASYL(Conference
on
Date
System
Language,数据系统语言协会)组织的数据库任务组(DBTG)发表了网状数据库系统的标准文本(1971年正式通过);1970年初,IBM公司的高级研究员E.F.Codd发表论文提出了关系模型,奠定了关系数据库的理论基础
4.列举创建数据库的方法:
1)create
database
数据库名()
2)在企业管理器中,选择数据库,点新建数据库就,填写名称,选择路径,确定就可以了。
1.
显示雇员表中所有信息。
select
*
from
employ(雇员表)
2.
显示雇员表中的雇员ID和姓名列的内容。
select
雇员ID,姓名
from
employ
3.
在雇员表中使用英文employeeid代替雇员ID,用name代替姓名显示列标题。
select
雇员ID
as
employeeid
,姓名
as
name
from
employ
4.
在雇员表中消除“职务”列中的重复行。
select
distinct
职务
from
employ
5.
获得雇员表中职务为销售代表的人的雇员ID和姓名。
select
雇员id,姓名
from
employ
where
职务=’销售‘
6.
获得雇员ID大于等于4的所有职员的雇员ID,姓名和职务。
select
雇员ID,姓名,职务
from
employ
where
雇员ID>=4
7.
从产品表获得单价大于5美元的所有产品名称,汇率为1人民币兑换0.125美元。
select
*
from
proct
(产品表)
where
单价>5
and
汇率=0.125
8.
产品表中获得单价在30~40之间的所有产品的单价,产品名称和库存量。
select
单价,产品名称,库存量
from
产品表
where
单价>30
and
单价<40
9.
查找雇员表中姓“张”的雇员的所有列信息。
select
*
from
employ(雇员表)
where
姓名
like
'张%'
10.
查找雇员表中姓名的第二个字为“雪”的雇员的所有列信息。
select
*
from
client
where
adress
like
'_雪%'
㈡ 求助SQL考试题。。明天早上就考了 今晚要交
1.select 书名,出版社 from 图书 where 20=<价格=<50 order by 价格 desc
2.select distinct a.书号 as 图书种类 ,a.操作员帐号 from 借出 a,操作员 b where a.操作员帐号=(select b.操作员帐号 from 操作员 where 操作员姓名='李凡')
3.select 书名,出版社 from 图书 where 书名 like '%数据库%' or 书名 like '%SQL%'
4.delete from 课程 where 课程编号 in ( '20016','20018','20019')
5.insert into 教师 (教师编号,姓名,所在部门,职称) values (60016,王力,,讲师)
6.select a.生产厂家,count(b.商品编号) as 商品种类 from 商品 b,(select distinct 生产厂家 from 商品) as a where a.生产厂家=b.生产厂家 group by a.生产厂家
㈢ SQL数据库练习题
1.DISTINCT、top
2.convert
3.查询、更新、管理
4.主键、外键
5.ROLLBACK TRAN、COMMIT TRAN
6.sp_renamedb
8.identity
9.插入数据的列数必须和表中列数相等
10.空
12.truncate
14.原子性、一致性、隔离性、永久性
16.count、avg、len、substring
17.cast
18.windows
19.物理数据表
20.<>、!=
㈣ sql笔试题
两个表第一个store(store_id,city,space)
第二个employee(store_id,emp_id,salary)
1、每家店的平均工资
select t1.store_id,AVG(salary) from store t1 inner join employee t2 on t1.store_id=t2.store_di
group by t1.store_id
2、每个城市的平均工资
select t1.city,AVG(salary) from store t1 inner join employee t2 on t1.store_id=t2.store_di
group by t1.city
3、查找该城市存在员工工资低于1000的城市信息
select distinct t1.city
from store t1 inner join employee t2 on t1.store_id=t2.store_id
where t2.salary<1000
4、查找城市其职工工资有低于1000的该城市职工平均工资
select t1.city,avg(t2.salary)
from store t1 inner join employee t2 on t1.store_id=t2.store_id
where exists(select * from employee t3
where t1.store_id=t3.store_id and t3.salary<1000)
group by t1.city
其他的自己看吧,比较简单
5、每个城市工资最高的员工信息
select t2.city,t1.* from employee t1 inner join store t2 on t1.store_id=t2.store_id
where exists(
select * from (
select t1.city,max(salary) from store t1 inner join employee t2 on t1.store_id=t2.store_di
group by t1.city) tt where t1.city=tt.city and t2.salary=tt.salary)
6、查询每个城市的员工总工资,总的店面面积(?),门店的数量,员工数量,最高/最低工资数
㈤ 求sql数据库考试题答案
1.create database Readbook
on
(name=Readbook_data,filename='D:\server\Readbook_data.mdf',size=2mb,maxsize=10mb,filegrowth=1mb)
log on
(
name=Readbook_log,
filename='D:\server\Readbook_log.ldf',size=1mb,maxsize=5mb,filegrowth=1mb
)
go
2.use mybase
go
alter database mybase
add log file
(
name=Readbook2_log,
filename='D:\server\mybase2_log.ldf',size=2mb,maxsize=10mb,filegrowth=1mb
)
go
3.alter database mybase
remove file Readbook2_log
㈥ sql语句 面试题
A.创建表格CODE省略
注明:学生表PK stu_id 课程表pk cos_id 分数表PK enrollment_id FK stu_id,cos_id
B.插入数据code省略
C.Query
select s.stu_id,stu_name,count(cos_id) from student s,enrollments e where s.stu_id = e.stu_id and e.grade>60 group by s.stu_id,stu_name;
select e.stu_id,s.stu_name,c.cos_name from student s,enrollments e,course c
where s.stu_id = e.stu_id
and e.cos_id = c.cos_id
and c.cos_name = 'CHINESE'
and s.stu_name like 'W%';
select stu_id,stu_name from (select e.stu_id,stu_name,cos_name from enrollments e,student s,course c
where s.stu_id = e.stu_id
and e.cos_id = c.cos_id
and c.cos_name IN ('CHINESE','MUSIC'))
group by stu_id,stu_name
having count(cos_name) = 2
select distinct e.cos_id,c.cos_name,count(e.stu_id) stu_count,count(e.stu_id)-NVL(A.FAIL,0) upscore,(count(e.stu_id)-NVL(A.FAIL,0))/count(e.stu_id) rate from
(select cos_id,count(stu_id) fail from enrollments where grade<60 group by cos_id) a,enrollments e,course c
where e.cos_id = a.cos_id(+)
and e.cos_id = c.cos_id
group by e.cos_id,NVL(a.fail,0),c.cos_name;
update student
set avg_grade =(select avg(grade) X from enrollments group by stu_id
having student.stu_id = enrollments.stu_id);
select stu_id,avg(grade) from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)
group by stu_id
having count(*)<=2
UNION
select A.stu_id,avg(A.grade)from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments) A,
(select stu_id,count(*) c from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)
group by stu_id) B
where A.stu_id = B.stu_id
and A.x>1 and x<B.c
group by A.stu_id,b.c
_________________________________________________
环境:oracle 10g/TOAD 以上代码均通过测试,如有问题,请联系,谢谢
㈦ SQL测试题(注:最佳答案必须能在MySQL下运行)
/*
闲着没事,瞅瞅网络上的问题,今天天晚了,先解决一个,另一个明儿个再说了!
第二道题也算已经搞定了!
环境 : mysql Ver 14.12 Distrib 5.0.45, for Win32 (ia32)
参考 :
exist与in 的区别
http://blog.csdn.net/change888/archive/2008/03/31/2232778.aspx
*/
/*********************************问题 1 **************************************/
drop table if exists s;
create table if not exists s (s varchar(32), sn varchar(32), sd varchar(32),
sa int);
insert into s values ('s1', '朱', '开发本部', 23);
insert into s values ('s2', '牛', '人事部', 25);
insert into s values ('s3', '杨', '财务部', 26);
insert into s values ('s4', '马', '开发本部', 22);
insert into s values ('s5', '吕', '人事部', 27);
insert into s values ('s6', '于', '开发本部', 28);
insert into s values ('s7', '侯', '开发本部', 28);
drop table if exists c;
create table if not exists c (c varchar(32), cn varchar(32));
insert into c values ('c1', '软件工程');
insert into c values ('c2', '计算机技术与科学');
insert into c values ('c3', '车辆工程');
drop table if exists sc;
create table if not exists sc (s varchar(32), c varchar(32));
insert into sc values ('s1', 'c1');
insert into sc values ('s1', 'c2');
insert into sc values ('s1', 'c3');
insert into sc values ('s2', 'c1');
insert into sc values ('s2', 'c3');
insert into sc values ('s3', 'c2');
insert into sc values ('s4', 'c2');
insert into sc values ('s4', 'c3');
insert into sc values ('s5', 'c1');
insert into sc values ('s6', 'c3');
/* 1. 查询选修课程名称为 “软件工程” 的学员学号和姓名 */
select s.s '学号', s.sn '姓名' from s where s.s in
(select sc.s from sc where sc.c in
(select c.c from c where c.cn = '软件工程'));
/* 2. 查询选修课程编号为 “C2” 的学员姓名和所属单位 */
select s.sn '姓名', s.sd '所属单位' from s where s.s in
(select sc.s from sc where sc.c = 'C2');
/* 3. 查询选修课程编号 不 为 “C2” 的学员姓名和所属单位 */
select s.sn '姓名', s.sd '所属单位' from s where
s.s not in (select sc.s from sc where sc.c = 'C2')
and
s.s in (select sc.s from sc);
/* 4. 查询选修全部课程的学员姓名和所属单位 */
select s.sn '姓名', s.sd '所属单位' from s where
(select count(DISTINCT sc.c) from sc where sc.s = s.s)
=
(select count(DISTINCT c.c) from c );
/* 5. 查询选修了课程的学员人数 */
select count(DISTINCT sc.s) '人数' from sc;
/* 6. 查询选修课程 >= 2 门的学员学号和所属单位 (不得不用 CASE 语句了)*/
select s.sn '姓名', s.sd '所属单位' from s where s.s in
(select CASE WHEN count(DISTINCT sc.c) >=2 THEN sc.s END from sc group by sc.s );
/* 运行结果
------------------------------------1
+------+------+
| 学号 | 姓名 |
+------+------+
| s1 | 朱 |
| s2 | 牛 |
| s5 | 吕 |
+------+------+
------------------------------------2
+------+----------+
| 姓名 | 所属单位 |
+------+----------+
| 朱 | 开发本部 |
| 杨 | 财务部 |
| 马 | 开发本部 |
+------+----------+
------------------------------------3
+------+----------+
| 姓名 | 所属单位 |
+------+----------+
| 牛 | 人事部 |
| 吕 | 人事部 |
| 于 | 开发本部 |
+------+----------+
------------------------------------4
+------+----------+
| 姓名 | 所属单位 |
+------+----------+
| 朱 | 开发本部 |
+------+----------+
------------------------------------5
+------+
| 人数 |
+------+
| 6 |
+------+
------------------------------------6
+------+----------+
| 姓名 | 所属单位 |
+------+----------+
| 朱 | 开发本部 |
| 牛 | 人事部 |
| 马 | 开发本部 |
+------+----------+
*/
/*********************************问题 2 **************************************/
drop table if exists s ;
create table if not exists s ( sno varchar(32), sname varchar(32));
insert into s values ('s1', '朱');
insert into s values ('s2', '牛');
insert into s values ('s3', '杨');
insert into s values ('s4', '马');
insert into s values ('s5', '吕');
insert into s values ('s6', '于');
insert into s values ('s7', '侯');
drop table if exists c;
create table if not exists c ( cno varchar(32), cname varchar(32),
cteacher varchar(32));
insert into c values ('c1', '数学', '张');
insert into c values ('c2', '日语', '李'); /*假设李老师同时教授日语和英语*/
insert into c values ('c3', '英语', '李');
drop table if exists sc;
create table if not exists sc (sno varchar(32), cno varchar(32),
scgrade double);
insert into sc values ('s1', 'c1', 75);
insert into sc values ('s1', 'c2', 70);
insert into sc values ('s1', 'c3', 80);
insert into sc values ('s2', 'c1', 50);
insert into sc values ('s2', 'c3', 40);
insert into sc values ('s3', 'c1', 50);
insert into sc values ('s3', 'c2', 60);
insert into sc values ('s4', 'c1', 90);
insert into sc values ('s4', 'c2', 40);
insert into sc values ('s4', 'c3', 20);
insert into sc values ('s5', 'c1', 80);
insert into sc values ('s6', 'c1', 85);
/* 1. 没有 选 修过“李”老师讲授课程的所有学生姓名 */
select s.sname '姓名' from s where s.sno not in
(select sc.sno from sc where sc.cno in
(select c.cno from c where c.cteacher = '李'));
/* 2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩 */
select s.sname '姓名', AVG(sc.scgrade) '平均成绩' from s, sc
where s.sno = sc.sno
and
(select count(sc.sno) from sc where sc.sno = s.sno
and sc.scgrade < 60 ) >= 2
group by s.sno;
/* 3. 列出既学过“C1”号课程,又学过“C2”号课程的所有学生姓名 */
select s.sname '姓名' from s where s.sno in
(select t1.sno from sc t1, sc t2
where t1.sno = t2.sno and t1.cno = 'c1' and t2.cno = 'c2');
/*或者*/
select s.sname '姓名' from s where s.sno in
(select sc.sno from sc where sc.cno = 'c1' and sc.sno in
(select t1.sno from sc t1 where t1.cno = 'c2'));
/* 4. 列出“C1”号课成绩比“C2”号同学该门课成绩高的所有学生的学号 */
select t1.sno '学号' from sc t1, sc t2
where t1.sno = t2.sno and t1.cno = 'c1'
and t2.cno = 'c2' and t1.scgrade > t2.scgrade;
/* 5. 列出“C1”成绩比“C2”成绩高的学生的学号及其“C1”和“C2”的成绩 */
select t1.sno '学号', t1.scgrade 'C1成绩', t2.scgrade 'C2成绩' from sc t1, sc t2
where t1.sno = t2.sno and t1.cno = 'c1'
and t2.cno = 'c2' and t1.scgrade > t2.scgrade;
/* 运行结果
------------------------------------1
+------+
| 姓名 |
+------+
| 吕 |
| 于 |
| 侯 |
+------+
------------------------------------2
+------+----------+
| 姓名 | 平均成绩 |
+------+----------+
| 牛 | 45 |
| 马 | 50 |
+------+----------+
------------------------------------3
+------+
| 姓名 |
+------+
| 朱 |
| 杨 |
| 马 |
+------+
------------------------------------4
+------+
| 学号 |
+------+
| s1 |
| s4 |
+------+
------------------------------------5
+------+--------+--------+
| 学号 | C1成绩 | C2成绩 |
+------+--------+--------+
| s1 | 75 | 70 |
| s4 | 90 | 40 |
+------+--------+--------+
*/
㈧ 面试题目(sql)
1、忍不住想说一句,因为第一题中的字段类型是
【日期型】,而各种数据库操作日期型数据有不同的方法,没有一种共通的方法,所以脱离了数据库而言没有一种共通的sql。
2、select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
T
where
ID
in(
select
ID
from
T
group
by
NAME
having
count(*)>1)
order
by
NAME;
3、delete
from
T
where
ID
not
in
(select
min(id)
from
T
group
by
name);
4、update
T
set
T.ADDRESS=(select
E.ADDRESS
from
E
where
E.NAME=T.NAME),
T.PHONE=(select
E.PHONE
from
E
where
E.NAME=T.NAME);
5、这个不同的数据库也有不同的处理方法,不能脱离数据库谈了。
如:SqlServer或者access可以使用
top
oracle可以使用
rownum
等
---
以上,希望对你有所帮助。
㈨ sql面试题,请大神解答,急!!!
第一题,最高的10-20。
1234select*from(selectcolD,colE,dense_rank()over(orderbycolGdesc)asrkfromtableb)whererkbetween10and20--当然面试的话这里可以注明dense_rank和rank区别等等。
第二题,2楼写的就可以了
第三题,注意题目是人数之和
12345selectcount(*)ascntfromtableBwherecolAin(=传入idconnectbypriorcolA=colB)
第四题
--测试数据
withtableAas(select1ascolA,0ascolB,'北京',0ascolB,'上海'fromal),tableBas(select1ascolD,'人员1'ascolE,1ascolA,2000ascolG,0ascolHfromalunionallselect2,'人员2',1,2000,0fromalunionallselect3,'人员3',1,2000,0fromalunionallselect4,'人员4',1,2000,0fromalunionallselect5,'人员5',1,2000,1fromalunionallselect6,'人员6',2,2000,1fromalunionallselect7,'人员7',1,2000,1fromal)--查询sqlselectdecode(t.colH,0,'女','男')asgender,max(decode(t.colC,'北京',t.cnt,0))as北京,max(decode(t.colC,'上海',t.cnt,0))as上海from(selecta.colC,b.colH,count(*).colA=b.colAgroupbycolC,colH)tgroupbyt.colH
这里可以解释下本sql的思路:--首先查出每个地区不同性别的人数,在行转列(由于题目很明显告诉你固定数据)
㈩ SQL 查询语句期中考试题2
--1.分别查询学生表和学生修课表中的全部数据。
SELECT * FROM student--查询学生表
SELECT * FROM course--查询课程表
--2.查询成绩在70到80分之间的学生的学号、课程号和成绩。
SELECT Sno 学号,Cno 课程号,Grade 成绩
FROM SC
WHERE Grade BETWEEN 70 AND 80
--3.查询C01号课程成绩最高的分数
SELECT TOP 1 Grade
FROM SC
WHERE Cno='C01'
ORDER BY Grade DESC--降序DESC,升序ASC
--4.查询学生都选修了哪些课程,要求列出课程号。
SELECT Cname AS 学生选修的课程,Cno AS 课程号
FROM course
WHERE Cno IN(SELECT DISTINCT Cno FROM SC)--DISTINCT用来去除重复
--5.查询Northwind数据库中orders表的OrderID、CustomerID和OrderDate,
--并将最新的定购日期(OrderDate)列在前边。
USE Northwind
GO
SELECT OrderID,CustomerID,OrderDate
FROM orders
ORDER BY OrderDate DESC--降序DESC,升序ASC
--6.查询Northwind数据库中orders表的ShipCountry列以B,C,D,F --//ShipCountry BCDF
--开始且第三个字符为"a"的OrderID、CustomerID和ShipCountry的信息。//OrderID、CustomerID第三个字符为"a"
USE Northwind
GO
SELECT OrderID,CustomerID,ShipCountry FROM orders
WHERE ShipCountry LIKE '[BCDF]_a%'--_下划线表示任意一个字符,%表示一个或多个字符
--7.查询Northwind数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最后一个字
--母是"a"的OrderID、CustomerID和ShipCountry的信息。
USE Northwind
GO
SELECT OrderID,CustomerID,ShipCountry
FROM orders
WHERE ShipCountry LIKE '[^ABCDEF]%a'
--8.查询修了C02号课程的所有学生的平均成绩、最高成绩和最低成绩。
SELECT AVG(Grade) 平均成绩,MAX(Grade) 最高成绩,MIN(Grade) 最低成绩
FROM SC
WHERE Cno='C02'
--9.统计每个系的学生人数。
SELECT Sdept 系别,COUNT(*) 人数
FROM student
WHERE Sdept IN(SELECT DISTINCT Sdept FROM student)
GROUP BY Sdept
--10.统计每门课程的修课人数和考试最高分。
SELECT Cname 课程名,COUNT(*) 修课人数,MAX(Grade) 考试最高分
FROM SC,course
WHERE SC.Cno IN(SELECT DISTINCT Cno FROM SC ) AND course.Cno=SC.Cno
GROUP BY course.Cname
--11.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。
SELECT student.Sname 学生姓名,student.Sno 学生学号,COUNT(SC.Sno) 选课门数
FROM student
inner join SC ON SC.Sno=student.Sno
GROUP BY student.Sname,student.Sno
ORDER BY COUNT(SC.Sno) ASC
--12.统计选修课的学生总数和考试的平均成绩。
SELECT COUNT(DISTINCT(Sno)) AS 学生总数,AVG(Grade) AS 平均成绩
FROM SC --//用DISTINCT消除重复的行
--13.查询选课门数超过2门的学生的平均成绩和选课门数。
SELECT Student.Sname,AVG(Sc.Grade) 平均成绩,COUNT(SC.Sno) 选课门数
FROM SC
--内联接join或inner join,内联系是比较运算符,只返回符合条件的行
JOIN Student ON (SC.Sno = Student.Sno)
JOIN Course ON (SC.Cno = Course.Cno)
GROUP BY Student.Sname
HAVING COUNT(distinct Course.Cno) >2--分组条件
--14.列出总成绩超过200分的学生,要求列出学号、总成绩。
SELECT Sno 学号,SUM(Grade) 总成绩
FROM SC
GROUP BY Sno
HAVING SUM(Grade)>200
--15.查询pubs数据库的titles表中每类图书的平均价格超过12.0元的书的类型(Type)、
--平均价格和最高价格。
USE pubs
GO
SELECT Type AS 书的类型,AVG(price) AS 平均价格,MAX(price) AS 最高价格
FROM titles
GROUP BY Type
HAVING AVG(price)>12.0
--16.查询pubs数据库的titles表中每类图书中图书的数目超过3本的图书的总价格。
USE pubs
GO
SELECT 图书类型=Type,图书的数目=count(Type),图书的总价格=SUM(price)
FROM titles
GROUP BY Type
HAVING count(Type)>3
--17.查询选修了c02号课程的学生的姓名和所在系。
SELECT Sname 学生姓名,Sdept 所在系,SC.Cno AS 选修课程
FROM student
inner join SC ON student.Sno=SC.Sno
WHERE SC.Cno='C02'
--18.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。
SELECT Sname 学生姓名,SC.Cno 课程号,SC.Grade 成绩
FROM student
inner join SC ON student.Sno=SC.Sno--内连接表SC查询
WHERE SC.Grade>80
ORDER BY SC.Grade DESC
--19.查询计算机系男生修了"数据库基础"的学生的姓名、性别、成绩。
SELECT Sname 姓名,Ssex 性别,SC.Grade 成绩
FROM student
inner join SC ON Cno IN(SELECT Cno FROM course WHERE Cname='数据库基础') --显示成绩的条件
AND student.Sno=SC.Sno --显示成绩的学生的学号
WHERE Sdept='计算机系' AND Ssex='男'
--20.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。
--这题使用到了表的自连接,所以需要给表取两个别名,如A和B
SELECT A.Sname 年龄相同的学生的姓名,A.Sage 年龄
FROM student A
inner join student B ON A.Sage IN(SELECT Sage FROM student WHERE A.Sage=B.Sage AND A.Sname!=B.Sname)
GROUP BY A.Sname,A.Sage
ORDER BY A.Sage
--21.查询哪些课程没有人选,要求列出课程号和课程名。
SELECT Cno AS 课程号,Cname AS 课程名
FROM course
WHERE Cno NOT IN(SELECT DISTINCT SC.Cno FROM SC)
--22.查询有考试成绩的所有学生的姓名、修课名称及考试成绩
--要求将查询结果放在一张新的永久表(假设新表名为new-sc)中。
SELECT student.Sname AS 有考试成绩的学生的姓名,course.Cname AS 修课名称,SC.Grade AS 考试成绩
INTO [new_sc] --将查询结果放入新表new_sc中
FROM student,course,SC
WHERE SC.Grade IS NOT NULL AND student.Sno=SC.Sno AND course.Cno=SC.Cno
--23.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩,
--并要求将这两个查询结果合并成一个结果集,
--并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。
--//此题用到了并union查询
SELECT Sdept 系名,Sname 姓名,Ssex 性别,course.Cname 修课名称,SC.Grade 修课成绩
FROM student
inner join SC ON student.Sno=SC.Sno
inner join course ON course.Cno=SC.Cno
WHERE Sdept='信息系'
UNION
SELECT Sdept 系名,Sname 姓名,Ssex 性别,course.Cname 修课名称,SC.Grade 修课成绩
FROM student
inner join SC ON student.Sno=SC.Sno
inner join course ON course.Cno=SC.Cno
WHERE Sdept='计算机系'
或
select sdept, sname,ssex,cname,grade from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and (sdept='信息系' or sdept='计算机系')
--24.用子查询实现如下查询:
--(1) 查询选修了C01号课程的学生的姓名和所在系。
SELECT Sname AS 选修了C01号课程的学生的姓名,Sdept AS 所在系
FROM student
WHERE Sno IN(SELECT Sno FROM SC WHERE Cno='C01')
--(2) 查询数学系成绩80分以上的学生的学号、姓名。
SELECT Sno AS 数学系成绩80分以上的学生的学号,Sname AS 姓名
FROM student
WHERE Sno IN(SELECT Sno FROM SC WHERE Grade>80)
AND Sno IN(SELECT Sno FROM student WHERE Sdept='数学系')
--(3) 查询计算机系学生所选的课程名.
SELECT Cname AS 计算机系学生所选的课程名
FROM course
WHERE
course.Cno IN(SELECT DISTINCT Cno FROM SC WHERE SC.Sno IN(SELECT Sno FROM student WHERE Sdept='计算机系'))
--25.将计算机系成绩高于80分的学生的修课情况插入到另一张表中,分两种情况实现://////////////?????/
--(1) 在插入数据过程中建表。
--使用SELECT INTO插入数据的方法,是在插入数据的过程中建立新表
SELECT student.Sname AS 学生名字,course.Cname AS 选修课程,SC.Cno AS 课程编号
INTO [SC_Info1]--将计算机系成绩高于80分的学生的修课情况插入到表SC_Info1中
FROM student,course,SC
WHERE student.Sdept='计算机系' AND SC.Grade>80 AND course.Cno=SC.Cno AND student.Sno=SC.Sno
--(2) 先建一个新表,然后再插入数据。
--创建表SC_Info2
CREATE TABLE SC_Info2
(
Sname char(7),
Cname char(20),
Cno char(10)
)
--往表SC_info2插入查询得到的结果
INSERT SC_Info2
SELECT student.Sname AS 学生名字,course.Cname AS 选修课程,SC.Cno AS 课程编号
FROM student,course,SC
WHERE student.Sdept='计算机系' AND SC.Grade>80 AND course.Cno=SC.Cno AND student.Sno=SC.Sno
--26.删除修课成绩小于50分的学生的修课记录
DELETE SC WHERE Grade<50 OR Grade IS NULL
--27.将所有选修了"c01"课程的学生的成绩加10分。
UPDATE SC
SET Grade=Grade+10
WHERE Cno='C01'