sql面试题

介绍

如题!记录一些sql面试题,加深理解记忆。
**个人理解:**关于复杂的sql查询,你首先需要明确返回字段,提炼条件(where),拆分查询语句、复杂查询逐步简单化。

具体问题。

1.查询出下面表每门课都大于80分的学生。
表名为tb_score

+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
|  1 | 张三 | 语文    |    81 |
|  2 | 张三 | 数学    |    75 |
|  3 | 李四 | 语文    |    76 |
|  4 | 李四 | 数学    |    90 |
|  5 | 王五 | 语文    |    81 |
|  6 | 王五 | 数学    |   100 |
|  7 | 王五 | 英语    |    90 |
+----+------+---------+-------+

思路:(把小变成大做,把大变成小)
先查询出有低于80分的学生:
select distinct name from tb_score where score<=80;
在要求没门课都高于80分的学生姓名不属于上面查询到的名字里面,即为:

 select distinct name from tb_score where not in (select name from tb_score where score<=80);
 # 第二种
 select name from tb_score group by name having min(score)>80

2.如下表,显示文章标题、发帖人、最后回复时间。

+----+--------------+----------+---------------------+----------+
| id | title        | postuser | postdate            | parentid |
+----+--------------+----------+---------------------+----------+
|  1 | 第一条       | 张三     | 1998-10-10 12:32:32 | NULL     |
|  2 | 第二条       | 张三     | 1998-10-10 12:34:32 | NULL     |
|  3 | 第一条回复 1 | 李四     | 1998-10-10 12:35:32 |        1 |
|  4 | 第二条回复 1 | 李四     | 1998-10-10 12:36:32 |        2 |
|  5 | 第一条回复 2 | 王五     | 1998-10-10 12:37:32 |        1 |
|  6 | 第一条回复 3 | 李四     | 1998-10-10 12:38:32 |        1 |
|  7 | 第二条回复 2 | 李四     | 1998-10-10 12:39:32 |        2 |
|  8 | 第一条回复 4 | 王五     | 1998-10-10 12:39:40 |        1 |
+----+--------------+----------+---------------------+----------+

思路:设置外键约束parentid有值,就必须是id的值(父)
要查发帖人即为parentid为null,查询出最大回复时间max(postdate)就必须要parentid=a.id

create table articles(
   id int(6) primary key auto_increment,
   title varchar(50),
   postuser varchar(10),
   postdate datetime, 
   parentid int(6),
   constraint parent_id foreign key(parentid)
   references articles(id)
);
 
select a.title,a.postuser,
       (select max(postdate) from articles where parentid=a.id) reply
  from articles a 
where a.parentid is null;

问题描述:
已知关系模式:S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

  1. 找出没有选修过“李明”老师讲授课程的所有学生姓名(找出所有上李明老师课的人)
  2. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
//1.
Select SNAME FROM S Where NOT
EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明'   AND SC.SNO=S.SNO)
//2.
 Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]
   FROM S,(
    Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE 
      FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO
      									 AND C1.NAME='1' 
      									 AND SC2.CNO=C2.CNO AND C2.NAME='2' 
      									 AND SC1.SCGRADE>SC2.SCGRADE) SC Where S.SNO=SC.SNO

----待补充----

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值