常见面试SQL语句

1. 创建一个表:

创建语法为

CREATE TABLE table_name (column_name column_type);

实例如下:

create TABLE student (s_id INT NOT NULL,s_name VARCHAR(20)
);

2. 有一张shop表,有三个字段article,author,price,选出每个author的price的最高的纪录。(要包含所有字段)

思路:使用MAX函数,找到price的最大值,再根据author分类即可

SELECT article,author,MAX(price)
FROM shop
GROUP BY author

我自己尝试了一下,这种方法的确是可以直接实现的,我也不知道为什么别人的博客里用了非常复杂的连接

3.一张company_profit收入表,两个字段id,profit。查询平均收入大于10w的公司id

思路:

  • 先查询所有公司的平均收入,作为临时表
  • 再将临时表放在主查询中。
  • 这里AVG(age)的用法要注意

步骤一:查询所有公司的平均收入

select id, AVG(profit) avg_profit
from company_profit
where avg_profit > 100000
GROUP BY id;

步骤二:主查询,只查询id,与临时表进行id匹配

SELECT company_profit.id
FROM company_profit,(select id, AVG(profit) avg_profit
from company_profit
where avg_profit > 100000
GROUP BY id) temp_table
where company_profit.id= temp_table.id
GROUP BY id;

4. 学生成绩表-课程表例题

①如果学号的前两位表示年纪,要查找98级女生的姓名,请写出相应SQL语句。

思路:模糊查询 like或者左匹配

解法一:

select Sc_name
from score
where Sc_number like '98%'

解法二:

select Sc_name
from score
where left(Sc_number,2) = '98';

②要查找所有需要补考(小于60分)的学生姓名和课程的名字和成绩,请写出相应SQL语句。

select s1.Sc_name,c1.Co_name,s1.Sc_score
from score as s1,coures as c1
where s1.Sc_score < 60 and s1.crouseid = c1.Co_id;

③查询每个学生需要补考(小于60分)的课程的平均分,并以平均分排序。

select s.Sc_name,c.Co_name,AVG(Sc_score)
from score as s, course as c
where s.crouseid = c.Co_id and s.Sc_score < 60
GROUP BY s.Sc_name
ORDER BY AVG(s.Sc_score)

查所有课程都在80以上的学生姓名

思路:

  • 找到分数在80一下的学生
  • 在主查询中使用not in即可
select stu_name
from score
WHERE score.stu_name not in (select stu_name from score where score.subject_score < 80)
GROUP BY score.name;

给一个成绩表score,求排名(这里请忽略最后一列)

select a.id,a.name, a.score as Score , COUNT(DISTINCT b.score) as Rank
from score a, score b
WHERE b.score >= a.score
GROUP BY a.id
ORDER BY a.score desc;

简单解释:

笛卡尔积:

select *
from score a, score b

此时对以上结果进行筛选:

select *
from score a, score b
where b.score > a.score


以上结果把"b表"的成绩(score) 大于 "a表"的成绩的记录都筛选出来
此时右边成绩字段全部都是大于等于左边的成绩字段

然后我们再根据id进行一个排序

select *
from score a, score b
where b.score > a.score
ORDER BY a.id


此时我们就可以知道针对a表的中的每一个学生b表中有多少大于他的

最后我们根据id分组(GROUP BY), 再把"b表"的成绩去重(DISTINCT)再记总数(COUNT)

select a.id,a.name, a.score as Score , COUNT(DISTINCT b.score) as Rank
from score a, score b
WHERE b.score >= a.score
GROUP BY a.id
ORDER BY a.score desc;

此sql不太好理解的就是" COUNT( DISTINCT b.score ) AS Rank "这段
结合上面的结果 举例一个来理解这句sql:
id为1 成绩60的 大于他的有4条记录, 分别是85 80 80 85
我们看到这4条记录去掉重复后剩下 80 85 这2个, 也就说明成绩60有2个大于等于他的,那么最高只能排名第2
这就是上面去重求和的作用, 求的和就是他的最高排名

但是这里我有个不太懂的事情就是COUNT(DISTINCT b.score) 为什么不用加1,我测试过了,加1的话就多了。。。。

这篇博客解释的很清楚:
https://blog.csdn.net/m0_37928787/article/details/91042728

求某门学科分数最高的前3位

使用order by降序排列,之后用limit限制展示数据行数

select *
from score
WHERE socre_name = "计算机网络"
order by score DESC
LIMIT 2

数据库面试题:常见面试SQL语句相关推荐

  1. C# 联合查询_直击数据库面试题:数据库查询语句

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  2. 【103期】史上最全的数据库面试题,面试前刷一刷!

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 40 分钟. 来自:cnblogs.com/wenxiaofei/p/9853682.html 一.基本概念 1.主键.外键. ...

  3. 数据库面试题之PL/SQL面试题

    create table employee( id number(10) not null, -- 员工工号 salary number(10,2) default 0 not null, -- 薪水 ...

  4. java砍价算法逻辑,【拼多多算法数据库面试题】面试问题:拼多多砍价算法… - 看准网...

    拼多多的砍价,邀好友进行砍价,想必大家对这个不会陌生.作为一个程序员来说比较好奇它的每个人能砍的价格是如何实现的.根据经验来看,一般是前几个能砍的价格是比较高的.而后来的好友基本上能砍的价格是微乎其微 ...

  5. mysql查询学生平均成绩及其名次_数据库面试题:数据库查询语句

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  6. SQL编程软件测试,编程程题库之软件测试8大常见数据库面试题

    原标题:编程程题库之软件测试8大常见数据库面试题 一.事务的四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前其它会话不能看到过程一致性,事务前后,数据总额一致持久性,一旦事务提交 ...

  7. mysql纵表 主键_数据库面试题-sql语句

    原标题:数据库面试题-sql语句 1,写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的. 答: → 解1: select top ...

  8. 复试面试-数据库面试题

    将网上常见的数据库面试题整理一下,方便自己和有需要的人学习. 1.事务 概念:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.事务由事务开 ...

  9. MySQL数据库面试题(2021最新版)

    文章目录:http://github.crmeb.net/u/defu 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 ...

最新文章

  1. Ext2.0布局类初探
  2. uwsgi gevent
  3. 13.7 手柄(Handle)
  4. python跳回循环开始位置_如何回到python中循环的开始?
  5. Java中this与super的区别
  6. 《线程管理:线程基本操作》
  7. 四、数据预处理——处理连续型特征:二值化与分段
  8. linux mysql general_利用mysql general log 写shell 可行性简要分析
  9. 括号匹配深度,交错01字符串(一个类型代码)
  10. python图像标记工具怎么用_图像标注教程(使用LabelImg标注工具)
  11. (转)最大流最小割定理
  12. oracle box怎么全屏,Oracle VM VirtualBox 虚拟机设置全屏与共享
  13. Visual C++网络编程经典案例详解 第9章 实用播放器 编程基础 播放mp3文件 读取文件
  14. winform的RichTextBox设置网格线,类似word的稿纸效果
  15. 小程序用哪个服务器好,小程序用什么服务器好
  16. 求两个数的最小公倍数; 两种方法
  17. Vue实践--V-for指令
  18. unity5.0 添加图片纹理
  19. Indian Food Recipes Dataset(印度食品配方数据集)
  20. 世界主要电信运营商总结

热门文章

  1. java per.get_Java ResultSetMetaData getPercision()方法与示例
  2. AHB(Advanced High Performance Bus)协议规范
  3. 应用程序无法正常启动(0xc0000022)。请单击” 确定“关闭应用程序。
  4. c:out value=${s.name} escapeXml=false/c:out/td
  5. 异步加载 yepnope.js
  6. 为什么“有钱人”爱买华为手机?(深刻)
  7. 手把手教你超赞的五脏排毒DIYzz
  8. 线程死锁——死锁产生的条件
  9. 关于ARM9协处理器CP15及MCR和MRC指令
  10. 形状工具应用——制作巧克力