MySQL课后作业、MySQL查询语句练习45题、MySQL50道题目练习
1.MySQL课后作业 0718 第三章
代码如下:
#创建客户信息表(customer)
create table customer
(
cid int primary key auto_increment, #客户编号
cname varchar(20) #名称
);
#查看表结构(表中数据类型信息)
desc customer;
#插入数据 #错误写法:insert table customer...
insert customer #insert [into](可省略) customer...
(cname)
values
('李四'),
('王五'),
('张三');
#查看表中数据
select * from customer;
#创建种类表(kind)
create table kind
(
kid int primary key auto_increment, #种类编号
kname varchar(20) not null#名称
);
desc kind;
insert kind
(kname)
values
('汉堡'),
('小食'),
('饮品');
select * from kind;
#创建食物表(food)
create table food
(
fid int primary key auto_increment, #食物编号
fname varchar(20), #名字
price decimal(5,2), #单价
kid int, #食品种类(外键)
foreign key(kid) references kind(kid)
);
desc food;
insert food
(fname,price,kid)
values
('鸡翅',9.502,2),
('鸡腿堡',5.00,1),
('可乐',5.00,3),
('奶茶',5.00,3),
('牛肉堡',6.50,1),
('薯条',8.00,2),
('香辣堡',4.51,1);
select * from food;
#创建点餐明细表
create table details
(
detailsId int primary key auto_increment, #点餐编号
cid int not null, #客户编号(外键)
foreign key(cid) references customer(cid), #注意 , 的存在
fid int not null, #食物编号(外键)
foreign key(fid) references food(fid),
qty int #点餐数量
);
desc details;
insert details
(cid,fid,qty)
values
(1,1,1),
(1,2,2),
(1,4,1),
(2,5,1),
(2,6,2),
(3,3,2),
(3,7,1);
select * from details;
-- 题目: 1.每种分类都有哪些食品(分类名称,食品名称,分类价格)
-- 2.使用点餐明细表,查询点餐客人名称,食品名称,食品价格,数量
-- 3.查询每个客人点餐的总金额
-- 4.查询每种食品分类的,点餐总金额
#1.每种分类都有哪些食品(分类名称,食品名称,分类价格)
select k.kname 分类名称,
f.fname 食物名称,
f.price 分类价格
from kind k
join food f
on k.kid=f.kid;
#2.使用点餐明细表,查询点餐客人名称,食品名称,食品价格,数量
select c.cname 点餐客人名称,
f.fname 食品名称,
f.price 食品价格,
d.qty 点餐数量
from details d
join food f on d.fid=f.fid #注意这里不加 , !!!
join customer c on d.cid=c.cid;
#3.查询每个客人点餐的总金额
#select c.cname 点餐客人名称,
# ((f.price)*(d.qty)) 每项点餐金额
#from details d
#join food f on d.fid=f.fid #注意这里不加 , !!!
#join customer c on d.cid=c.cid;
select c.cname 点餐客人名称,
sum((f.price)*(d.qty)) 点餐总金额 #注意sum() 在分组group by时使用!!!
from details d
join food f on d.fid=f.fid #注意这里不加 , !!!
join customer c on d.cid=c.cid
group by c.cname; #注意group by的位置,在join..c on..之后
#4.查询每种食品分类的,点餐总金额(解法和上题3同理)
select k.kname 食品种类名称,
sum((f.price)*(d.qty)) 点餐总金额
from kind k
join food f on k.kid=f.kid
join details d on f.fid=d.fid #这里与上题3不同,这里需要是中间表连接的
group by k.kname;
2.MySQL查询语句练习45题
参考:MySQL查询语句练习题45题版
https://blog.csdn.net/weixin_39718665/article/details/78161013
本文仅为学习总结,方便自己查看,如有侵权请联系删除
表关系分析:
查询操作思路:
#写完之后备注 及对应的知识点
#创建表
create table student
(
sno varchar(20) primary key not null,
sname varchar(20) not null,
ssex varchar(20) not null,
sbirthday date, ##1974-06-03 #这里我们使用date,显示年月日信息足以满足我们的需要
#sbirthday datetime, #1974-06-03 00:00:00
class varchar(20)
);
desc student;
create table teacher
(
tno varchar(20) primary key not null,
tname varchar(20) not null,
tsex varchar(20) not null,
tbirthday date,
prof varchar(20),
depart varchar(20) not null
);
desc teacher;
create table course
(
cno varchar(20) primary key not null,
#con varchar(20) not null,
cname varchar(20) not null,
tno varchar(20) not null,
#注意,有一个外码必须有一个主码与之对应。亦即从表的外码对应主表的主码
foreign key(tno) references teacher(tno)
);
desc course;
create table score
(
sno varchar(20) not null,
foreign key(sno) references student(sno),
cno varchar(20) not null,
foreign key(cno) references course(cno),
degree decimal(4,1)
);
desc score;
#添加信息
#添加学生信息
insert into student
values
('108','曾华','男','1977-09-01','95033'),
('105','匡明','男','1975-10-02','95031'),
('107','王丽','女','1976-01-23','95033'),
('101','李军','男','1976-02-20','95033'),
('109','王芳','女','1975-02-10','95031'),
('103','陆君','男','1974-06-03','95031');
#查看数据
select * from student;
#添加教师表
insert into teacher
values
('804','李诚','男','1958-12-02','副教授','计算机系'),
('856','张旭','男','1969-03-12','讲师','电子工程系'),
('825','王萍','女','1972-05-05','助教','计算机系'),
('831','刘冰','女','1977-08-14','助教','电子工程系');
select * from teacher;
#添加课程表
insert into course
values
('3-105','计算机导论','825'),
('3-245','操作系统','804'),
('6-166','数字电路','856'),
('9-888','高等数学','831');
select * from course;
#添加成绩表
insert into score
values
('103','3-245','86'),
('105','3-245','75'),
('109','3-245','68'),
('103','3-105','92'),
('105','3-105','88'),
('109','3-105','76'),
('103','3-105','64'),
('105','3-105','91'),
('109','3-105','78'),
('103','6-166','85'),
('105','6-166','79'),
('109','6-166','81');
select * from score;
#查询表中数据
-- 1.查询student表中所有记录的sname,ssex,class列。
select sname 学生姓名,
ssex 性别,
class 班级
from student;
-- 2.查询教师所在的所有的部门(不重复),即depart列。
select distinct depart 部门
from teacher;
#select distinct depart as 部门
#from teacher;
-- 3.查询student表中的所有信息。
select
*
from student;
-- 4.查询score表中成绩在60到80之间的所有记录。
select degree
from score
where degree>60 and degree<80;
-- 5.查询score表中成绩为85,86或88的记录。
select
*
from score
where degree in (85,86,88);
-- 5.1查询score表中成绩为85,86或88的学生记录。(扩展)
select stu.sname 姓名,
c.cname 科目,
s.degree 成绩
from score s
join student stu on s.sno=stu.sno
join course c on s.cno=c.cno
where degree in (85,86,88);
-- 6.查询student表中'95031'班或性别为'女'的同学记录。
select
*
from student
where class='95031' or ssex='女';
-- 7.以class降序查询student表中的所有记录。
select
*
from student
order by class desc;
-- 8.以cno升序,degree降序查询score表中的所有记录。
select
*
from score
#order by cno asc,degree desc;
order by cno,degree desc;
-- 9.查询'95031'班的学生人数。
select count(*)
from student
where class='95031';
-- 10.查询score表中的最高成绩的学生学号和课程号。
#排序实现
select stu.sno 学号,
c.cno 课程号,
degree 最高成绩
from score s
join student stu on s.sno=stu.sno
join course c on s.cno=c.cno
order by s.degree desc #排序(倒序)
limit 0,1; #分页
#子查询实现
select stu.sno 学号,
c.cno 课程号,
degree 最高成绩
from score s
join student stu on s.sno=stu.sno
join course c on s.cno=c.cno
where degree=(select max(degree)from score); #子查询
-- 校验
select * from score;
select * from student;
3.MySQL50道题目练习
参考:MySQL50道题目练习
https://zhuanlan.zhihu.com/p/52173860
本文仅为学习总结,方便自己查看,如有侵权请联系删除
// A code block
var foo = 'bar';
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118107.html