SQL常见的一些面试题

SQL常见的一些面试题
原文链接:https://www.cnblogs.com/diffrent/p/8854995.html
1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名

CREATE TABLE test1(
id int(5),
name varchar(20),
subject varchar(20),
score int(10),
primary key(id)
);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (1, '张三', '语文', 81);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (2, '张三', '数学', 75);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (3, '李四', '语文', 76);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (4, '李四', '数学', 90);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (5, '王五', '语文', 81);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (6, '王五', '数学', 100);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (7, '王五', '英语', 90);

在这里插入图片描述
##查询出每门课都大于80 分的学生姓名

select name,min(score) min_score from test1 
group by name 
having min_score>80
select distinct name from test1
where name not in 
(select distinct name from test1 where score<=80)
  1. 学生表 如下:
CREATE TABLE student(
id int(5) auto_increment ,
xuehao varchar(20),
studentname varchar(20),
subjectid varchar(20),
subjectname varchar(20),
score int(10),
primary key(id)
);

自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69

删除除了自动编号不同, 其他都相同的学生冗余信息
A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)

delete from student where id not in (select min(id) from student 
group by xuehao,studentname,subjectid,subjectname,score)

在mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和oracle不会出现此问题。
You can't specify target table for update in FROM clause含义:不能在同一表中查询的数据作为同一表的更新数据。

delete from student where id not in (
select a.* from (
select min(id) from student 
group by xuehao,studentname,subjectid,subjectname,score
)a
)

3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.
你先按你自己的想法做一下,看结果有我的这个简单吗?

CREATE TABLE team(
name varchar(20) primary key 
);
select a.name, b.name
from team a, team b 
where a.name < b.name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值