数据库避障(sql语句执行顺序,sql需要注意的地方)例题讲解 待后续更新

没错,刚做了面试题,又被sql语句给难住了,我太菜了 呜呜呜

首先要了解sql的执行顺序

总体的执行顺序为:
1、from (数据库表来源)
2、join (用于联结多个表)
3、on (表的联结条件)
4、where (筛选条件)
5、group by (开始使用select中的别名,后面的语句中都可以使用)
6、avg,sum…(就是所有的聚合函数)
7、having (多用于分组后的筛选条件)
8、select (要查询的目标)
9、distinct (去重)
10、order by (排序)
11、limit (对输出的数量进行限制)

样例讲解

那些我做过的题(雾:我踩过的坑

1、查找最晚入职员工的所有信息:(简单类型)

给定数据表:
在这里插入图片描述
初解思路(错误思路)

select * FROM employees 
where hire_date = max(hire_date)

这儿的话直接运行这个sql都会出现错误,因为在sql中where 后面接的筛选条件中不能够接聚合函数

改正后的解法:(正确思路)

select * FROM employees 
where hire_date = (select max(hire_date) from employees)

将其放入子查询中去这种思路即正确了

2、查找入职员工时间排名倒数第三的员工所有信息(中等类型)
select * from employees
order by hire_date DESC
limit 1 offset 2

考察知识点(limit和offset的用法):

1.数据库数据计算是从0开始的
2.OFFSET X是跳过X个数据,LIMIT Y是选取Y个数据
3.LIMIT  X,Y  中X表示跳过X个数据,读取Y个数据
4.当LIMIT和OFFSET组合使用的时候,LIMIT后面只能有一个参数,表示要取的的数量,OFFSET表示要跳过的数量 。
3、查询教师表 teachers 和课程表 courses,查询最年长的老师所开课程的学生数,最后返回学生数均超过这些课程的课程信息

数据表teachers:
在这里插入图片描述
数据表courses表:
在这里插入图片描述

select *
from courses
where student_count > all (
    select student_count from teachers t 
    join courses c1 on t.id = c1.teacher_id
    where t.age = max(t.age)
)

后面的4题和6题所用到的数据表也相同

4、请编写 SQL 语句,连接 courses 与 teachers 表,统计不同国籍教师所开课程的学生总数,对于没有任课的老师,学生总人数计为 0 。最后查询教师国籍是 ‘U’ 开头且学生总数在 2000 到 5000 之间的教师国籍及学生总数 (别名为 student_count ),结果按照学生总数降序排列,如果学生总数相同,则按照教师国籍升序排列。(困难类型)

题目原链接

解题方法
sql语句:

select t.country, sum(student_count) as student_count
from courses c right join teachers t on c.teacher_id = t.id
group by country
having country like 'U%' and  sum(student_count) between 2000 and 5000
order by student_count DESC, country

该题考察到了排序,模糊查询,范围查询,表联结, 范围挺多的,整体难度有些大

5、请编写 SQL 语句,查询 teachers 表中,各个国家所有教师的平均年龄大于所有国家教师的平均年龄的教师信息。(中等偏难)

原题目链接

select * from teachers t1
where country in (
    select country from teachers t2
    group by country 
    having avg(age) >
    (select avg(t3.age) from teachers t3)
)

这道题主要是对题目的理解 笔者在之前没有理解清除 导致花费了很长的时间

(错误思路)
(正确思路)
给定一个题目 要求给各个部门的最低薪资的人 加100薪资(提供两张数据表):

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值