sql面试题

本文给出多个SQL相关问题及对应解答。包括查询每门课都大于80分的学生姓名、删除学生冗余信息、显示比赛组合、查询发生额更高的科目、行列转换、添加索引字段以及判断成绩是否及格等,涵盖多种SQL操作场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名

  • name kecheng fenshu

  • 张三 语文 81

  • 张三 数学 75

  • 李四 语文 76

  • 李四 数学 90

  • 王五 语文 81

  • 王五 数学 100

  • 王五 英语 90

    SELECT NAME,class,fenshu FROM score
    WHERE NAME NOT IN (SELECT NAME FROM score WHERE fenshu <= 80);

2.学生表 如下:

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

删除除了自动编号不同, 其他都相同的学生冗余信息

DELETE FROM score1 WHERE id NOT IN
(SELECT id FROM (SELECT MIN(id) AS id FROM score1
GROUP BY stu_id,NAME,class_id,class,fenshu)a);

3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.

SELECT a.name, b.name
FROM team a, team b
WHERE a.name < b.name
ORDER BY a.name

4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。
AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。
数据库名:JcyAudit ,数据集:Select * from TestDB

select accID from
(
select a.* from account a,
(select occMonth,debitOccur from account where accID=‘101’) b
where a.occMonth=b.occMonth and a.debitOccur>b.debitOccur
) c
group by accID having count(occMonth)=12;

5.面试题:怎么把这样一个表

  • year month amount
  • 1991 1 1.1
  • 1991 2 1.2
  • 1991 3 1.3
  • 1991 4 1.4
  • 1992 1 2.1
  • 1992 2 2.2
  • 1992 3 2.3
  • 1992 4 2.4

查成这样一个结果

  • year m1 m2 m3 m4

  • 1991 1.1 1.2 1.3 1.4

  • 1992 2.1 2.2 2.3 2.4

    SELECT YEAR,
    (SELECT amount FROM test1 t WHERE MONTH = 1 AND t.year=test1.year) AS m1,
    (SELECT amount FROM test1 t WHERE MONTH = 2 AND t.year=test1.year) AS m2,
    (SELECT amount FROM test1 t WHERE MONTH = 3 AND t.year=test1.year) AS m3,
    (SELECT amount FROM test1 t WHERE MONTH = 4 AND t.year=test1.year) AS m4
    FROM test1 GROUP BY YEAR

6.给表添加id字段作为索引放在第一列,并设置为自动增长

ALTER TABLE test2
ADD id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

7.原表:

  • id name score
  • 1 java 70
  • 2 oracle 90
  • 3 xml 40
  • 4 jsp 30
  • 5 servlet 80

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

  • id name score mark

  • 1 java 70 pass

  • 2 oracle 90 pass

  • 3 xml 40 fail

  • 4 jsp 30 fail

  • 5 servlet 80 pass

    SELECT id,NAME,score,(CASE SIGN(score-60)
    WHEN -1 THEN “fail”
    ELSE “pass” END) AS mark FROM test2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值