MySQL练习_2

@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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值