mysql 练习

一、最爱考的sql笔试题

大佬们___先活动活动颈椎
在这里插入图片描述

1.1 创建表及数据

/*
 Navicat MySQL Data Transfer

 Source Server         : 三丰153
 Source Server Type    : MySQL
 Source Server Version : 80018
 Source Host           : 43.226.148.253:3306
 Source Schema         : seata-test

 Target Server Type    : MySQL
 Target Server Version : 80018
 File Encoding         : 65001

 Date: 28/03/2021 10:18:44
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自动编号',
  `sno` bigint(20) NOT NULL COMMENT '学号',
  `name` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '学生姓名',
  `sex` int(2) NULL DEFAULT NULL COMMENT '1-男,2-女',
  `cno` bigint(20) NULL DEFAULT NULL COMMENT '课程号',
  `score` float(64, 0) NULL DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 63 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (36, 4, 'zhangsan4', 1, 2, 99);
INSERT INTO `student` VALUES (38, 5, 'zhangsan5', 1, 6, 47);
INSERT INTO `student` VALUES (40, 6, 'zhangsan6', 1, 7, 37);
INSERT INTO `student` VALUES (42, 5, 'zhangsan5', 1, 7, 98);
INSERT INTO `student` VALUES (43, 6, 'zhangsan6', 1, 1, 63);
INSERT INTO `student` VALUES (44, 1, 'zhangsan1', 1, 6, 81);
INSERT INTO `student` VALUES (45, 5, 'zhangsan5', 1, 1, 80);
INSERT INTO `student` VALUES (46, 3, 'zhangsan3', 1, 2, 99);
INSERT INTO `student` VALUES (47, 4, 'zhangsan4', 1, 1, 73);
INSERT INTO `student` VALUES (48, 4, 'zhangsan4', 1, 7, 53);
INSERT INTO `student` VALUES (49, 2, 'zhangsan2', 1, 1, 47);
INSERT INTO `student` VALUES (50, 4, 'zhangsan4', 1, 6, 85);
INSERT INTO `student` VALUES (51, 3, 'zhangsan3', 1, 1, 64);
INSERT INTO `student` VALUES (52, 5, 'zhangsan5', 1, 2, 53);
INSERT INTO `student` VALUES (53, 6, 'zhangsan6', 1, 2, 44);
INSERT INTO `student` VALUES (54, 6, 'zhangsan6', 1, 6, 77);
INSERT INTO `student` VALUES (55, 2, 'zhangsan2', 1, 7, 58);
INSERT INTO `student` VALUES (56, 3, 'zhangsan3', 1, 7, 97);
INSERT INTO `student` VALUES (57, 2, 'zhangsan2', 1, 6, 68);
INSERT INTO `student` VALUES (58, 2, 'zhangsan2', 1, 2, 59);
INSERT INTO `student` VALUES (59, 1, 'zhangsan1', 1, 1, 88);
INSERT INTO `student` VALUES (60, 1, 'zhangsan1', 1, 2, 84);
INSERT INTO `student` VALUES (61, 3, 'zhangsan3', 1, 6, 66);
INSERT INTO `student` VALUES (62, 1, 'zhangsan1', 1, 7, 89);

SET FOREIGN_KEY_CHECKS = 1;

1.2 笔试题

1.2.1 查询每门课程的最高分、最低分、平均分

select max(score),min(score),avg(score)  from student group by cno

1.2.2 查询每门课的最高分学生的信息

 select cno,sno,name,sex,score from student t,
 (select cno,max(score) score from student group by cno) s
 where t.cno = s.cno and t.score = s.score;

1.2.3 查询每每门课的前三名

 select  t1.*
 from student t1 where 
 (select count(1) from student t2 where t1.cno = t2.cno)   <= 3
 order by cno,score desc;  

1.2.4 删除自动编号不同其他信息相同的学生

 delete from
 student 
 where id not in
 ( 
  select min(temp.id) as id from 
  (select * from student) as temp
  group by 
    temp.cno,
    temp.sno,
    temp.name,
    temp.score
 )

二、课程题

2.1 查询每门课程成绩都大于80分学生的学号

表 student

namescorecourse
A85语文
A75数学
A82英语
B75语文
B89数学
B79英语
天使美眉90语文
天使美眉100数学
天使美眉100英语
#SQL1:
select name from student
group by name  having min(score) > 80;
#SQL2:
select name from student
group by name having count(score) = sum(case when score > 0 then 1 else 0 end) 
#SQL3
select name from student 
where name not in 
(select distinct(name) from student where socre <= 80);

2.2 查询课程001的成绩大于课程002成绩的学号

  • student表:sno(学号),sname(姓名),sex(性别),dept(系)
  • course课程表:cno(课程号),课程名(cname)
  • sc选课表:sno,cno,grade(成绩)
 #SQL1
 select sno from 
 (select sc.* from sc,course where sc.cno = course.cno and cname = '001' ) one
 inner join 
 (select sc.* from sc,course where sc.cno = course.cno and cname = '002' ) two
 on one.sno = two.sno where one.grade > two.grade;

三、推测题

3.1 已知表中推测sql

timegrade
2005-05-09
2005-05-09
2005-05-09
2005-05-09
2005-05-10
2005-05-10
2005-05-10

如果要生成下列结果, 该如何写sql语句

time
2005-05-0922
2005-05-1012
#SQL1
select time,sum(case grade = '胜' when 1 else 0 end),
sum(case grade = '负' when 1 else 0 end)from tab
group by time;
#SQL2
select t1.time,t1.sucess as,t2.fail as(select time,count(1) sucess from tab where grade = '胜' group by time ) t1,
(select time,count(1) fail from tab where grade = '负' group by time) t2
where t1.time and t2.time;
#SQL3
select t1.time,t1.sucess as,t2.fail as(select time,count(1) sucess from tab where grade = '胜' group by time ) t1 inner join
(select time,count(1) fail from tab where grade = '负' group by time) t2
on t1.time and t2.time;

3.2 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列

select  case(when A > B then A else B end),case(when B > C then B else C end)  from tab ;

3.3 请取出当天的记录

  • 一个日期判断的sql语句请取出表中日期(SendTime字段)为当天的所有记录 (SendTime字段为datetime型,包含日期与时间)
select  *  from tab where to_char(SendTime,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd');

3.4 按显示格式写出sql语句

  • 有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
  • 大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
    显示格式:
语文数学英语
及格优秀不及格
select 
case(when 语文 >= 80 then '优秀' when 语文 >= 60 then '及格' else '不及格' end) 语文,
case(when 数学 >= 80 then '优秀' when 数学 >= 60 then '及格' else '不及格' end) 数学,
case(when 英语 >= 80 then '优秀' when 英语 >= 60 then '及格' else '不及格' end) 英语
from tab

3.5 从tab1,tab2中取出如tab3所列格式数据

tab1:

mondepyj
一月份0110
一月份0210
一月份035
二月份028
二月份049
三月份038

tab2:

depdepname
01国内业务一部
02国内业务二部
03国内业务三部
04国际业务部

tab3 (result):

dep一月份二月份三月份
0110nullnull
02108null
035null8
04null9null
select dep 
(select yj  from tab1  where mon = '一月份' and tab1.dep = t.dep ) 一月份,
(select yj  from tab1  where mon = '二月份' and tab1.dep = t.dep) 二月份,
(select yj  from tab1  where mon = '三月份' and tab1.dep = t.dep) 三月份
 from  tab2 t ; 

求总销售额

select 
sum(case when mon = '一月份' then yj else 0 end)  一月份 ,
sum(case when mon = '二月份' then yj else 0 end)  二月份 ,
sum(case when mon = '三月份' then yj else 0 end)  三月份 
from  tab1 , tab2 where tab1.dep = tab2.dep;

3.6 使用一条SQL求出四个球队所有比赛组合

  • SQL题目:
    一个表team,里面只有一个字段name, 一共有4条纪录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛,
    用一条sql语句显示所有可能的比赛组合。
  • 创建表和插入数据
create table team(name varchar2(30));
 
insert into team values('a');
insert into team values('b');
insert into team values('c');
insert into team values('d');
  • 思路:

使用笛卡尔积连接,并使当前大小值只与比它大的值连接。

select t1.name,t2.name from team t1,team t2 where t1.name < t2.name;

3.7 有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value换为A中对应的value

update  A set A.value = B.value where key in (select key from B where A.key = B.key);

3.8 按结果显示写出sql语句

courseidcoursenamescore
1java70
2oracle90
3xml40
4jsp30
5servlet80

为了便于阅读,查询此表后的结果显式如下(及格分数为60):

courseidcoursenamescoremark
1java70pass
2oracle90pass
3xml40fail
4jsp30fail
5servlet80pass
select *,case(when score >= 60 then 'pass' else 'fail' end) mark from tab ;

3.9 计算总订单价格大于100的订单号和总订单价格

在这里插入图片描述

o_numo_itemf_idquantityitem_price
300011a1105.2
300012b236.00
300013bs1511.2
300014bs2159.2
300021b3220.00
300031c010010.00
300041o2502.50
300051c0510.00
300052b1108.99
300054a2102.20
300054m1514.99
select   o_num,sum(quantity*item_price) as orderTotal from  orderitems group by o_num having sum(quantity*item_price) >= 100;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值