怎么下手写SQL?

我们都知道SQL执行语句会有先后顺序,所以我们在写SQL的时候也就可以顺着它的思路来写代码。

一、常见的SQL语句执行顺序

搞清楚sql的执行顺序是首要任务
执行顺序:from, on, join, where(无法使用别名和聚合), group by, agg_function, with rollup/cube, having(仅用于分组后,可以使用聚合), select, distinct, order by, limit

二、读懂需求

有时候写SQL是需要语文功底的,所以读懂需求也是非常重要的一步,并且懂得如何拆分需求,分清外层和内层查询。拆分需求后,根据SQL语句执行顺序写代码。

三、举例

现在有学生表,分数表,详细如下所示。

-学生表
CREATE TABLE `Student`(
`s_id` VARCHAR(20),
`s_name` VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY(`s_id`)
);

--分数表
CREATE TABLE `Score`(
`s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT(3),
PRIMARY KEY(`s_id`,`c_id`)
);

现在需查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名

①根据题目可知最后我们需要的信息是“学号”和“姓名”,这两个字段在“学生表”中的,属于最外层的查询;

③    select student.s_id, student.s_name

①    from student

②    where s_id IN 

(

???


)

②考虑内层查询。这里有“并且”两字,并列的条件属于同一个字段,所以考虑INNER JOIN来实现“且”的条件,分别查询出学过“01”的和学过“02”的学生有哪些,然后再去两个查询的交集,构造一个“新的”表,再从这个“新”表中选取s_id。

③    select student.s_id, student.s_name

①    from student

②    where s_id IN 

(

(???)

INNER JOIN

(???)


)

③”学过的课程”在分数表中

③    select student.s_id, student.s_name

①    from student

②    where s_id IN 

(
select a.s_id

from

(select s1.s_id,s1.c_id from Score s1 where s1.c_id='01') a

INNER JOIN

(select s2.s_id,s2.c_id from Score s2 where s2.c_id='02') b

on a.s_id=b.s_id

)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值