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

马肤
这是懒羊羊

目录

实训一:数据定义和操纵(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关:创建数据库

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

 第2关:创建表

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

 第3关:使用主键约束

mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
use MyDb;
create table t_user1(
userId INT PRIMARY KEY,
name VARCHAR(32),
password VARCHAR(11),
phone VARCHAR(11),
email VARCHAR(32));
create table t_user2(
name VARCHAR(32),
phone VARCHAR(11),
email VARCHAR(32),
PRIMARY KEY(name,phone));

第4关:外键约束

mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
use MyDb;
CREATE TABLE t_class
(
    id INT  PRIMARY KEY,
    name VARCHAR(22) 
);
CREATE TABLE t_student
(
    id INT  PRIMARY KEY,
    name VARCHAR(22) ,
    classId int,
    CONSTRAINT fk_stu_class1 FOREIGN KEY(classId) REFERENCES t_class(id)
);

第5关:添加常用约束

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

DDL语言的使用

第1关:创建数据库

  create database teachingdb;

 第2关: 创建表

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

 第3关:添加字段

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

 第4关:删除字段

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

 第5关:修改字段

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

 第6关:添加唯一性约束

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


DML语言的使用

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

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

第2关:更新数据

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

第3关:更新数据-练习

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

第4关:删除数据

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

 第5关:创建表-练习

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

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

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

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

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

MySQL数据库 - 数据更新

第1关:插入数据

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

 第2关:更新数据

USE Company;
#请在此处添加实现代码
########## Begin ##########
########## update the value ##########
UPDATE tb_emp
SET Name="Tracy",DeptId=302,Salary=4300.00
WHERE id=3;
########## End ##########
SELECT * FROM tb_emp;
########## End ##########

 第3关:删除数据

USE Company;
#请在此处添加实现代码
########## Begin ##########
########## delete the value ##########
DELETE FROM tb_emp
WHERE Salary>3000;
########## End ##########
SELECT * FROM tb_emp;
########## End ##########

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

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

USE Company;
########## Begin ##########
########## modify the table name ##########
ALTER table tb_emp RENAME jd_emp;
########## show tables in this database ##########
show tables;
########## describe the table ##########
describe jd_emp;
########## End ##########

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

USE Company;
#请在此处添加实现代码
########## Begin ##########
########## change the column name ##########
ALTER TABLE tb_emp change Id prod_id int(11);
########## change the data type of column ##########
ALTER TABLE tb_emp MODIFY Name varchar(30);
########## End ##########
DESCRIBE tb_emp;

 第3关:添加与删除字段

USE Company;
#请在此处添加实现代码
########## Begin ##########
########## add the column ##########
ALTER TABLE tb_emp ADD Country varchar(20) AFTER Name; 
########## delete the column ##########
ALTER TABLE tb_emp DROP Salary;
########## End ##########
DESCRIBE tb_emp;

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

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

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

USE Company;
#请在此处添加实现代码
########## Begin ##########
########## delete the foreign key ##########
ALTER TABLE tb_emp DROP FOREIGN KEY emp_dept;
########## End ##########
SHOW CREATE TABLE tb_emp \G;

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

单表查询(一)student表查询

第1关:选择列查询

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  select sno 学号, sname 姓名 from student where birthday >= "2000.1.1" and birthday ='80' and grade=(select max(price) from printer);
-- ********** End ********** --
GO

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

USE test_wyy_db_guet
Go
SET NOCOUNT ON
---------- 第1题 ----------
-- ********** Begin ********** --
select hd from V_test group by hd having count(*) 1000 group by maker;
-- ********** End ********** --
GO
---------- 第4题 ----------
-- ********** Begin ********** --
select maker,type,AVG(price) from V_test group by maker,type;
-- ********** End ********** --
GO

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

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

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

第2关:分组查询

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

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

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

 单表查询(六)综合查询

第1关:基本查询语句

USE Company;
#请在此处添加实现代码
########## Begin ##########
########## retrieving the Name and Salary ##########
select Name,Salary from tb_emp;
########## retrieving all the table ##########
select * from tb_emp;
########## End ##########

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

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

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

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

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

USE Company;
######### Begin #########
SELECT Name,Salary FROM tb_emp WHERE Name LIKE "C%";
######### End #########

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

USE Company;
######### Begin #########
SELECT * FROM tb_emp WHERE DeptId IS NULL;
######### End #########
######### Begin #########
SELECT DISTINCT Name FROM tb_emp;
######### End #########

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

USE Company;
######### Begin #########
SELECT * FROM tb_emp WHERE DeptId=301 AND Salary > 3000;
######### End #########
######### Begin #########
SELECT * FROM tb_emp WHERE DeptId=301 OR DeptId=303;
######### End #########

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

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

 第8关:分组查询

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

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

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

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

多表查询-子查询(一)

第1关:子查询

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
    select sname, birthday from student where birthday  

第2关:子查询-练习

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

 第3关:子查询-练习一

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  select sname,sdept,birthday from student where birthday  
 

第4关:子查询-练习二

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

 第5关:子查询-练习三

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
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='刘东明')  
 /**********End**********/

 第6关:子查询-练习四

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

 多表查询 - 子查询(二)

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

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

 第2关:关键字子查询

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

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

第1关:自然连接

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
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="数学分析";
 /**********End**********/

第2关:等值连接

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  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="数学分析";
  
 /**********End**********/

第3关:JOIN连接

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  
  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="数学分析";
 /**********End**********/

第4关:自身连接查询

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

第5关:外部连接查询

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

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

第1关:内连接查询

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

第2关:外连接查询

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

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

USE School;
########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
#请在此处添加实现代码
########## Begin ##########
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;
########## End ##########

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

第1关:数据库表设计

use universityDB;
create table instructor(
    ID varchar(5) ,primary key(ID),
    name varchar(20) NOT NULL,
    dept_name varchar(20) DEFAULT NULL ,
    salary numeric(8,2)  check(salary>29000),
    foreign key (dept_name) references department(dept_name)
        on delete set null
);
create table section(
    course_id varchar(8)  ,
    sec_id varchar(8) ,
    semester varchar(6)  check(semester in('Fall','Winter','Spring','Summer')),
    year numeric(4,0)  ,
    building varchar(15)  ,
    room_number varchar(7)   ,
    time_slot_id varchar(4) ,
    primary key (course_id, sec_id, semester, year),
     foreign key (course_id) references course(course_id)
        on delete cascade,
     foreign key (building, room_number) references classroom(building, room_number)
);
########## End ##########

第2关:查询(一)

#********* Begin *********#
echo "
select name
from student where dept_name='Biology';
 
select name from instructor where salary> any(select salary 
from instructor where dept_name='Biology');
 
select name,department.dept_name,building 
from instructor ,department where instructor.dept_name=department.dept_name;
 
select distinct instructor.dept_name
from instructor,department where instructor.dept_name=department.dept_name and building='Watson';
 
"
#********* End *********#

第3关:查询(二)

#********* Begin *********#
echo "
select count(distinct ID) from teaches where semester ='spring' and year='2010';
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;
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
"
#********* End *********#

第4关:查询(三)

#********* Begin *********#
echo "
select instructor.* from instructor order by salary desc,name asc ;
select max(salary) from instructor;
select dept_name from instructor group by dept_name having avg(salary)=(
select max(avgs) from(select avg(salary) avgs,dept_name  from instructor group by dept_name) a);
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;
"
#********* End *********#

第5关:查询(四)

#********* Begin *********#
echo "
select distinct course_id 
from section 
where semester='Fall' and year=2009 and
course_id not in (select course_id from section where semester='Spring' and
year=2010);
 
select course_id 
from section as S 
where year=2009 and semester='Fall' and exists
(select section.* from section as T where year=2010 and semester='Spring' and
S.course_id=T.course_id);
 
select course_id 
from section 
where year=2009 and semester='Fall' union all select
course_id from section where year=2010 and semester='Spring';
 
select course_id,semester,year,sec_id,avg(tot_cred) 
from takes join student join department on takes.ID = student.ID 
where year=2009 group by course_id,semester,year,sec_id having count(takes.ID)>=13;
 
 
"
#********* End *********#

第6关:查询(五)

#********* Begin *********#
echo "
select instructor.name,teaches.course_id 
from instructor,teaches 
where instructor.ID=teaches.ID and dept_name='Physics';
 
select name 
from instructor 
where dept_name='Physics' and salary>80000;
update instructor set salary = case when salary 

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码