mysql 练习题

mysql 练习题一、上机内容使用SQL语句创建数据库studentsdb。、Createdatabasestudentdb;2.使用SQL语句选择studentsdb为当前使用数据库。Usestudentdb;3.使用SQL语句在studentsdb数据库创建数据表student_info、curriculum、grade,三个表的数据结构如表1-表3所示。createtablestude…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、上机内容

  1. 使用SQL语句创建数据库studentsdb。、
    Create database studentdb;
    2.使用SQL语句选择studentsdb为当前使用数据库。
    Use studentdb;
    3.使用SQL语句在studentsdb数据库创建数据表student_info、curriculum、grade,三个表的数据结构如表1-表3所示。
    create table student_info
    (
    s_id char(4) not null,
    s_name varchar(8) not null,
    s_sex char(2) ,
    s_birthday date,
    s_address varchar(50) default ‘无’,
    primary key(s_id),
    constraint sex_ck check(s_sex=‘男’ or s_sex=‘女’)
    )DEFAULT CHARSET=UTF8;
    create table curriculum(
    c_id char(4) not null primary key,
    c_name varchar(50) ,
    c_credit int

)DEFAULT CHARSET=UTF8;
create table grade(
s_id char(4) not null,
c_id char(4) not null,
g_score int ,
primary key(s_id,c_id)
)default charset=utf8;
表1 student_info表结构
列名 数据类型 允许NULL值 主键
学号 char(4) 否 是
姓名 char(8) 否 否
性别 char(2) 是 否
出生日期 date 是 否
家族住址 varchar(50) 是 否
表2 curriculum表结构
列名 数据类型 允许NULL值 主键
课程编号 char(4) 否 是
课程名称 varchar(50) 是 否
学分 int 是 否

表3 grade表结构

列名 数据类型 允许NULL值 主键
学号 char(4) 否 是
课程编号 char(4) 否 是
分数 int 是 否

4.使用SQL语句INSERT向studentsdb数据库的student_info、curriculum、grade表插入数据,各表数据如表4-表6所示。
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0001”,”张青平”,”男”,’2000-10-01’,”衡阳市东风路77号”);’
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0002”,”刘东阳”,”男”,’1998-12-09’,”东阳市八一北路33号”);
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0003”,”马晓夏”,”女”,’1995-05-12’,”长岭市五一路763号”);
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0004”,”钱忠理”,”男”,’1994-09-23’,”滨海市洞庭大道279号”);
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0005”,”孙海洋”,”男”,’1995-04-03’,”长岛市解放路27号”);
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0006”,”郭小斌”,”男”,’1997-11-10’,”南山市红旗路113号”);
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0007”,”肖月玲”,”男”,’1996-12-07’,”东方市南京路11号”);
Insert into student_info (s_id,s_name,s_sex,s_birthday,s_address) values (“0008”,”张玲珑”,”女”,’1997-12-24,”滨江市新建路97号”);

表4 student_info表的数据
学号 姓名 性别 出生日期 家族住址
0001 张青平 男 2000-10-01 衡阳市东风路77号
0002 刘东阳 男 1998-12-09 东阳市八一北路33号
0003 马晓夏 女 1995-05-12 长岭市五一路763号
0004 钱忠理 男 1994-09-23 滨海市洞庭大道279号
0005 孙海洋 男 1995-04-03 长岛市解放路27号
0006 郭小斌 男 1997-11-10 南山市红旗路113号
0007 肖月玲 女 1996-12-07 东方市南京路11号
0008 张玲珑 女 1997-12-24 滨江市新建路97号

表5 curriculum表的数据

课程编号 课程名称 学分
0001 计算机应用基础 2
0002 C语言程序设计 2
0003 数据库原理及应用 2
0004 英语 4
0005 高等数学 4
表6 grade表的数据
学号 课程编号 分数
0001 0001 80
0001 0002 91
0001 0003 88
0001 0004 85
0001 0005 77
0002 0001 73
0002 0002 68
0002 0003 80
0002 0004 79
0002 0005 73
0003 0001 84
0003 0002 92
0003 0003 81
0003 0004 82
0003 0005 75

5.使用SQL语句ALTER TABLE修改curriculum表的“课程名称”列,使之为空。
alter table curriculum modify “课程名称” varchar(50) null;
update curriculum set “课程名称 =null;
6.使用SQL语句ALTER TABLE修改grade表的“分数”列,使其数据类型为decimal(5,2)。
Alter table grade modify grade demical(5,2);
7.使用SQL语句ALTER TABLE为student_info表添加一个名为“备注”的数据列,其数据类型为varchar(50)。
Alter table student_info add(“备注” varchar(50));
8.使用SQL语句创建数据库studb,并在此数据库下创建表stu,表结构与数据与studentsdb的student_info表相同。
Create database studb;
Use studb;
Create table stu as select *from studentdb…student_info where 1=2;
9.使用SQL语句删除表stu中学号为0004的记录。
Delete from stu where 学号=’0004’;
10.使用SQL语句更新表stud中学号为0002的家庭住址为“滨江市新建路96号”。
update stud set address = ‘滨江市新建路96号’ where ID=0002;
11.删除表stud的“备注”列。
Alter table stud drop column ‘备注’;
12.删除表stud。
Drop table stud;
13.删除数据库studb。
Drop database studb;
二、实验思考

  1. 能通过一个CREATE DATABASE语句创建两个及以上的数据库吗?
    不能
    2.删除了的数据库还极可能恢复吗?
    有可能,要是数据库自动备份过可以通过备份恢复
    3.对于studentsdb数据库的student_info表而言,如果输入相同学号的记录将出现什么现象?为什么?
    报错,因为学号是主键,不允许有重复;

  2. 已经打开的表能删除吗?
    不能
    一、上机内容

  3. 在studentsdb数据库中使用SELECT语句进行基本查询。
    (1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。
    Select 学号,姓名,出生日期 from student_info;
    (2)查询student_info表学号为 0002的学生的姓名和家庭住址。
    Select 姓名,地址 from student_info where s_id=’0002’;
    (3)查询student_info表所有出生日期在95年以后的女同学的姓名和出生日期。
    Selec 姓名,出生日期 from student_info where year(s_birthday)>1995;

  4. 使用select语句进行条件查询。
    (1)在grade表中查询分数在70-80范围内的学生的学号、课程编号和成绩。
    Select 学号 ,课程编号,成绩 from grade where 成绩 between 70 and 80;
    (2)在grade表中查询课程编号为0002的学生的平均成绩。
    Select 姓名,round(avg(成绩),1) 平均成绩 from grade where 课程编号=‘0002’;
    (3)在grade表中查询选修课程编号为0003的人数和该课程有成绩的人数。
    Select count() 人数 from grade where 课程编号=‘0003’;
    Select count(
    ) 人数 from graede where 课程编号=‘0003’and 成绩<>“”;
    (4)查询student_info的姓名和出生日期,查询结果按出生日期从大到小排序。
    Select 姓名,出生日期 from student_info order by 出生日期 desc;
    (5)查询所有姓名“张”的学生的学号和姓名。
    Select 学号,姓名 from grade where 姓名=“张%”;
    4.对student_info表,查询学生的学号、姓名、性别、出生日期及家庭住址,查询结果先按照性别的由小到大排序,性别相同的再按学号由大到小排序。
    Select 学号,姓名,性别,出生日期,家庭住址 from student_info order by 性别,学号 desc;
    5.使用GROUP BY子句查询grade表中各个学生的平均成绩。
    Select 姓名,round(avg(成绩),1) 平均成绩 from grade group by 姓名;
    6.使用UNION运算符针student_info表中姓“刘”的学生的学号、姓名与姓“张”的学生的学号、姓名返回在一个表中。
    Select 学号,姓名from student_info where 姓名=“刘%”union Select 学号,姓名from student_info where 姓名=“张%”

  5. 嵌套查询
    (1)在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期。
    7.Select 姓名,出生日期 from student_info where 性别=(select 性别 from student_info where 姓名=“刘东阳”;
    (2)使用IN子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。
    Select 学号,姓名,性别 from student_info where 课程编号 in (“0002”,“0005”);
    (3)使用ANY子查询查找学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和分数。
    Select 课程编号,分数 from student_info where 分数=’0001‘ and (select 分数 from student_info where 学号=’0001’)<any(select select 分数 from student_info where 学号=’0002’ );
    (4)使用ALL子查询查找学号为0001的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数。
    Select 课程编号,分数from student_info where 分数=’0001‘ and (select 分数 from student_info where 学号=’0001’)<any(select select 分数 from student_info where 学号=’0002’ );

  6. 连接查询
    (1)查询分数在80-90范围内的学生的学号、姓名、分数。
    Select grade.g_score,student.s_name,student.s_id from student s,grade g where s.s_id=g.s_id and g.g_score between 80 and 90;
    (2)使用INNER JOIN连接方式查询学习“数据库原理及应用”课程的学生学号、姓名、分数。
    Select grade.g_score,student.s_name,student.s_id,course.c_name from student s,grade g ,course c where s.s_id=g.s_id and c.c_id=g_c_id and c.c_name=”数据库原理及应用”;

(3)查询每个学生所选课程的最高成绩,要求列出学号、姓名、最高成绩。
Select student.s_id,student.s_name,max(grade.g_score)最高成绩 from student s,grade g where s.s_id=g.s_id group by s.s_name;
(4)使用左外连接查询每个学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。
Selcet student.s_id ,student.s_name,sun(g_score) 总成绩 from student s left join grade g on s.s_id=g.g_id group by s.s_id;
(5)为grade表添加数据行:学号为0004、课程编号为0006、分数为76。
Insert into grade (s_id,c_id ,g_score) values (“0004”,”0006”,76);
使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。
Select c_id,c_name,count(*) 选修人数,from grade g right join curriculum c on g.c_id=c.c_id group by g.c_id;
二、实验思考

  1. 查询所有没有选修课程的学生的学号、姓名。
    Select grade.s_id,student.s_name from student s,grade g where s.s_id=g.s_id and g_score is not null;
    2.查询选修课程的人数。
    select count() from(select count() FROM grade GROUP BY s_id) s;
    3.查询选课人数大于等于3人的课程编号、课程名称、人数。
    Select g.c_id,c.c_name,count() from grade g,course c where g.c_id=c.c_id group by g.c_id having count()>3;
    4.在查询的FROM子句中实现表与表之间的连接有哪几种方式?对应的关键字分别是什么?
    3种
    内连接 inner outer join;
    左连接 left outer join;
    右连接 right outer join;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192179.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hfe和HFE_hfe参数

    hfe和HFE_hfe参数Mako:我们已经学习了有关晶体管的工作原理,晶体管的放大作用就是由小的输入得到大的输出吧?Doc:这种说法还稍微有点欠缺,应该说成用小的输入控制大的输出更为合适。如果只关注晶体管的电流,就可以这样考

    2022年8月3日
    10
  • GIMP 2.10教程「建议收藏」

    GIMP 2.10教程「建议收藏」更新一下(2020-12-27),有大神刚完成人工翻译,质量很好,地址在此:https://www.ycproject.cn/gimp/gimp.html下文可以忽略了GIMP_2.10中文教程(谷歌机翻)GIMP是全平台(桌面)下的Photoshop,专门处理图片的。先放原文地址:https://docs.gimp.org/2.10/zh_CN/(基于2.10.18版)GIMP中文教程太少了,搜了一大圈找到一个靠谱点全一点的,是@笨⼩璀在2014年基于2012年的2.8版翻译的,翻译

    2022年6月17日
    26
  • 分治算法详解_算法的优劣通常用什么来衡量

    分治算法详解_算法的优劣通常用什么来衡量分治算法详解 一、基本概念  在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……   任何一个可以用计算机求解的问

    2025年8月14日
    2
  • rsync备份大量数据_SnapShot能做增量备份吗

    rsync备份大量数据_SnapShot能做增量备份吗文章目录一、rsync简介二、实验过程三、rsync命令四、编译安装包下载一、rsync简介  sync是一个常用的Linux应用程序,用于文件同步。它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。  它名称里面的r指的是remote,rsync其实就是“远程同步”(remotesync)的意思。与其他文件传输工具(如FTP或scp)不同,rsync的最大特点是

    2022年10月13日
    2
  • 如何理解java方法的传值和传引用的参数传递方式_指针参数传递

    如何理解java方法的传值和传引用的参数传递方式_指针参数传递结论:1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值2)当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;3)当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区例一:基本数据类型作为形参,运行结果不改变实参publicclassMain{publicstatic

    2022年8月30日
    9
  • 商业银行业务架构图模板_我国商业银行组织架构

    商业银行业务架构图模板_我国商业银行组织架构 

    2022年10月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号