@BCKou
一、单选题
1.SELECT语句的完整语法较复杂,但至少包括的部分是( B )
A.仅SELECT
B.SELECT,FROM
C.SELECT,GROUP
D.SELECT,INTO
2.SQL语句中的条件用以下哪一项来表达( C )
A.THEN
B.WHILE
C.WHERE
D.IF
3.以下能够删除一列的是( B )
A.alter table emp remove addcolumn
B.alter table emp drop column addcolumn
C.alter table emp delete column addcolumn
D.alter table emp delete addcolumn
4.若要撤销数据库中已经存在的表S,可用(D )。
A.DELETE TABLE S
B.DELETE S
C.DROP S
D.DROP TABLE S
5.在视图上不能完成的操作是( D )
A.查询
B.在视图上定义新的视图
C.更新视图
D.在视图上定义新的表
6.UNIQUE惟一索引的作用是( A )
A.保证各行在该索引上的值都不得重复
B.保证各行在该索引上的值不得为NULL
C.保证参加惟一索引的各列,不得再参加其他的索引
D.保证惟一索引不能被删除
7.用于将事务处理写到数据库的命令是( C )
A.insert
B.rollback
C.commit
D.savepoint
8.查找条件为:姓名不是NULL的记录( C )
A.WHERE NAME ! NULL
B.WHERE NAME NOT NULL
C.WHERE NAME IS NOT NULL
D.WHERE NAME!=NULL
9.在SQL语言中,子查询是( D) 。
A.选取单表中字段子集的查询语句
B. 选取多表中字段子集的查询语句
C.返回单表中数据子集的查询语言
D.嵌入到另一个查询语句之中的查询语句
10.向数据表中插入一条记录用以下哪一项( B )
A.CREATE
B.INSERT
C.SAVE
D.UPDATE
11.SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是( B )。
A.UPDATE
B.SELECT
C.DELETE
D.INSERT
12. 以下哪种操作能够实现实体完整性( B )
A.设置唯一键
B.设置外键
C.减少数据冗余
D.设置主键
13.SQL语言中,删除一个视图的命令是( D )
A.REMOVE
B.CLEAR
C.DELETE
D.DROP
14.修改数据库表结构用以下哪一项( D )
A.UPDATE
B.CREATE
C.UPDATED
D.ALTER
15.以下语句正确的是( C )
A.select sal+1 from emp;
B.select sal10,saldeptno from emp;
C.不能使用运算符号
D.select sal10,deptno10 from emp;
16.下列( C )不属于连接种类
A.左外连接
B.内连接
C.中间连接
D.交叉连接
17.若用如下的SQL语句创建了一个表SC:( B )
CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插入如下行时,( )行可以被插入 。
A.(NULL,’103’,80,’选修’)
B.(’200823’,’101’,NULL,NULL)
C.(’201132’,NULL,86,’ ’)
D.(’201009’,’111’,60,必修)
18.删除用户账号命令是( A )
A.DROP USER
B.DROP TABLE USER
C.DELETE USER
D.DELETE FROM USER
19.以下语句错误的是( A )
A. alter table emp delete column addcolumn;
B. alter table emp modify column addcolumn char(10);
C.alter table emp change addcolumn addcolumn int;
D. alter table emp add column addcolumn int;
20.创建数据库使用以下哪项( D )
A.create mytest
B.create table mytest
C.database mytest
D.create database mytest
21.以下哪项用来分组( C )
A.ORDER BY
B.ORDERED BY
C.GROUP BY
D.GROUPED BY
22.SQL是一种( C )语言。
A.函数型
B.高级算法
C.关系数据库
D.人工智能
23.删除数据表用以下哪一项( A )
A.DROP
B.UPDATE
C.DELETE
D.DELETED
24.若要在基本表S中增加一列CN(课程名),可用( B )
A.ADD TABLE S ALTER(CN CHAR(8))
B.ALTER TABLE S ADD(CN CHAR(8))
C.ADD TABLE S(CN CHAR(8))
D.ALTER TABLE S (ADD CN CHAR(8))
25.下列的SQL语句中,( B )不是数据定义语句。
A.CREATE TABLE
B.GRANT
C.CREATE VIEW
D.DROP VIEW
26.以下删除记录正确的( A )
A.delete from emp where name=‘dony’;
B.Delete * from emp where name=‘dony’;
C.Drop from emp where name=‘dony’;
D.Drop * from emp where name=‘dony’;
27.删除经销商1018的数据记录的代码为( D ) from distributors where distri_num=1018
A.drop table
B.delete *
C.drop column
D.delete
28.按照姓名降序排列( B )
A.ORDER BY DESC NAME
B.ORDER BY NAME DESC
C.ORDER BY NAME ASC
D.ORDER BY ASC NAME
29.数据库服务器、数据库和表的关系,正确的说法是( B )
A.一个数据库服务器只能管理一个数据库,一个数据库只能包含一个表
B.一个数据库服务器可以管理多个数据库,一个数据库可以包含多个表
C.一个数据库服务器只能管理一个数据库,一个数据库可以包含多个表
D.一个数据库服务器可以管理多个数据库,一个数据库只能包含一个表
30.有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是( D)。
A.SAGE>=20 and CNAME=’ ACCESS’
B.S.S# = SC.S# and C.C# = SC.C# and SAGE in>=20 and CNAME in ‘ACCESS’
C.SAGE in>=20 and CNAME in ‘ACCESS’
D.S.S# = SC.S# and C.C# = SC.C# and SAGE>=20 and CNAME=‘ACCESS’
二、语句编写题
以emp,dept,salgrade为基准
内连接是指用于将多个表连为一张表,外连接是用来进行多表的查询,不需要必须连为一张表
1.返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资
select e.ename,d.loc,s.losal,s.hisal
from emp e
join dept d
on e.deptno = d.deptno
join salgrade s
on s.grade=2 and e.sal between s.losal and s.hisal;
2.工资等级多于smith的员工信息。
select *
from emp
where sal>(select s.hisal
from emp e
join salgrade s
on e.ename = 'smith' and e.sal between s.losal and s.hisal);
3.返回部门号、部门名、部门所在位置及其每个部门的员工总数。
select *
from dept d left join (select deptno, count(*) as 部门人数
from emp
group by deptno) t
on d.deptno = t.deptno;
4.返回工资高于30部门所有员工工资水平的员工信息。
select *
from emp
where sal > all(select sal
from emp
where deptno = 30);
5.返回工资水平多于平均工资的员工。
select * from emp where sal >(select avg(sal) from emp);
三、综合编程题(每题4分,共计20分)
1.学生表
Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别
2.课程表
Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号
3.教师表
Teacher(t_id,t_name) –教师编号,教师姓名
4.成绩表
Score(s_id,c_id,s_score) –学生编号,课程编号,分数
1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数
select s.*, sc1.s_score, sc2.s_score
from Student s left join Score sc1
on s.s_id = sc1.s_id and sc1.c_id = '01'
left join Score sc2
on s.s_id = sc2.s_id and sc2.c_id = '02'
where sc1.s_score>sc2.s_score;
\2. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select s.s_id, s.s_name, t.count_c, t.sum_s
from Student s left join (select s_id, count(c_id) as count_c, sum(ifnull(score,0)) as sum_s
from Score
group by s_id) t
on(s.s_id = t.s_id);
SELECT
student.s_id,student.s_name,COUNT(score.c_id),IF(SUM(score.`s_score`) IS NULL,0,SUM(score.`s_score`))
FROM student LEFT JOIN score ON student.`s_id` = score.`s_id` GROUP BY student.s_id
3.查询学过"张三"老师授课的同学的信息
select s.*
from Student s left join Score sc
on(s.s_id = sc.s_id)
left on Course c
on(c.c_id = s.c_id)
where c.t_id = (select t_id
from Teacher
where t_name = '张三');
## 查询"张三"老师所授课程的学生中,成绩最高的学生信息,课程信息及成绩
SELECT * FROM student JOIN score ON student.`s_id`=score.`s_id` JOIN course ON score.`c_id` = course.`c_id`
WHERE (score.`c_id`,score.`s_score`) IN (
SELECT c_id,MAX(s_score) AS s_score FROM score WHERE c_id IN (
SELECT c_id FROM course WHERE t_id = (SELECT t_id FROM teacher WHERE t_name= "张三")
) GROUP BY c_id
)
\4. 查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息
select s.*
from Student s left join Score sc1
on s.s_id = sc1.s_id and sc1.c_id = '01'
where s.s_id not in (select s_id
from Student s left join Score sc2
on s.s_id = sc2.s_id and sc2.c_id = '02');
\5. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
select s.s_name,c.c_name,sc.s_score,t.avg_score
from Score sc inner join (select s_id,avg(ifunll(s_score,0) as avg_score)
from Score
group by s_id
order by avg(ifunll(s_score,0)) desc) t
on(sc.s_id = t.s_id)
join Course c
on(c.c_id = sc.c_id)
right join Student s
on(s.s_id = sc.s_id);
SELECT
st.*,
GROUP_CONCAT(c.c_name) 课程,
GROUP_CONCAT(sc.s_score) 分数,
AVG(sc.s_score) 平均分
FROM student st
LEFT JOIN score sc
on st.s_id=sc.s_id JOIN course c
ON sc.c_id=c.c_id
GROUP BY sc.s_id ORDER BY AVG(sc.s_score) DESC;
– 17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩(重重点与35一样)
–再加INNER JOIN 是因为用了GROUP BY 语句不能再SELECT 里出现未有的信息,如c_id
SELECT * FROM
score as bc_id
INNER JOIN
(SELECT s_id,AVG(s_score) '平均成绩' FROM score
GROUP BY s_id)as a on a.s_id=b.s_id
ORDER BY a.平均成绩 DESC