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;
对学生基本信息表xsjbxxb的xm和bjbh字段,建立复合索引index_xm_bjbh,并验证索引的建立。
Create index index_xm_bjbh on xsjbxxb(xm,bjbh);
Show index from xsjbxxb;
对部门代码表bmdmb的部门名称bmmc字段,建立唯一降序索引index_bmmc,并验证索引的建立。
Create unique index index_bmmc on bmdmb(bmmc desc);
Show index from bmdmb;
删除索引index_bmmc。
Drop index index_bmmc on bmdmb;
标签:练习题,xh,mysql,kcdm,c203,上半,xsxkb,xsjbxxb,select From: https://www.cnblogs.com/mhyweb/p/17917405.html