首页 > 数据库 >c203数据库练习题上半

c203数据库练习题上半

时间:2023-12-20 20:24:19浏览次数:32  
标签:练习题 xh mysql kcdm c203 上半 xsxkb xsjbxxb select

1.使用SQL语言创建满足以下要求的数据库。

(1)创建数据库名称为jwgl,字符集选择utf8,排序规则选择utf8_general_ci。

create database jwgl character set utf8 collate utf8_general_ci;

(2)查看数据库。

show databases;

(3)将数据库jwgl的指定字符集修改为gb2312。

mysql> alter database jwgl

-> default character set gb2312;

(4)删除数据库jwgl。

drop database jwgl;

3.使用SQL语言查看数据库存储引擎。

mysql> show engines;

(6).创建kc表

mysql> CREATE TABLE kc

-> (

-> kch char(4) NOT NULL PRIMARY KEY,

-> kcm char(20),

-> xss int,

-> xf int);

(7).①增加“成绩”一列cj,类型是int,允许空值。默认为0。

mysql> alter table kc add column cj int default 0;

②修改cj列的类型为char。

mysql> alter table kc change column cj cj char(4);

③修改cj列名为mark。

mysql> alter table kc change column cj mark char(4) default 0;

④删除mark列。

mysql> alter table kc drop column mark;

(8).删除表kc。

mysql> drop table kc;

(9).将表xs重命名为Student。

mysql> rename table xsgl.xs to xsgl.Student;

1.根据学生基本信息表(xsjbxxb)和学生选课表(xsxkb)创建学生表(xsb)和课表(xkb)。

use jwgl;

create table xsb as select * from xsjbxxb;

create table xkb as select * from xsxkb;

2. 根据xsb表和xbk表,完成以下各题。

(1)对xsb表的xh字段添加单一主键,对xkb表的xh和kcdm字段创建复合主键。

alter table xsb modify xh varchar(20) primary key;

alter table xkb add primary key(xh,kcdm);

(2)对xkb表的xh字段创建外键约束,建立xsb表和xkb表的关联关系。

alter table xkb add foreign key(xh) references xsb(xh);

(3)针对xsb表的xm,bjbh,xy字段添加非空约束。

alter table xsb modify xm varchar(50) not null;

alter table xsb modify bjbh varchar(20) not null;

alter table xsb modify xy varchar(10) not null;

(4)针对xsb表的xm字段添加唯一性约束。

alter table xsb modify xm varchar(50) unique;

(5)针对xsb表的xb字段添加检查约束,要求只能取值男或女。

alter table xsb add check(xb in ("男","女"));

(6)针对xsb表的xb字段添加默认值:男。

alter table xsb modify xb char(2) default "男";

(7)删除创建的外键约束。

show create table xkb;

alter table xkb drop foreign key xkb_ibfk_1;

(8)删除创建的主键约束。

alter table xsb drop primary key;

(9)删除创建的唯一性约束。

show index from xsb;

alter table xsb drop index xm;

(10)删除创建的非空约束。

alter table xsb modify xm varchar(50);

alter table xsb modify bjbh varchar(20);

alter table xsb modify xy varchar(10);

(11)删除创建的默认值约束。

alter table xsb modify xb char(2);

(12)删除创建的检查约束。

show create table xsb;

alter table xsb drop check xsb_chk_1;

1.无条件查询:

(1)查询课程代码表的数据。(5分)

mysql>select * from kcdmb;

(2)在学生基本信息表中查询每个学生的姓名及专业信息。(5分)

mysql> select xm,zymc from xsjbxxb;

2. 条件查询

(1)查询学生基本信息表中男生的基本信息。(5分)

mysql> select * from xsjbxxb where xb ='男';

(2)查询2000年出生的女生的信息。(5分)

mysql> select * from xsjbxxb where year(csrq) =2000 and xb ='女';

(3)查询考试成绩在80~90分之间的学生学号、课程号和成绩。(5分)

mysql> select xh,kcdm,cj from xsxkb where cj between 80 and 90;

(4)查询选修了课程代码00202117或00202118学生选课信息。(5分)

mysql> select * from xsxkb where kcdm in('00202117','00202118');

(5)查询选修了课程名中包含了“数据库”的选课信息。(5分)

mysql> select xh,xk.kcdm,cj

-> from xsxkb as xk join kcdmb

-> on xk.kcdm=kcdmb.kcdm

-> where kcmc like '%数据库%';

(6)查询学号为201820107101的学生的课程选课信息,输出学号和平均成绩。(5分)

mysql> select xh ,avg(cj) as 平均成绩

-> from xsxkb

-> where xh='201820107101';

(7)查询考试成绩前3名的选课信息。(5分)

mysql> select * from xsxkb order by cj desc limit 3;

(8)查询教师基本信息表的第3至6条记录。(5分)

mysql> select * from jsjbxxb limit 2,4;

(9)查询每门课程的平均成绩,并显示平均成绩最高的前3门课程的课程代码,课程名称,平均成绩。(10分)

mysql> select xsxkb.kcdm,kcdmb.kcmc,avg(xsxkb.cj) as '平均成绩'

-> from xsxkb,kcdmb

-> where xsxkb.kcdm=kcdmb.kcdm

-> group by xsxkb.kcdm

-> order by avg(xsxkb.cj) desc

-> limit 3;

或者:

mysql> select xsxkb.kcdm,kcmc, avg(cj) as平均成绩

-> from xsxkb join kcdmb

-> on xsxkb.kcdm=kcdmb.kcdm

-> group by xsxkb.kcdm

-> order by 3 desc

-> limit 3;

(10)统计每个学生的成绩平均分,并按平均成绩降序排序。(10分)

mysql> select xh,avg(cj) as 平均成绩

-> from xsxkb

-> group by xh

-> order by 2 desc;

(11)统计学生基本信息表中女生的人数。(10分)

mysql> select xb as 性别,count(*) as 人数

-> from xsjbxxb

-> where xb='女';

(12)按性别分组,求每组学生的平均年龄。(10分)

mysql> select xb as 性别,avg(year(now())-year(csrq)) as 平均年龄

-> from xsjbxxb

-> group by xb;

(13)查找选修课程超过2门且每门成绩都在80分以上的学生的学号。(10分)

mysql> select xh as 学号, count(*) as 选课人数

-> from xsxkb

-> group by xh

-> having count(*)>2 and min(cj)>80;

1、按照要求使用连接查询进行以下操作。

(1)查找学生基本信息表中年龄最大的男生的所有信息。

mysql> select * from xsjbxxb

-> where xb = '男'

-> order by age desc

-> limit 1;

查询学生的选课信息,输出学号,姓名,课程名称,成绩。

mysql> select xs.xh,xm,kcmc,cj

-> from xsjbxxb as xs join xsxkb on xs.xh=xsxkb.xh

-> join kcdmb on xsxkb.kcdm=kcdmb.kcdm

-> ;

统计每个学生的成绩平均分,输出学号,姓名,平均成绩。

mysql> select xs.xh,xm,avg(cj) as 平均成绩

-> from xsjbxxb as xs,xsxkb

-> where xs.xh=xsxkb.xh

-> group by xs.xh;

统计每门课程的平均成绩,输出课程编码,课程名称,平均成绩。

mysql> select kcdmb.kcdm, kcmc, avg(cj) as 平均成绩

-> from kcdmb join xsxkb

-> on kcdmb.kcdm=xsxkb.kcdm

-> group by kcdm;

查询每个学生选修的课程成绩信息,要求显示学号,姓名,课程代码,成绩。

mysql> select xs.xh,xm,kcdm,cj

-> from xsjbxxb as xs join xsxkb

->on xs.xh=xsxkb.xh;

查询每个学生选修的课程成绩信息,要求只显示成绩在90分(包含90)以上的学生的学号,姓名,课程名称,成绩。

mysql> select xs.xh,xm,kcmc,cj

-> from xsjbxxb as xs join xsxkb on xs.xh=xsxkb.xh

-> join kcdmb on xsxkb.kcdm=kcdmb.kcdm

-> where cj >=90;

查询每个学生选修的课程成绩信息,要求只显示平均成绩在90分(包含90)以上的学生的学号,姓名,课程名称,成绩。

select xs.xh,xm,kcmc,cj

from xsjbxxb as xs join xsxkb on xs.xh=xsxkb.xh

join kcdmb on xsxkb.kcdm=kcdmb.kcdm

group by xsxkb.xh

having avg(cj)>=90;

或者:使用子查询

select xs.xh,xm,kcmc,cj

from xsjbxxb as xs ,xsxkb,kcdmb

where xs.xh=xsxkb.xh

and xsxkb.kcdm=kcdmb.kcdm

and xs.xh in(select xh from xsxkb group by xh having avg(cj)>=90)

;

查看每个同学的选课信息,包括未选课的学生信息,要求显示学号,姓名,课程代码,成绩。

mysql> select xs.xh,xm,kcdm,cj

-> from xsjbxxb as xs left join xsxkb

-> on xs.xh = xsxkb.xh; -> ;

查看每门课程的选课信息,包括没有人选修的课程,要求只显示课程代码,课程名,成绩。

mysql> select xsxkb.kcdm, kcmc,cj

-> from kcdmb left join xsxkb

-> on kcdmb.kcdm = xsxkb.kcdm;

2、按照要求使用union进行查询。

(10)查找学号为201820919102和学号为201820511102的两位同学的信息。

mysql> select *

-> from xsjbxxb

-> where xh='201820919102'

-> union

-> select *

-> from xsjbxxb

-> where xh='201820511102'

-> ;

3、按照要求使用子查询进行以下操作。

(11)查找电子信息工程平均成绩在70上的学生的学号和平均成绩。

mysql> select xh,avg(cj) as '平均成绩'

-> from xsxkb

-> where xh in

-> (select xh from xsjbxxb where zymc='电子信息工程')

-> group by xh

-> having avg(cj)>=70;

(12)查找与学号为201820917101学生性别相同、专业相同的学生学号和姓名。

select xh,xm

from xsjbxxb as xs1

where exists(select * from xsjbxxb as xs2

where xs2.xb=xs1.xb and xs2.zymc=xs1.zymc

and xs2.xh='201820917101')

and xs1.xh!='201820917101';

(13)从xsjbxxb表中查找所有女学生的姓名、学号,以及与学号为201820917101的学生的年龄差距。

mysql> select xm,xh,

-> year(csrq)-(select year(csrq) from xsjbxxb where xh='201820917101') as 年龄差

-> from xsjbxxb

-> where xb='女';

(14)查找选修了全部课程的同学的姓名。

mysql> select xm

-> from xsjbxxb

-> where not exists

-> (

-> select *

-> from kcdmb

-> where not exists

-> ( select *

-> from xsxkb

-> where xh=xsjbxxb.xh and kcdm=kcdmb.kcdm

-> )

-> );

或者

mysql> select xm from xsjbxxb

-> where xh in

-> (select xh from xsxkb where kcdm=all

-> (select kcdm from kcdmb));

(15)查找选修了课程代码为00202118的课程的学生姓名。

mysql> select xm

-> from xsjbxxb

-> where xh in(

-> select xh from xsxkb where kcdm='00202118');

(16)查找选修了计算机接口技术的学生学号,姓名。

mysql> select xh,xm

-> from xsjbxxb

-> where xh in(select xh from xsxkb

-> where kcdm in

-> (select kcdm from kcdmb where kcmc='计算机接口技术'));

(17)查找xsjbxxb表中,比所有土木工程专业的学生年龄都大的学生学号、姓名、专业名称、出生日期字段。

mysql> select xh,xm,zymc,csrq

-> from xsjbxxb

-> where csrq<all(select csrq from xsjbxxb where zymc='土木工程');

4、按照要求使用正则表达式进行以下操作。

(18)查询姓李的学生的学号、姓名和专业名称。

mysql> select xh, xm, zymc

-> from xsjbxxb

-> where xm regexp '^李' ;

查询学号里包含4、5、6的学生学号、姓名和专业名。

mysql> select xh, xm, zymc

-> from xsjbxxb

-> where xh regexp '4|5|6' ;

或者mysql> select xh,xm,zymc

-> from xsjbxxb

-> where xh regexp '[4-6]';

查询学号以2018开头,以101结尾的学生学号、姓名和专业名称。

mysql> select xh, xm, zymc

-> from xsjbxxb

-> where xh regexp '^2018' and xh regexp '101$' ;

或者mysql> select xh,xm,zymc

-> from xsjbxxb

-> where xh regexp '^2018.*101$';

1、索引练习

(1)对学生基本信息表xsjbxxb的籍贯jg字段,建立全文索引index_jg,并验证索引的建立。

Create fulltext index index_jg on xsjbxxb(jg);

Show index from xsjbxxb;

QQ图片20231115085839

对学生基本信息表xsjbxxb的xm和bjbh字段,建立复合索引index_xm_bjbh,并验证索引的建立。

Create index index_xm_bjbh on xsjbxxb(xm,bjbh);

Show index from xsjbxxb;

QQ图片20231115085832

对部门代码表bmdmb的部门名称bmmc字段,建立唯一降序索引index_bmmc,并验证索引的建立。

Create unique index index_bmmc on bmdmb(bmmc desc);

Show index from bmdmb;

QQ图片20231115085846

删除索引index_bmmc。

Drop index index_bmmc on bmdmb;

标签:练习题,xh,mysql,kcdm,c203,上半,xsxkb,xsjbxxb,select
From: https://www.cnblogs.com/mhyweb/p/17917405.html

相关文章

  • 倍增基础练习题
    syoj806.序列翻转P6148[USACO20FEB]SwapitySwapitySwapS\(n\)个进行\(m\)次操作,每次操作将所给的\(l\)到\(r\)区间进行翻转。一共会重复\(k\)次上述操作。\(k<=1e9\)。倍增\(k\),设\(f[i][j]\)表示总操作重复\(2^i\)次后的序列。预处理时,转移方程为\(f[......
  • 十、练习题
    练习题......
  • PTA-2023第十三次练习题目题解
    PTA-2023第十三次练习题目题解以下代码已做防抄袭处理,切勿抄袭。注意:手机端因为屏幕限制,代码会有(不希望的)换行。解决方案:1.建议使用电脑端打开。2.点击代码进入全屏观看。6-25实验9_5_反向打印字符串思路就是每次先找到字符串的最后一位,然后输出这一位,输出之后将这一位改为‘......
  • C练习题——打印两个数的最大公约数
    算法一:暴力求解(效率不够)#include<stdio.h>intmain(){inta=0;intb=0;scanf("%d%d",&a,&b);intmin=a<b?a:b;while(1){if((a%min==0)&&(b%min==0))break;......
  • C练习题——打印第n个斐波那契数
    斐波那契数列:1123581321...规律:从第三个数开始,第n个数为前两数之和#include<stdio.h>intmain(){intn=0;scanf("%d",&n);inta=1;intb=1;intc=1;while(n>=3){c=a+b;a=b;......
  • PTA-2023第十二次练习题目题解
    PTA-2023第十二次练习题目题解(祝大家机考顺利)以下代码已做防抄袭处理,切勿抄袭。注意:手机端因为屏幕限制,代码会有(不希望的)换行。解决方案:1.建议使用电脑端打开。2.点击代码进入全屏观看。6-24实验8_3_设计函数利用冒泡排序的思想,将每一列的最小值放到每列的最后一个位置。voi......
  • PTA-2023第十一次练习题目讲解
    PTA-2023第十一次练习题目6-17实验7_9_简单排序法一:冒泡排序上课学过好多好多次,讲解略过,代码有注释。voidbubbleSort(intdata[],intelementCount){for(inti=0;i<elementCount-1;i++)//第一层循环,控制找最大值的次数{for(intj=0;j<elementCount-......
  • PTA|C语言|数组练习题
    --------------------------------------------------------------------------------求最大值及其下标本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式:在一行......
  • 练习题:观影大数据分析
    王S聪想要在海外开拓万D电影的市场,这次他在考虑:怎么拍商业电影才能赚钱?毕竟一些制作成本超过1亿美元的大型电影也会失败。这个问题对电影业来说比以往任何时候都更加重要。所以,他就请来了你(数据分析师)来帮他解决问题,给出一些建议,根据数据分析一下商业电影的成功是否存在......
  • C语言程序代码练习题
    1.#include<stdio.h>voidmain(){chargrade[10];printf("请输入您的成绩等级:");scanf("%s",grade);if(stricmp("A",grade))printf("成绩等级为A");elseif(stricmp("B",grade))printf("成绩等级为B");elseif(stric......