一、选择题
1、查找表结构用以下哪一项( )
A.FIND B.SELETE C.ALTER D.DESC
答案:B
2、在视图上不能完成的操作是( ) A.查询 B.在视图上定义新的视图 C.更新视 图 D.在视图上定义新的表
答案:B
3、用于将事务处理写到数据库的命令是( ) A.insert B.rollback C.commit
D.savepoint
答案:C
4、查找条件为:姓名不是NULL的记录( ) A.WHERE NAME ! NULL B.WHERE NAME NOT NULL C.WHERE NAME IS NOT NULL D.WHERE NAME!=NULL
答案:C
5、在SQL语言中,子查询是()。 A.选取单表中字段子集的查询语句 B.选取多表中字段子集的查询语句 C.返回单表中数据子集的查询语言 D.嵌入到另一个查询语句之中的查询语句
答案:D
6、SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是( )。 A.UPDATE B.SELECT C.DELETE D.INSERT
答案:B
7、以下哪种操作能够实现实体完整性( ) A.设置唯一键 B.设置外键 C.减少数据冗余 D.设置主键
答案:D
二、填空题
1、视图是一个需表,它是由( 实表 )中导出来的表。在数据库中只存放视图的( 实表 )。
不存放视图的( 虚表 )。
2、对并发操作,若不加以控制,可能带来数据的( 不一致 )问题
三、简答题
1、什么是触发器?严格的说触发器有哪几种?触发器有什么优点?
触发器主要用于监视某个表的insert、update以及delete等更新操作,这些操作可以分别激活该表的insert、update或者delete类型的触发程序运行,从而实现数据的自动维护。
使用触发器有如下优点:
- 自动执行。触发器在对表的数据作了任何修改(比如手工输入或者应用程序的操作)之后立即被激活。
- 级联更新。触发器可以通过数据库中的相关表进行层叠更改,这比直接把代码写在前台的做法更安全合理。
- 强化约束。触发器可以引用其它表中的列,能够实现比CHECK约束更为复杂的约束。
- 跟踪变化。触发器可以阻止数据库中未经许可的指定更新和变化。
-
强制业务逻辑。触发器可用于执行管理任务,并强制影响数据库的复杂业务规则。
2、存储过程有什么优点?
存储过程或者函数可以重复使用,可以减少数据库开发人员,尤其是应用程序开发人员的工作量。
使用存储过程或者函数可以增强数据的安全访问控制。可以设定只有某些数据库用户才具有某些存储过程或者函数的执行权。
3、事务的提交和回滚是什么意思?
事务的提交:当确定数据更改加工完毕,需要进行存储时,此时,将数据传递出去,称为提交;
事务的回滚:当数据加工过程中出现错误,把数据和状态恢复到加工之前,这称之为回滚。
四、设计题
1、下图这张表 表名为student
(1)创建学生表,并在建表的时候指定主键、指定引擎为Innodb、指定字符集为utf8
CREATE TABLE student1(
id INT auto_increment PRIMARY KEY,
name VARCHAR(10) NOT NULL,
kemu VARCHAR(4) NOT NULL,
chengji INT NOT NULL)ENGINE = INNODB charset = utf8;
(2)插入如图的数据
INSERT INTO student1(name,kemu,chengji) VALUES(‘张三’,’数学’,90);
INSERT INTO student1(name,kemu,chengji) VALUES(‘张三’,’语文’,50);
INSERT INTO student1(name,kemu,chengji) VALUES(‘张三’,’地理’,40);
INSERT INTO student1(name,kemu,chengji) VALUES(‘李四’,’语文’,55);
INSERT INTO student1(name,kemu,chengji) VALUES(‘李四’,’政治’,45);
INSERT INTO student1(name,kemu,chengji) VALUES(‘王五’,’政治’,30);
INSERT INTO student1(name,kemu,chengji) VALUES(‘赵六’,’语文’,50);
INSERT INTO student1(name,kemu,chengji) VALUES(‘赵六’,’数学’,50);
INSERT INTO student1(name,kemu,chengji) VALUES(‘赵六’,’英语’,20);
INSERT INTO student1(name,kemu,chengji) VALUES(‘田七’,’数学’,100);
INSERT INTO student1(name,kemu,chengji) VALUES(‘田七’,’政治’,50);
INSERT INTO student1(name,kemu,chengji) VALUES(‘田七’,’英语’,60);
(3)查询两门及两门以上不及格的学生的平均分。比如:张三有两门功课不及格,
语文 50 分,地理 40分, 他的平均分为:(90+50+40)/3 = 60。
一条语句实现查询
SELECT name,AVG(chengji) FROM student1 GROUP BY name HAVING SUM(chengji < 60) >= 2;
2、下图这张表,表名为t_book
(1)取出价格里面的最大值
SELECT MAX(price) FROM t_book;
(2)取出价格里面最大的前三个值
SELECT price FROM t_book ORDER BY price DESC LIMIT 3;
3、建如下两张表
create table dept
(
deptno int(11) primary key,
dname varchar(10)
);
create table emp
(
empno int(11) primary key,
ename varchar(10),
job varchar(10),
mgr varchar(10),
sal varchar(10),
deptno int(11),
foreign key(deptno) references dept(deptno)
);
插入如下数据
insert into dept values (1,’事业部’);
insert into dept values (2,’销售部’);
insert into dept values (3,’技术部’);
insert into emp values (1,’jacky’,’clerk’,’tom’,1000,1);
insert into emp values (2,’tom’,’clerk’,”,2000,1);
insert into emp values (7,’biddy’,’clerk’,”,2000,1);
insert into emp values (3,’jenny’,’sales’,’pretty’,600,2);
insert into emp values (4,’pretty’,’sales’,”,800,2);
insert into emp values (5,’buddy’,’jishu’,’canndy’,1000,3);
insert into emp values (6,’canndy’,’jishu’,”,1500,3);
请回答:
(1)列出emp表中各部门的部门号,最高工资,最低工资
SELECT MAX(sal),MIN(sal) FROM emp;
SELECT empno FROM emp;
(2)列出emp表中各部门job为’CLERK’的员工的最低工资,最高工资
SELECT MAX(sal),MIN(sal) FROM emp WHERE job = ‘clerk’;
(3)对于emp中最低工资小于2000的部门,列出job为’CLERK’的员工的部门号,最低工资,最高工资
SELECT empno,MAX(sal),MIN(sal) FROM emp WHERE job = ‘clerk’ AND sal < 2000;
(4)根据部门号由高而低,工资由低而高列出每个员工的姓名,部门号,工资
SELECT ename,empno,sal FROM emp ORDER BY empno DESC;
SELECT ename,empno,sal FROM emp ORDER BY sal;
(5)对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序
SELECT empno,ename,sal FROM emp WHERE
sal >= (SELECT AVG(sal) FROM emp) ORDER BY empno;
五、应用题
1、如下图一表名为kecheng。图二表名为chengji
图一:
图二:
其中 成绩表中的sid为chengji表的外键,课程表的主键。请回答如下问题:
(1)通过课程的id删除课程时,成绩表中自然没有删除课程的成绩,应用触发器进行删除。(提示:要用到关键字,随便删除一门课程)
CREATE TRIGGER teatri BEFORE DELETE ON tea
FOR EACH ROW
BEGIN
DELETE FROM stu WHERE stu.tid = old.tid;
END
DELETE FROM tea WHERE tid = 2;
2、用MySQL中的函数求1+2+3+……+100的和;
delimiter &
CREATE FUNCTION sum1()
RETURNS INT
BEGIN
DECLARE a INT DEFAULT 0;
DECLARE s INT DEFAULT 0;
WHILE (a < 100) DO
SET a = a+1;
SET s = s+a;
END WHILE;
RETURN s;
END
&
delimiter ;
SELECT sum1();
10的阶乘:
10!:
delimiter &
CREATE FUNCTION sum2()
RETURNS INT
BEGIN
DECLARE a INT DEFAULT 1;
DECLARE s INT DEFAULT 1;
WHILE (a < 10) DO
SET a = a+1;
SET s = s*a;
END WHILE;
RETURN s;
END
&
delimiter ;
SELECT sum2();