数据库原理及应用(MYSQL 版)实验1~4 题目以及代码

打印 上一主题 下一主题

主题 828|帖子 828|积分 2484

实验一  数据库和表的管理

  1. 1.使用 SQL 语句创建数据库 studentsdb。
  2. CREATE DATABASE studentsdb;
  3. 2.使用SQL 语句选择 studentsdb 为当前使用的数据库。
  4. USE studentsdb;
  5. 3.1.使用 SQL 语句在 studentsdb 数据库中创建数据表 student_info、curriculum、grade,3个表的数据结构如表A-1~表A-3所示。
  6. USE studentsdb;
  7. CREATE TABLE student_info
  8. (
  9.         学号        char(4) PRIMARY KEY,
  10.         姓名        char(8) NOT NULL,
  11.         性别        char(2),
  12.         出生日期        date,
  13.         家庭住址        varchar(50)
  14. );
  15. DESC student_info;
  16. 4.
  17. INSERT INTO student_info(学号,姓名,性别,出生日期,家庭住址)
  18. VALUES ('0001','张青平','男','2000-10-01','衡阳市东风路77号'),
  19.        ('0002','刘东阳','男','1998-12-09','东阳市八一北路33号'),
  20.        ('0003','马晓夏','女','1995-05-12','长岭县五一路763号'),
  21.        ('0004','钱忠理','男','1994-09-23','滨海市洞庭大道279号'),
  22.        ('0005','孙海洋','男','1995-04-03','长岛县解放路27号'),
  23.        ('0006','郭小斌','男','1997-11-10','南山市红旗路113号'),
  24.        ('0007','肖月玲','女','1996-12-07','东方市南京路11号'),
  25.        ('0008','张玲珑','女','1997-12-24','滨江市新建路97号');
  26. SELECT * FROM student_info;
  27. 3.2使用 SQL 语句在 studentsdb 数据库中创建数据表 student_info、curriculum、grade,3个表的数据结构如表A-1~表A-3所示。
  28. CREATE TABLE curriculum
  29. (
  30.         课程编号        char(4) PRIMARY KEY,
  31.         课程名称        varchar(50),
  32.         学分        int
  33. );
  34. DESC curriculum;
  35. 4.2
  36. INSERT INTO curriculum(课程编号,课程名称,学分)
  37. VALUES ('0001','计算机应用基础',2),
  38.        ('0002','C语言程序设计',2),
  39.        ('0003','数据库原理及应用',2),
  40.        ('0004','英语',4),
  41.        ('0005','高等数学',4);
  42. SELECT * FROM curriculum;
  43. 3.3使用 SQL 语句在 studentsdb 数据库中创建数据表 student_info、curriculum、grade,3个表的数据结构如表A-1~表A-3所示。
  44. CREATE TABLE grade
  45. (
  46.         学号        char(4),
  47.         课程编号        char(4),
  48.         分数        int,
  49.         PRIMARY KEY(学号,课程编号)
  50. );
  51. DESC grade;
  52. 4.3
  53. INSERT INTO grade(学号,课程编号,分数)
  54. VALUES ('0001','0001',80),
  55.        ('0001','0002',91),
  56.        ('0001','0003',88),
  57.        ('0001','0004',85),
  58.        ('0001','0005',77),
  59.        ('0002','0001',73),
  60.        ('0002','0002',68),
  61.        ('0002','0003',80),
  62.        ('0002','0004',79),
  63.        ('0002','0005',73),
  64.        ('0003','0001',84),
  65.        ('0003','0002',92),
  66.        ('0003','0003',81),
  67.        ('0003','0004',82),
  68.        ('0003','0005',75);
  69. SELECT * FROM grade;
  70. 5.使用SQL语句ALTER TABLE修改curriculum表的“课程名称”列,使之为空
  71. ALTER TABLE curriculum
  72. MODIFY 课程名称 VARCHAR(50) NULL;
  73. DESC curriculum;
  74. 6.使用SQL语句ALTER TABLE修改grade表的“分数”列,使其数据类型为decimal(5,2)
  75. ALTER TABLE grade
  76. MODIFY 分数 DECIMAL(5,2);
  77. DESC grade;
  78. 7.使用SQL语句ALTER TABLE为student_info表添加一个名为“备注”的数据列,其数据类型为varchar(50)
  79. ALTER TABLE student_info
  80. ADD 备注 VARCHAR(50);
  81. DESC student_info;
  82. 8.使用SQL语句创建数据库studb,并在此数据库下创建表stu,表结构与数据与studentsdb的student_info表相同
  83. CREATE DATABASE studb;
  84. USE studb;
  85. CREATE TABLE stu
  86. SELECT * FROM studentsdb.student_info;
  87. DESC stu;
  88. 9.使用SQL语句删除表stu中学号为0004的记录
  89. DELETE FROM stu WHERE 学号 = '0004';
  90. SELECT * FROM stu;
  91. 10.使用SQL语句更新表stud中学号为0002的家族住址为“滨江市新建路96号”
  92. UPDATE stu
  93.         SET 家庭住址 = '滨江市新建路96号' WHERE 学号 = '0002' ;
  94. SELECT * FROM stu;
  95. 11.删除表stud的“备注”列
  96. ALTER TABLE stu
  97.         DROP COLUMN 备注;
  98. 12.删除表stud
  99. DROP TABLE stu;
  100. 13.删除数据库studb
  101. DROP DATABASE studb;
复制代码
实验二  数据查询

  1. 1.1 在student_info 表中查询每个学生的学号、姓名、出生日期信息。
  2. USE studentsdb;
  3. SELECT 学号,姓名,出生日期 FROM student_info;
  4. 1.2 查询 student_info 表中学号为0002的学生的姓名和家庭住址。
  5. SELECT 姓名,家庭住址 FROM student_info
  6. WHERE 学号='0002';
  7. 1.3 查询 student info 表中所有出生日期在1995年以后的女同学的姓名和出生目期。
  8. SELECT 姓名,出生日期 FROM student_info
  9. WHERE 性别 = '女' AND 出生日期 > '1995-12-31';
  10. 2.1 在grade表中查询分数在70~80的学生的学号、课程编号和成绩。
  11. SELECT 学号,课程编号,分数 FROM grade
  12. WHERE 分数 >70 AND 分数 <80;
  13. 2.2 在grade表中查询课程编号0002的学生的平均成绩。
  14. SELECT AVG(分数)AS 平均成绩 FROM grade
  15. WHERE 课程编号='0002';
  16. 2.3 在 grade 表中查询选修课程编号为0003的人数和该课程有成绩的人数。
  17. SELECT COUNT(学号) AS 选修课程编号为0003的人数,COUNT(分数) AS 有成绩的人数 FROM grade
  18. WHERE 课程编号 = '0003' ;
  19. 2.4 查询 student_info表中学生的姓名和出生日期,查询结果按出生日期从大到小排序。
  20. SELECT 姓名,出生日期FROM student_info
  21. ORDER BY 出生日期 DESC;
  22. 2.5 查询所有姓“张”的学生的学号和姓名。
  23. SELECT 学号,姓名 FROM student_info
  24. WHERE 姓名 LIKE '张%';
  25. 3.对于 student_info 表,查询学生的学号、姓名、性别、出生日期及家庭住址,查询结果先按照性别排序,性别相同的再按学号由大到小排序。
  26. SELECT 学号,姓名,性别,出生日期,家庭住址 FROM student_info
  27. ORDER BY 性别,学号 DESC;
  28. 4. 使用GROUP BY 子句查询grade表中各个学生的平均成绩。
  29. SELECT 学号,AVG(分数) AS 平均成绩 FROM grade
  30. GROUP BY 学号;
  31. 5. 使用 UNION运算符将 student_info表中姓“刘”学生的学号、姓名与姓“张”学生的学号、姓名返回在一个表中。
  32. SELECT 学号,姓名 FROM student_info
  33. WHERE 姓名 LIKE '刘%'
  34. UNION
  35. SELECT 学号,姓名 FROM student_info
  36. WHERE 姓名 LIKE '张%';
  37. 6.1 在student_info 表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期。
  38. SELECT 姓名,出生日期 FROM student_info
  39. WHERE 性别 = (SELECT 性别 FROM  student_info WHERE 姓名='刘东阳');
  40. 6.2 使用IN子查询查找所修课程编号为0002、0005的学生的学号、姓名、性别。
  41. SELECT 学号,姓名,性别 FROM student_info
  42. WHERE  学号 IN(SELECT (学号) FROM grade WHERE 课程编号='0002' OR 课程编号='0005');
  43. 6.3 使用ANY子查询查找学号为0001 的学生的分数比学号为0002的学生的最低分数高的课程编号和分数
  44. SELECT 课程编号,分数 FROM grade  
  45. WHERE 学号='0001' AND 分数>ANY(SELECT MIN(分数) FROM grade WHERE 学号='0002');
  46. 6.4使用ALL子查询查找学号为0001 的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数。
  47. SELECT 课程编号,分数 FROM grade
  48. WHERE 学号='0001' AND 分数>ALL(SELECT MAX(分数) FROM grade WHERE 学号='0002');
  49. 7.1 查询分数为80~90的学生的学号、姓名和分数。
  50. SELECT grade.学号,姓名,分数 FROM grade,student_info
  51. WHERE grade.学号=student_info.学号
  52. AND 分数 BETWEEN 80 and 90;
  53. 7.2 使用INNBR JOIN 连接方式登阅学习*數据库原理及应用”课程的学生的学号、姓名、分数。
  54. SELECT grade.学号, 姓名,分数 FROM  grade
  55. INNER JOIN student_info  ON student_info.学号=grade.学号
  56. INNER JOIN curriculum ON curriculum.课程编号=grade.课程编号
  57. WHERE curriculum.课程名称='数据库原理及应用';
  58. 7.3 查询每个学生所选课程的服高成绩要求列出学母、姓名、最福成绩。
  59. SELECT grade.学号,姓名,MAX(分数)最高成绩
  60. FROM grade,student_info
  61. WHERE grade.学号=student_info.学号
  62. GROUP BY grade.学号;
  63. 7.4 使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课的学生的总成绩为空。
  64. SELECT student_info.学号,姓名,SUM(分数) 总成绩 FROM student_info
  65. LEFT OUTER JOIN grade ON grade.学号=student_info.学号
  66. GROUP BY student_info.学号;
  67. 7.5 为grade 表添加数据行:学号为 0004、课程编号为 0006、分数为75。
  68.     使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum 表中没有的课程列值为空。
  69. INSERT INTO grade VALUES('0004','0006',76);
  70. SELECT grade.课程编号,课程名称,COUNT(学号) 选修人数 FROM curriculum
  71. RIGHT OUTER JOIN grade ON curriculum.课程编号=grade.课程编号
  72. GROUP BY 课程编号;
复制代码
实验三  索引和视图

  1. 1.使用SQL 语句 ALTER TABLE 分别删除 studentsdb 数据库中 student_info表、grade 表、curriculum 表的主键索引。
  2. USE studentsdb;
  3. ALTER TABLE student_info DROP PRIMARY KEY;
  4. ALTER TABLE grade DROP PRIMARY KEY;
  5. ALTER TABLE curriculum DROP PRIMARY KEY;
  6. 2.使用SQL 语句为 curriculum 表的课程编号创建唯一索引,命名为 cno_idx。
  7. CREATE UNIQUE INDEX cno_idx ON curriculum(课程编号);
  8. SHOW INDEX FROM curriculum;
  9. 3.使用SQL 语句为 grade表中的“分数”字段创建一个普通索引,命名为 grade_idx。
  10. CREATE INDEX grade_idx ON grade(分数);
  11. SHOW INDEX FROM grade;
  12. 4.使用SQL 语句grade表中的“学号”和“课程编号”字段创建一个复合唯一索引,命名为grade_sid_cid_idx.
  13. CREATE  UNIQUE INDEX grade_sid_cid_idx ON grade(学号,课程编号);
  14. 5.查看 grade 表上的索引信息。
  15. SHOW INDEX FROM grade;
  16. 6.使用 SQL 语句删除索引 grade_idx,然后再次查看 grade 表上的索引信息。
  17. DROP INDEX grade_idx ON grade;
  18. SHOW INDEX FROM grade;
  19. 7.使用SQL 语句 CREATE VIEW建立一个名v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为 0003的学生的情况。
  20. CREATE VIEW v_stu_c
  21. AS
  22. SELECT student_info.学号,姓名,课程编号 FROM student_info, grade
  23. WHERE student_info.学号=grade.学号;
  24. SELECT * FROM v_stu_c
  25. WHERE 学号='0003';
  26. 8. 基于 student_info 表、curriculum 表和grade表建立一个名为v_stu_g的视图,视图包括所有学生的学号、姓名、课程名称、分数。
  27. 使用视图v_stu_g查询学号0001的学生的课程平均分。
  28. CREATE VIEW v_stu_g
  29. AS
  30. SELECT student_info.学号,student_info.姓名, curriculum.课程名称 ,grade.分数
  31. FROM student_info,curriculum,grade
  32. WHERE student_info.学号=grade.学号
  33. AND grade.课程编号=curriculum.课程编号;
  34. SELECT AVG(分数) 平均分 FROM v_stu_g
  35. WHERE 学号='0001';
  36. 9.使用SQL 语句修改视图 v_stu_g,显示学生的学号、姓名、性别。
  37. ALTER VIEW v_stu_g
  38. AS
  39. SELECT 学号,姓名,性别 FROM student_info;
  40. 10. 利用视图 v_stu_g 为 student_ info 表添加一行数据:学号为 0010、姓名为陈婷婷、性别为女
  41. INSERT INTO v_stu_g
  42. VALUES('0010','陈婷婷','女');
  43. 11. 利用视图v_stu_g删除学号为0010的学生的记录。
  44. DELETE FROM v_stu_g
  45. WHERE 学号='0010';
  46. 12. 利用视图v_stu_g修改姓名为张青平的学生的高等数学的分数为87
  47. CREATE OR REPLACE VIEW v_stu_g
  48. AS
  49. SELECT student_info.学号,student_info.姓名, curriculum.课程名称 ,grade.分数
  50. FROM student_info,curriculum,grade
  51. WHERE student_info.学号=grade.学号
  52. AND grade.课程编号=curriculum.课程编号;
  53. UPDATE v_stu_g
  54. SET 分数=87
  55. WHERE 姓名='张青平' AND 课程名称='高等数学';
  56. 13. 使用SQL 语句删除视图v_stu_c和v_stu_g
  57. DROP VIEW v_stu_c,v_stu_g;
复制代码
实验四  数据完整性

  1. 1.创建 students数据库,在该数据库下创建stu表,并同时创建约束,表结构及约束要求如表 A-7所示。
  2. CREATE DATABASE students;
  3. USE students;
  4. CREATE TABLE stu
  5. (
  6.     学号 CHAR(4) PRIMARY KEY,
  7.                 姓名 CHAR(8),
  8.                 性别 CHAR(2),
  9.                 出生日期 DATE
  10. );
  11. DESC stu;
  12. 2. 创建表sc,并同时创建约束,表结构及约束要求如表A-8所示。设置(学号,课号)为主键。
  13. CREATE TABLE sc
  14. (    学号 CHAR(4) NOT NULL,
  15.      课号 CHAR(4) NOT NULL,
  16.                  成绩 DECIMAL(5,2) CHECK (成绩 BETWEEN 0 AND 100),
  17.                  PRIMARY KEY(学号,课号),
  18.                  CONSTRAINT fk_sno FOREIGN KEY (学号) REFERENCES stu(学号)
  19. );
  20. DESC sc;
  21. 3. 创建表 course,并同时创建约束,表结构及约束要求如表A-9所示。
  22. CREATE TABLE course
  23. (
  24.                  课号 CHAR(4) NOT NULL,
  25.                  课名 CHAR(20),
  26.                  学分 INT,
  27.                  CONSTRAINT uq_cname UNIQUE(课名)
  28. );
  29. DESC course;
  30. 4. 在 course表的课号列上建立主键约束。
  31. ALTER TABLE course
  32. ADD PRIMARY KEY(课号);
  33. DESC course;
  34. 5. 在 sc 表的课号列上建立外键约束 fk_cno,参照 course 表中课号列的取值,要求实现级联更新。
  35. ALTER TABLE sc
  36. ADD CONSTRAINT fk_cno FOREIGN KEY(课号)REFERENCES course(课号)
  37. ON UPDATE CASCADE;
  38. 6. 在stu 表的姓名列上建立唯一约束名 uq_sname。
  39. ALTER TABLE stu
  40. ADD CONSTRAINT uq_sname UNIQUE(姓名);
  41. DESC stu;
  42. 7.在 course表的学分列上建立检查约束 ckxf,检查条件为学分>0。
  43. ALTER TABLE course
  44. ADD CONSTRAINT ck_xf CHECK(学分>0);
  45. 8. 删除sc 表的外键约束 tk_cno、tk_sno。
  46. ALTER TABLE sc
  47. DROP FOREIGN KEY fk_cno;
  48. ALTER TABLE sc
  49. DROP FOREIGN KEY fk_sno;
  50. 9.删除 stu 表的主键约束。
  51. ALTER TABLE stu
  52. DROP PRIMARY KEY;
  53. 10. 删除 course 表的唯一约束 uq_cname。
  54. ALTER TABLE course
  55. DROP INDEX uq_cname;
  56. 11. 创建测试表 test,它包含一个字段 date_time,字段类型为 VARCHAR(50)。
  57.     创建触发器 test_trig,实现在stu表中每插人一条学生记录自动在 test 表中追加一条插人成功时的日期时间。
  58.     SYSDATE()函数用来获取当前的日期和时间。
  59.                 为stu 表插入一条记录引发触发器,查看 test 表中的内容。
  60. CREATE TABLE test
  61. (
  62.      date_time VARCHAR(50)
  63. );
  64. CREATE TRIGGER test_trig
  65. AFTER INSERT
  66. ON stu
  67. FOR EACH ROW
  68. INSERT INTO test VALUES(SYSDATE());
  69. INSERT INTO stu VALUES('1','Marry','F','1999-04-09');
  70. SELECT * FROM test;
  71. 12. 在 course表上创建触发器del_trig,当 course 表上删除一门课程时,级联删除 sc 表中该课程的记录。
  72.     删除 course 表中的一条记录,查看 sc 表中的相应记录是否被自动删除。
  73. CREATE TRIGGER del_trig
  74. AFTER DELETE ON course
  75. FOR EACH ROW
  76. DELETE FROM SC WHERE 课号=OLD.课号;
  77. DELETE FROM course WHERE 课号='1';
  78. SELECT*FROM SC;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表