当前位置:   article > 正文

头歌实践教学平台数据库原理与应用实训答案_头歌实践教学平台答案

头歌实践教学平台答案

目录

实训一:数据定义和操纵(4课时)

初识MySQL数据库

第1关:创建数据库

 第2关:创建表

 第3关:使用主键约束

第4关:外键约束

第5关:添加常用约束

DDL语言的使用

第1关:创建数据库

 第2关: 创建表

 第3关:添加字段

 第4关:删除字段

 第5关:修改字段

 第6关:添加唯一性约束

DML语言的使用

第1关:insert...into方式插入数据

第2关:更新数据

第3关:更新数据-练习

第4关:删除数据

 第5关:创建表-练习

 第6关:删除数据-练习1

第7关:删除数据-练习2

MySQL数据库 - 数据更新

第1关:插入数据

 第2关:更新数据

 第3关:删除数据

 MySQL数据库 - 数据库和表的基本操作(一)

第1关:查看表结构与修改表名

 第2关:修改字段名与字段数据类型

 第3关:添加与删除字段

第4关:修改字段的排列位置

 第5关:删除表的外键约束

实训二:单表查询(4课时)

单表查询(一)student表查询

第1关:选择列查询

 第2关:去除重复结果

第3关:范围查询

 第4关:带IN关键字的查询

 第5关:匹配查询

 第6关:范围查询-练习

 第7关:where子句查询

单表查询(二)基本查询

第1关:基本查询语句

 第2关:带 IN 关键字的查询

第3关:带 BETWEEN AND 的范围查询

 单表查询(三)聚集函数

第1关:COUNT( )函数

 第2关:COUNT( )函数-练习

第3关:AVG( )函数、MAX函数和MIN函数

 第4关:分组查询

 第5关:倒序排列

单表查询(四)-分组操作符与聚集函数 

第1关:数据统计(初级)

第2关:数据统计初级应用

 第3关:数据统计综合应用

 单表查询(五)排序和分组

第1关:对查询结果进行排序

第2关:分组查询

第3关:使用 LIMIT 限制查询结果的数量

 单表查询(六)综合查询

第1关:基本查询语句

第2关:带 IN 关键字的查询

第3关:带 BETWEEN AND 的范围查询

 第4关:带 LIKE 的字符匹配查询

第5关:查询空值与去除重复结果实训三:多表查询(4课时)

 第6关:带 AND 与 OR 的多条件查询

 第7关:对查询结果进行排序

 第8关:分组查询

 第9关:使用 LIMIT 限制查询结果的数量

实训三:多表查询(4课时)

多表查询-子查询(一)

第1关:子查询

第2关:子查询-练习

 第3关:子查询-练习一

第4关:子查询-练习二

 第5关:子查询-练习三

 第6关:子查询-练习四

 多表查询 - 子查询(二)

第1关:带比较运算符的子查询

 第2关:关键字子查询

多表查询-连接查询(一)

第1关:自然连接

第2关:等值连接

第3关:JOIN连接

第4关:自身连接查询

第5关:外部连接查询

多表查询- 连接查询(二)

第1关:内连接查询

第2关:外连接查询

第3关:复合条件连接查询

大学数据库创建与查询实战

第1关:数据库表设计

第2关:查询(一)

第3关:查询(二)

第4关:查询(三)

第5关:查询(四)

第6关:查询(五)

实训四:索引与视图(2课时)

MySQL开发技巧 - 索引第1关:索引

 MySQL开发技巧 - 视图

第1关:视图

 索引(teachingdb数据库)

第1关:索引

 第2关:删除索引-练习

 SQL视图(teachingdb数据库)

第1关:创建视图

第2关:创建视图-练习一

MySQL-索引和视图

第1关:建立索引

 第2关:建立视图并更新视图

第3关:建立基于多表的视图 

实训五:数据库安全控制(2课时)

创建用户

第1关:创建用户

 第2关:创建用户-练习!!!

授权及回收权限

第1关:授权

 第2关:授权-练习一

第3关:授权-练习二

第4关:授权-练习三

 第5关:回收权限

MySQL-安全性控制

第1关:用户和权限

第2关:用户、角色与权限

MySQL数据库 - 授权与撤销授权

第1关:数据库授权

第2关:数据库撤销权限

实训六:数据完整性

实训七:存储过程与触发器(4课时)

存储过程、函数与触发器

第1关:创建存储过程

第2关:创建函数-count_credit

第3关:存储过程-调用函数count_credit

第4关:创建触发器-计算总学分!!!

第5关:创建触发器-练习级联删除操作

存储过程

第1关:建立和调用存储过程(不带输出参数的存储过程)

第2关:建立和调用存储过程(带输出参数)

第3关:建立和调用存储函数

第4关:修改多个数据表的存储过程

第5关:使用游标的存储过程


实训一:数据定义和操纵(4课时)

初识MySQL数据库

第1关:创建数据库

  1. mysql -uroot -p123123 -h127.0.0.1
  2. create database MyDb;
  3. show databases;

 第2关:创建表

  1. mysql -uroot -p123123 -h127.0.0.1
  2. create database TestDb;
  3. create table t_emp( id int, name varchar(32), deptId int , salary float);

 第3关:使用主键约束

  1. mysql -uroot -p123123 -h127.0.0.1
  2. create database MyDb;
  3. use MyDb;
  4. create table t_user1(
  5. userId INT PRIMARY KEY,
  6. name VARCHAR(32),
  7. password VARCHAR(11),
  8. phone VARCHAR(11),
  9. email VARCHAR(32));
  10. create table t_user2(
  11. name VARCHAR(32),
  12. phone VARCHAR(11),
  13. email VARCHAR(32),
  14. PRIMARY KEY(name,phone));

第4关:外键约束

  1. mysql -uroot -p123123 -h127.0.0.1
  2. create database MyDb;
  3. use MyDb;
  4. CREATE TABLE t_class
  5. (
  6. id INT PRIMARY KEY,
  7. name VARCHAR(22)
  8. );
  9. CREATE TABLE t_student
  10. (
  11. id INT PRIMARY KEY,
  12. name VARCHAR(22) ,
  13. classId int,
  14. CONSTRAINT fk_stu_class1 FOREIGN KEY(classId) REFERENCES t_class(id)
  15. );

第5关:添加常用约束

  1. mysql -uroot -p123123 -h127.0.0.1
  2. CREATE DATABASE MyDb;
  3. USE MyDb;
  4. CREATE TABLE t_user
  5. (
  6. id INT PRIMARY KEY AUTO_INCREMENT,
  7. username VARCHAR(32) NOT NULL UNIQUE,
  8. sex VARCHAR(4) DEFAULT '男'
  9. )DEFAULT CHARSET=utf8;

DDL语言的使用

第1关:创建数据库

  create database teachingdb;

 第2关: 创建表

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. create table student(
  5. sno char(5) primary key,
  6. sname varchar(20) NOT null,
  7. sdept varchar(20) not null,
  8. sclass char(2) not null,
  9. ssex char(1),
  10. birthday date,
  11. totalcredit decimal(4,1)
  12. );
  13. /**********End**********/

 第3关:添加字段

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. alter table student add nativeplace varchar(20);
  5. -- alter table student add nativeplace varchar(20);
  6. /**********End**********/

 第4关:删除字段

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. ALTER TABLE student DROP nativeplace;
  5. /**********End**********/

 第5关:修改字段

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. ALTER TABLE student MODIFY ssex varchar(3);
  5. /**********End**********/

 第6关:添加唯一性约束

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. alter table course add constraint uk_cno unique(cname);
  5. /**********End**********/


DML语言的使用

第1关:insert...into方式插入数据

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. INSERT INTO student VALUES (11111,'马明','计算机','01','女','2000-01-02',null);
  5. /**********End**********/

第2关:更新数据

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. UPDATE student
  5. SET totalcredit = 2.0
  6. /**********End**********/
  7. -- update student set totalcredit=2.0;

第3关:更新数据-练习

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. UPDATE student
  5. SET birthday = '2000-01-22'
  6. WHERE sname='马小燕';
  7. /**********End**********/

第4关:删除数据

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. DELETE FROM student WHERE sno = '11111';
  5. /**********End**********/

 第5关:创建表-练习

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. -- select * from student ;
  5. create table s1 as select * from student;
  6. /**********End**********/

 第6关:删除数据-练习1

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. DELETE FROM s1 WHERE sdept='计算机';
  5. /**********End**********/

第7关:删除数据-练习2

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. drop table s1 ;
  5. /**********End**********/

MySQL数据库 - 数据更新

第1关:插入数据

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## bundle insert the value #########
  5. INSERT INTO tb_emp(Id,Name,DeptId,Salary)
  6. VALUES (1,"Nancy",301,2300.00),
  7. (2,"Tod",303,5600.00),(3,"Carly",301,3200.00);
  8. ########## End ##########
  9. SELECT * FROM tb_emp;
  10. ########## End ##########

 第2关:更新数据

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## update the value ##########
  5. UPDATE tb_emp
  6. SET Name="Tracy",DeptId=302,Salary=4300.00
  7. WHERE id=3;
  8. ########## End ##########
  9. SELECT * FROM tb_emp;
  10. ########## End ##########

 第3关:删除数据

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## delete the value ##########
  5. DELETE FROM tb_emp
  6. WHERE Salary>3000;
  7. ########## End ##########
  8. SELECT * FROM tb_emp;
  9. ########## End ##########

 MySQL数据库 - 数据库和表的基本操作(一)

第1关:查看表结构与修改表名

  1. USE Company;
  2. ########## Begin ##########
  3. ########## modify the table name ##########
  4. ALTER table tb_emp RENAME jd_emp;
  5. ########## show tables in this database ##########
  6. show tables;
  7. ########## describe the table ##########
  8. describe jd_emp;
  9. ########## End ##########

 第2关:修改字段名与字段数据类型

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## change the column name ##########
  5. ALTER TABLE tb_emp change Id prod_id int(11);
  6. ########## change the data type of column ##########
  7. ALTER TABLE tb_emp MODIFY Name varchar(30);
  8. ########## End ##########
  9. DESCRIBE tb_emp;

 第3关:添加与删除字段

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## add the column ##########
  5. ALTER TABLE tb_emp ADD Country varchar(20) AFTER Name;
  6. ########## delete the column ##########
  7. ALTER TABLE tb_emp DROP Salary;
  8. ########## End ##########
  9. DESCRIBE tb_emp;

第4关:修改字段的排列位置

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## modify the column to top ##########
  5. ALTER TABLE tb_emp MODIFY Name varchar(25) FIRST;
  6. ########## modify the column to the rear of another column ##########
  7. ALTER TABLE tb_emp MODIFY DeptId int(11) AFTER Salary;
  8. ########## End ##########
  9. DESCRIBE tb_emp;

 第5关:删除表的外键约束

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## delete the foreign key ##########
  5. ALTER TABLE tb_emp DROP FOREIGN KEY emp_dept;
  6. ########## End ##########
  7. SHOW CREATE TABLE tb_emp \G;

实训二:单表查询(4课时)

单表查询(一)student表查询

第1关:选择列查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sno 学号, sname 姓名 from student where birthday >= "2000.1.1" and birthday <= "2000.12.31";
  5. /**********End**********/

 第2关:去除重复结果

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. SELECT DISTINCT sno
  5. FROM score ;
  6. /**********End**********/

第3关:范围查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. SELECT *
  5. FROM course
  6. WHERE ctime BETWEEN 1 AND 50;
  7. /**********End**********/

 第4关:带IN关键字的查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. SELECT *
  5. from student
  6. where sdept!='计算机' and sdept!='信息';
  7. /**********End**********/

 第5关:匹配查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select *
  5. from student
  6. where sname like '%马__';
  7. /**********End**********/

 第6关:范围查询-练习

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select *
  5. from score
  6. where tno='052501'and grade>='80' and grade<='90' and sno like '96%';
  7. /**********End**********/

 第7关:where子句查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sno, cno from score where grade is null;
  5. /**********End**********/

单表查询(二)基本查询

第1关:基本查询语句

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## retrieving the Name and Salary ##########
  5. select Name,Salary from tb_emp;
  6. ########## retrieving all the table ##########
  7. select * from tb_emp;
  8. ########## End ##########

 第2关:带 IN 关键字的查询

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## retrieving the Name and Salary with IN statement ##########
  5. SELECT Name,Salary FROM tb_emp WHERE Id !='1';
  6. ########## End ##########

第3关:带 BETWEEN AND 的范围查询

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## retrieving the Name and Salary with BETWEEN AND statement ##########
  5. SELECT Name,Salary FROM tb_emp
  6. WHERE Salary BETWEEN 3000 AND 5000;
  7. ########## End ##########

 单表查询(三)聚集函数

第1关:COUNT( )函数

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select count(*) from student;
  5. /**********End**********/

 第2关:COUNT( )函数-练习

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select count(distinct sno) from score;
  5. /**********End**********/

第3关:AVG( )函数、MAX函数和MIN函数

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select cno,AVG(grade),MAX(grade),MIN(grade) from score group by(cno);
  5. /**********End**********/

 第4关:分组查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sdept,count(*) from student group by sdept having count(*)<3;
  5. /**********End**********/

 第5关:倒序排列

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sdept,sclass,COUNT(*) from student group by sdept,sclass order by count(*) desc,sdept desc;
  5. /**********End**********/

单表查询(四)-分组操作符与聚集函数 

第1关:数据统计(初级)

  1. USE test_wyy_db_guet
  2. GO
  3. SET NOCOUNT ON
  4. -- ********** Begin ********** --
  5. -- ********** 此处写第一题的SQL语句 ********** --
  6. select count(*) from course where credit>2;
  7. -- ********** End ********** --
  8. GO
  9. -- ********** Begin ********** --
  10. -- ********** 此处写第二题的SQL语句 ********** --
  11. select sum(credit) from course where cno like "BT%";
  12. -- ********** End ********** --
  13. GO
  14. -- ********** Begin ********** --
  15. -- ********** 此处写第三题的SQL语句 ********** --
  16. select left(cno,2),count(*)from course group by left(cno,2);
  17. -- ********** End ********** --
  18. GO

第2关:数据统计初级应用

  1. USE test_wyy_db_guet
  2. Go
  3. SET NOCOUNT ON
  4. -- ********** Begin ********** --
  5. ---------- 第一题----------
  6. select count(model) from printer where color = "T" and type = "laser";
  7. -- ********** End ********** --
  8. GO
  9. -- ********** Begin ********** --
  10. ---------- 第二题----------
  11. select min(price) from printer;
  12. -- ********** End ********** --
  13. GO
  14. -- ********** Begin ********** --
  15. ---------- 第三题----------
  16. select model,price from printer where price >=(select max(price) from printer);
  17. -- ********** End ********** --
  18. GO

 第3关:数据统计综合应用

  1. USE test_wyy_db_guet
  2. Go
  3. SET NOCOUNT ON
  4. ---------- 第1题 ----------
  5. -- ********** Begin ********** --
  6. select hd from V_test group by hd having count(*) <3;
  7. -- ********** End ********** --
  8. GO
  9. ---------- 第2题 ----------
  10. -- ********** Begin ********** --
  11. select max(AvgSpeed) from
  12. (select maker maker,Avg(speed) AvgSpeed
  13. from V_test
  14. group by maker
  15. )name;
  16. -- ********** End ********** --
  17. GO
  18. ---------- 第3题 ----------
  19. -- ********** Begin ********** --
  20. select maker,count(*) from V_test where price>1000 group by maker;
  21. -- ********** End ********** --
  22. GO
  23. ---------- 第4题 ----------
  24. -- ********** Begin ********** --
  25. select maker,type,AVG(price) from V_test group by maker,type;
  26. -- ********** End ********** --
  27. GO

 单表查询(五)排序和分组

第1关:对查询结果进行排序

  1. USE School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## 查询1班同学的所有信息以成绩降序的方式显示结果 ##########
  5. select * from tb_score where class_id = 1 order by score desc;
  6. ########## End ##########

第2关:分组查询

  1. USE School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## 对班级名称进行分组查询 ##########
  5. SELECT * FROM tb_class GROUP BY class_id;
  6. ########## End ##########

第3关:使用 LIMIT 限制查询结果的数量

  1. USE School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## 查询班级中第2名到第5名的学生信息 ##########
  5. SELECT * FROM tb_score order by score desc LIMIT 1,4;
  6. ########## End ##########

 单表查询(六)综合查询

第1关:基本查询语句

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## retrieving the Name and Salary ##########
  5. select Name,Salary from tb_emp;
  6. ########## retrieving all the table ##########
  7. select * from tb_emp;
  8. ########## End ##########

第2关:带 IN 关键字的查询

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## retrieving the Name and Salary with IN statement ##########
  5. SELECT Name,Salary FROM tb_emp WHERE Id NOT IN (1);
  6. ########## End ##########

第3关:带 BETWEEN AND 的范围查询

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## retrieving the Name and Salary with BETWEEN AND statement ##########
  5. SELECT Name,Salary FROM tb_emp
  6. WHERE Salary BETWEEN 3000 AND 5000;
  7. ########## End ##########

 第4关:带 LIKE 的字符匹配查询

  1. USE Company;
  2. ######### Begin #########
  3. SELECT Name,Salary FROM tb_emp WHERE Name LIKE "C%";
  4. ######### End #########

第5关:查询空值与去除重复结果实训三:多表查询(4课时)

  1. USE Company;
  2. ######### Begin #########
  3. SELECT * FROM tb_emp WHERE DeptId IS NULL;
  4. ######### End #########
  5. ######### Begin #########
  6. SELECT DISTINCT Name FROM tb_emp;
  7. ######### End #########

 第6关:带 AND 与 OR 的多条件查询

  1. USE Company;
  2. ######### Begin #########
  3. SELECT * FROM tb_emp WHERE DeptId=301 AND Salary > 3000;
  4. ######### End #########
  5. ######### Begin #########
  6. SELECT * FROM tb_emp WHERE DeptId=301 OR DeptId=303;
  7. ######### End #########

 第7关:对查询结果进行排序

  1. USE School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## 查询1班同学的所有信息以成绩降序的方式显示结果 ##########
  5. select * from tb_score where class_id = 1 order by score desc;
  6. ########## End ##########

 第8关:分组查询

  1. USE School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## 对班级名称进行分组查询 ##########
  5. SELECT * FROM tb_class GROUP BY class_id;
  6. ########## End ##########

 第9关:使用 LIMIT 限制查询结果的数量

  1. USE School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. ########## 查询班级中第2名到第5名的学生信息 ##########
  5. SELECT * FROM tb_score order by score desc LIMIT 1,4;
  6. ########## End ##########

实训三:多表查询(4课时)

多表查询-子查询(一)

第1关:子查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sname, birthday from student where birthday < (select birthday from student where sname = "刘东明");
  5. /**********End**********/

第2关:子查询-练习

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sno,student.sname from student left join score on student.sno=score.sno where score.sno is null;
  5. /**********End**********/

 第3关:子查询-练习一

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select sname,sdept,birthday from student where birthday < any(select birthday from student where sdept="数学") and sdept <> "数学";
  5. /**********End**********/

第4关:子查询-练习二

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sname,student.sdept from student,score where student.sno=score.sno and score.cno="004";
  5. /**********End**********/

 第5关:子查询-练习三

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select score.sno from score where cno in (select score.cno from score,student where student.sno=score.sno and student.sname='刘东明') and score.sno not in(select student.sno from student where student.sname='刘东明') group by sno having count(cno) >=(select count(cno) from score,student where score.sno=student.sno and student.sname='刘东明')
  5. /**********End**********/

 第6关:子查询-练习四

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select distinct score.sno from score group by sno having count(cno) >=(select count(cno) from course);
  5. /**********End**********/

 多表查询 - 子查询(二)

第1关:带比较运算符的子查询

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. #1.查询大于所有平均年龄的员工姓名与年龄
  5. select name, age from tb_emp where age > (select avg(age) from tb_emp );

 第2关:关键字子查询

  1. USE Company;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. #1.使用 ALL 关键字进行查询
  5. select position,salary from tb_salary where salary >(select max(salary) from tb_salary where position="Java");
  6. #2.使用 ANY 关键字进行查询
  7. select position,salary from tb_salary where salary >(select min(salary) from tb_salary where position="Java");
  8. #3.使用 IN 关键字进行查询
  9. select position,salary from tb_salary where position="Java";
  10. ########## End ##########

多表查询-连接查询(一)

第1关:自然连接

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sname,course.cname,teach.tname,score.grade from student,score,course,teach where student.sno=score.sno and score.tno=teach.tno and score.cno=course.cno and teach.tname="严敏" and course.cname="数学分析";
  5. /**********End**********/

第2关:等值连接

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sname,course.cname,teach.tname,score.grade from student,score,course,teach where student.sno=score.sno and score.tno=teach.tno and score.cno=course.cno and teach.tname="严敏" and course.cname="数学分析";
  5. /**********End**********/

第3关:JOIN连接

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sname,course.cname,teach.tname,score.grade from student,score,course,teach where student.sno=score.sno and score.tno=teach.tno and score.cno=course.cno and teach.tname="严敏" and course.cname="数学分析";
  5. /**********End**********/

第4关:自身连接查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select s2.sname,s2.birthday from student s1,student s2 where s1.sname="刘东明" and s1.birthday>s2.birthday;
  5. /**********End**********/

第5关:外部连接查询

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. select student.sno,student.sname from student left join score on student.sno=score.sno where score.sno is null;
  5. /**********End**********/

多表查询- 连接查询(二)

第1关:内连接查询

  1. USE School;
  2. ########## 查询数据表中学生姓名和对应的班级 ##########
  3. #请在此处添加实现代码
  4. ########## Begin ##########
  5. select tb_student.name studentName,tb_class.name className from tb_student,tb_class where tb_student.class_id=tb_class.id
  6. ########## End ##########

第2关:外连接查询

  1. USE School;
  2. ########## 使用左外连接查询所有学生姓名和对应的班级 ##########
  3. #请在此处添加实现代码
  4. ########## Begin ##########
  5. select s1.name studentName,s2.name className from tb_student s1 left join tb_class
  6. s2 on s1.class_id=s2.id;
  7. ########## End ##########
  8. ########## 使用右外连接查询所有学生姓名和对应的班级 ##########
  9. #请在此处添加实现代码
  10. ########## Begin ##########
  11. select s1.name studentName,s2.name className from tb_student s1 right join tb_class
  12. s2 on s1.class_id=s2.id;
  13. ########## End ##########

第3关:复合条件连接查询

  1. USE School;
  2. ########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
  3. #请在此处添加实现代码
  4. ########## Begin ##########
  5. select tb_student.name studentName,tb_student.score,tb_class.name className from tb_student,tb_class where tb_student.class_id=tb_class.id and score>90;
  6. ########## End ##########

大学数据库创建与查询实战

第1关:数据库表设计

  1. use universityDB;
  2. create table instructor(
  3. ID varchar(5) ,primary key(ID),
  4. name varchar(20) NOT NULL,
  5. dept_name varchar(20) DEFAULT NULL ,
  6. salary numeric(8,2) check(salary>29000),
  7. foreign key (dept_name) references department(dept_name)
  8. on delete set null
  9. );
  10. create table section(
  11. course_id varchar(8) ,
  12. sec_id varchar(8) ,
  13. semester varchar(6) check(semester in('Fall','Winter','Spring','Summer')),
  14. year numeric(4,0) ,
  15. building varchar(15) ,
  16. room_number varchar(7) ,
  17. time_slot_id varchar(4) ,
  18. primary key (course_id, sec_id, semester, year),
  19. foreign key (course_id) references course(course_id)
  20. on delete cascade,
  21. foreign key (building, room_number) references classroom(building, room_number)
  22. );
  23. ########## End ##########

第2关:查询(一)

  1. #********* Begin *********#
  2. echo "
  3. select name
  4. from student where dept_name='Biology';
  5. select name from instructor where salary> any(select salary
  6. from instructor where dept_name='Biology');
  7. select name,department.dept_name,building
  8. from instructor ,department where instructor.dept_name=department.dept_name;
  9. select distinct instructor.dept_name
  10. from instructor,department where instructor.dept_name=department.dept_name and building='Watson';
  11. "
  12. #********* End *********#

第3关:查询(二)

  1. #********* Begin *********#
  2. echo "
  3. select count(distinct ID) from teaches where semester ='spring' and year='2010';
  4. select instructor.ID,name,dept_name from teaches,instructor where semester='Fall'and year='2009' and teaches.ID=instructor.ID group by ID having count(distinct course_id)=2;
  5. select dept_name, count(distinct instructor.ID) as instr_count from instructor,teaches where semester='Spring' and year='2010' and instructor.ID=teaches.ID group by dept_name having count(distinct course_id)>=1
  6. "
  7. #********* End *********#

第4关:查询(三)

  1. #********* Begin *********#
  2. echo "
  3. select instructor.* from instructor order by salary desc,name asc ;
  4. select max(salary) from instructor;
  5. select dept_name from instructor group by dept_name having avg(salary)=(
  6. select max(avgs) from(select avg(salary) avgs,dept_name from instructor group by dept_name) a);
  7. select dept_name, avg(salary) as avg_salary from instructor group by dept_name having avg(salary)>50000 order by dept_name asc,avg(salary) desc;
  8. "
  9. #********* End *********#

第5关:查询(四)

  1. #********* Begin *********#
  2. echo "
  3. select distinct course_id
  4. from section
  5. where semester='Fall' and year=2009 and
  6. course_id not in (select course_id from section where semester='Spring' and
  7. year=2010);
  8. select course_id
  9. from section as S
  10. where year=2009 and semester='Fall' and exists
  11. (select section.* from section as T where year=2010 and semester='Spring' and
  12. S.course_id=T.course_id);
  13. select course_id
  14. from section
  15. where year=2009 and semester='Fall' union all select
  16. course_id from section where year=2010 and semester='Spring';
  17. select course_id,semester,year,sec_id,avg(tot_cred)
  18. from takes join student join department on takes.ID = student.ID
  19. where year=2009 group by course_id,semester,year,sec_id having count(takes.ID)>=13;
  20. "
  21. #********* End *********#

第6关:查询(五)

  1. #********* Begin *********#
  2. echo "
  3. select instructor.name,teaches.course_id
  4. from instructor,teaches
  5. where instructor.ID=teaches.ID and dept_name='Physics';
  6. select name
  7. from instructor
  8. where dept_name='Physics' and salary>80000;
  9. update instructor set salary = case when salary <= 100000 then salary*1.05 else salary*1.03 end;
  10. create view Physics_fall_2009 as select course.course_id,building,room_number from course,section where course.course_id = section.course_id and course.dept_name='Physics' and section.semester='Fall' and section.year='2009';
  11. "
  12. #********* End *********#

实训四:索引与视图(2课时)

MySQL开发技巧 - 索引
第1关:索引

  1. use School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. #1.创建名为pk_student的主键索引
  5. create table student(
  6. stu_id int not null,
  7. name varchar(25) not null,
  8. age int not null,
  9. sex char(2) not null,
  10. classes int not null,
  11. grade int not null,
  12. primary key(stu_id)
  13. );
  14. #2.创建名为idx_age的普通索引
  15. create index idx_age on student(age);
  16. #3.创建名为uniq_classes的唯一索引
  17. create unique index uniq_classes on student(classes);
  18. #4.创建名为idx_group的组合索引
  19. create index idx_group on student(name,sex,grade);
  20. ########## End ##########

 MySQL开发技巧 - 视图

第1关:视图

  1. use School;
  2. #请在此处添加实现代码
  3. ########## Begin ##########
  4. create view stu_view as select math,chinese,math+chinese from student;
  5. #1.创建单表视图
  6. create view stu_classes as select student.stu_id,name,classes from student,stu_info where student.stu_id=stu_info.stu_id;
  7. #2.创建多表视图
  8. ########## End ##########

 索引(teachingdb数据库)

第1关:索引

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. create index idx_sname on student(sname);
  5. /**********End**********/

 第2关:删除索引-练习

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. drop index idx_sname;
  5. /**********End**********/

 SQL视图(teachingdb数据库)

第1关:创建视图

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. create view student_cs as select * from student where sdept="计算机";
  5. /**********End**********/

第2关:创建视图-练习一

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. create view v_grade_avg as select sno 学号,
  5. avg(grade) 平均成绩 from score
  6. group by sno;
  7. /**********End**********/

MySQL-索引和视图

第1关:建立索引

  1. use province;
  2. #代码开始
  3. alter table jdxx add primary key zsy(sf,cs,qx,name);
  4. create index namesy on jdxx(name);
  5. #代码结束
  6. show index in jdxx\g;

 第2关:建立视图并更新视图

  1. use province;
  2. #代码开始
  3. create view csxx as select qx,name from jdxx where qx in('天心区','宁乡县','岳麓区','开福区','望城县','浏阳市','芙蓉区','长沙县','雨花区');
  4. update csxx set name="月湖街道" where name="西湖街道" and qx='开福区';
  5. #代码结束
  6. select * from csxx;

第3关:建立基于多表的视图 

  1. use province
  2. #代码开始
  3. create view csbm as select jdxx.qx,jdxx.name,qxyzbm.qxbm from jdxx,qxyzbm where jdxx.qx=qxyzbm.qx and jdxx.cs='长沙市';
  4. #代码结束
  5. select * from csbm;

实训五:数据库安全控制(2课时)

创建用户

第1关:创建用户

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. create user user1 @localhost identified by 'user1';
  5. /**********End**********/

 第2关:创建用户-练习!!!

  1. /****请在此编写代码,操作完毕之后点击评测******/
  2. /**********Begin**********/
  3. create user user2 identified by 'user2';
  4. /**********End**********/

授权及回收权限

第1关:授权

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. GRANT USAGE ON *.* TO 'user1'@'localhost' ;
  5. GRANT ALL PRIVILEGES ON `teachingdb2`.* TO 'user1'@'localhost';
  6. /**********End**********/

 第2关:授权-练习一

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. grant select on teachingdb.* to user1@localhost with grant option;
  5. /**********End**********/

第3关:授权-练习二

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. #grant all on teachingdb to user1@localhost, user2@localhost;
  5. grant all on student to user1@localhost, user2@localhost;
  6. /**********End**********/

第4关:授权-练习三

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. #grant update(grade) on score to user2@localhost;
  5. /**********End**********/

 第5关:回收权限

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. revoke select on teachingdb.* from user1@localhost;
  5. /**********End**********/

MySQL-安全性控制

第1关:用户和权限

  1. # 请填写语句,完成以下功能:
  2. #(1) 创建用户tom和jerry,初始密码均为'123456'
  3. create user tom identified by '123456';
  4. create user jerry identified by '123456';
  5. #(2) 授予用户tom查询客户的姓名,邮箱和电话的权限,且tom可转授权限;grant 权限[,权限] ... on 数据库对象 to user|role,[user|role]... [with grant option]
  6. grant select(c_name,c_mail,c_phone) on client to tom with grant option;
  7. #(3) 授予用户jerry修改银行卡余额的权限;
  8. grant update(b_balance) on bank_card to jerry;
  9. #(4) 收回用户Cindy查询银行卡信息的权限。
  10. revoke select on bank_card from Cindy;
  11. #revoke 权限[,权限]... on 数据库对象 from user|role[,user|role]...

第2关:用户、角色与权限

  1. # 请填写语句,完成以下功能:
  2. # (1) 创建角色client_manager和fund_manager;
  3. create role client_manager,fund_manager;
  4. # (2) 授予client_manager对client表拥有select,insert,update的权限;
  5. grant select,insert,update on client to client_manager;
  6. # (3) 授予client_manager对bank_card表拥有查询除银行卡余额外的select权限;
  7. grant select(b_number,b_type,b_c_id)on bank_card to client_manager;
  8. # (4) 授予fund_manager对fund表的select,insert,update权限;
  9. grant select,insert,update on fund to fund_manager;
  10. # (5) 将client_manager的权限授予用户tom和jerry;
  11. grant client_manager to tom,jerry;
  12. # (6) 将fund_manager权限授予用户Cindy.
  13. grant fund_manager to Cindy;

MySQL数据库 - 授权与撤销授权

第1关:数据库授权

  1. ########## 开始编写 SQL ##########
  2. ########## 开始编写 SQL ##########
  3. -- set password for casual_user@localhost=password('123456');
  4. -- grant select,insert,update on *.* to
  5. -- casual_user@localhost identified by'123456';
  6. -- grant select,insert,update on *.* to casual_user@'localhost' identified by "123123";
  7. set password for casual_user@'localhost' = Password('123456');
  8. grant select,insert,update on *.* to casual_user@'localhost' identified by "123456";

第2关:数据库撤销权限

  1. ########## 开始编写 SQL ##########
  2. -- revoke all
  3. -- on mydb1.table1
  4. -- from 'user1'@'localhost';
  5. -- revoke all
  6. -- on mydb1.table2
  7. -- from 'user1'@'localhost';
  8. -- revoke insert,select,update,create,delete,alter
  9. -- on mydb2.*
  10. -- from 'user2'@'localhost';
  11. -- revoke all on mydb1.table1 from 'user1'@'ip';
  12. revoke all on mydb1.table1 from user1@'localhost';
  13. revoke all on mydb1.table2 from user1@'localhost';
  14. revoke select,update,insert,create,delete,alter on mydb2.* from user2@'localhost';

实训六:数据完整性

实训七:存储过程与触发器(4课时)

存储过程、函数与触发器

第1关:创建存储过程

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. delimiter $$
  5. create procedure pro_findname(in name char(3))
  6. Begin
  7. select * from student where sname like concat ('%',name,'%');
  8. End
  9. $$
  10. delimiter ;
  11. /**********End**********/

第2关:创建函数-count_credit

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. delimiter $
  5. create function count_credit(psno char(10)) returns int
  6. Begin
  7. declare xx int;
  8. select sum(credit) from course where cno in(
  9. select cno from score where grade >=60 and sno=psno
  10. ) into xx;
  11. return xx;
  12. end$
  13. delimiter ;
  14. /**********End**********/

第3关:存储过程-调用函数count_credit

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. delimiter //
  5. create procedure p_count_credit()
  6. Begin
  7. declare flag boolean default true;
  8. declare psno char(5);
  9. declare stu_cur cursor for select sno from student;
  10. declare continue handler for not found set flag=false;
  11. open stu_cur;
  12. while flag do
  13. fetch stu_cur into psno;
  14. update student set totalcredit=count_credit(psno) where sno=psno;
  15. end while;
  16. close stu_cur;
  17. end //
  18. delimiter ;
  19. /**********End**********/

第4关:创建触发器-计算总学分!!!

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. delimiter $$
  5. drop trigger if exists sum_credit$$
  6. create trigger sum_credit after insert on score
  7. for each row
  8. Begin
  9. update student set totalcredit=totalcredit
  10. (select credit from course where cno=new.cno)
  11. where sno=new.sno and new.grade>=60;
  12. end $$
  13. delimiter ;
  14. /**********End**********/

第5关:创建触发器-练习级联删除操作

  1. use teachingdb;
  2. /****请在此编写代码,操作完毕之后点击评测******/
  3. /**********Begin**********/
  4. delimiter $$
  5. drop trigger if exists del_student_score$$
  6. create trigger del_student_score before delete
  7. on student
  8. for each row
  9. Begin
  10. delete from score where sno=old.sno;
  11. end$$
  12. delimiter ;
  13. /**********End**********/

存储过程

第1关:建立和调用存储过程(不带输出参数的存储过程)

  1. use province;
  2. #代码开始
  3. #定义过程
  4. #调用过程
  5. use province;
  6. #代码开始
  7. delimiter $$
  8. create procedure dqxx(in city varchar(10),in district varchar(10))
  9. begin
  10. declare x int;
  11. declare jd int;
  12. declare z int;
  13. declare qt int;
  14. select count(name) from jdxx where cs = city and qxmc = district and name like "%乡" into x;
  15. select count(name) from jdxx where cs = city and qxmc = district and name like "%街道" into jd;
  16. select count(name) from jdxx where cs = city and qxmc = district and name like "%镇" into z;
  17. select count(name) from jdxx where cs = city and qxmc = district and name not like "%镇" and name not like "%街道" and name not like "%乡" into qt;
  18. select x 乡, jd 街道, z 镇, qt 其他;
  19. end $$
  20. delimiter ;
  21. call dqxx("长沙市", "开福区");
  22. call dqxx("厦门市", "同安区");
  23. #代码结束
  24. #代码结束

第2关:建立和调用存储过程(带输出参数)

  1. use sale;
  2. #代码开始
  3. #定义过程
  4. #调用过程
  5. use sale;
  6. #代码开始
  7. delimiter $$
  8. create procedure ygyj(in nf int, in yf int, in xm varchar(10), out pj varchar(10))
  9. begin
  10. declare jg int;
  11. select sum(sjfk) from xsd join gzry on gzry.gyh = xsd.gyh where year(xsrq) = nf and month(xsrq) = yf and gyxm = xm into jg;
  12. case
  13. when isnull(jg) then set pj = "无业绩";
  14. when jg < 5000 then set pj = "不达标";
  15. when jg < 10000 then set pj = "达标";
  16. else set pj = "优秀";
  17. end case;
  18. end $$
  19. delimiter ;
  20. call ygyj(2015, 7, "王雅静", @yj1);
  21. call ygyj(2015, 6, "廖秉娴", @yj2);
  22. call ygyj(2015, 7, "赵敏", @yj3);
  23. call ygyj(2015, 7, "章伟", @yj4);
  24. #代码结束
  25. select @yj1,@yj2,@yj3,@yj4;

第3关:建立和调用存储函数

  1. use sale;
  2. #代码开始
  3. #函数定义
  4. #调用函数
  5. use sale;
  6. #代码开始
  7. delimiter $$
  8. create function gkjb(nf int, xm varchar(10))
  9. returns varchar(10)
  10. DETERMINISTIC
  11. begin
  12. declare jg int;
  13. declare pj varchar(10);
  14. select sum(sjfk)
  15. from xsd join gk on gk.hyh = xsd.hyh
  16. where name = xm and year(xsrq) = nf into jg;
  17. case
  18. when isnull(jg) then
  19. set pj = "非会员";
  20. when jg < 5000 then
  21. set pj = "一般会员";
  22. when jg < 10000 then
  23. set pj = "vip";
  24. else set pj = "超级vip";
  25. end case;
  26. return pj;
  27. end $$
  28. delimiter ;
  29. select name 姓名, gkjb(2015, name) 等级 from gk;
  30. #代码结束

第4关:修改多个数据表的存储过程

  1. use library;
  2. #代码开始
  3. #定义过程
  4. #调用过程
  5. use library;
  6. #代码开始
  7. delimiter $$
  8. create procedure hs(in sh varchar(8), in dzbh varchar(3), in rq date, out zt varchar(12))
  9. begin
  10. declare jywh int;
  11. select count(*) from borrow where txm=sh and dzzh=dzbh and isnull(hsrq) into jywh;
  12. if jywh=0 then
  13. set zt = "没有该借阅";
  14. else
  15. update borrow set hsrq=rq where dzzh=dzbh and txm=sh and isnull(hsrq);
  16. update book set zk=1 where txm=sh;
  17. set zt = "还书成功";
  18. end if;
  19. end $$
  20. delimiter ;
  21. call hs("P0000001", "001", "2022-5-1", @zt1);
  22. call hs("P0000001", "002", "2022-5-1", @zt2);
  23. #代码结束
  24. select @zt1,@zt2;
  25. select txm, sm, zk from book;
  26. select * from borrow;

第5关:使用游标的存储过程

  1. use province;
  2. #代码开始
  3. use province;
  4. #代码开始
  5. delimiter $$
  6. create procedure tjdq(in sm varchar(10))
  7. begin
  8. declare flag int default 1;
  9. declare city varchar(10);
  10. declare qx varchar(10);
  11. declare jd int;
  12. declare x int;
  13. declare z int;
  14. declare qt int;
  15. declare dq cursor for select distinct cs, qxmc from jdxx where sf = sm;
  16. declare continue handler for not found set flag = 0;
  17. delete from dqtj;
  18. open dq;
  19. fetch dq into city, qx;
  20. while flag = 1 do
  21. select count(*) from jdxx where cs = city and qxmc = qx and name like "%街道" into jd;
  22. select count(*) from jdxx where cs = city and qxmc = qx and name like "%乡" into x;
  23. select count(*) from jdxx where cs = city and qxmc = qx and name like "%镇" into z;
  24. select count(*) from jdxx where cs = city and qxmc = qx and name not like "%镇" and name not like "%街道" and name not like "%乡" into qt;
  25. insert into dqtj values(city, qx, x, jd, z, qt);
  26. fetch dq into city, qx;
  27. end while;
  28. close dq;
  29. end $$
  30. delimiter ;
  31. call tjdq("安徽省");
  32. #代码结束
  33. select * from dqtj;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/612465
推荐阅读
相关标签
  

闽ICP备14008679号