盒盒のbox

没有奇迹,没有惊喜

sql拾遗(1)

最近工作上也用到了一点sql,就当是复习了,依旧看到什么写什么

1、select

CRUD之一,最常用到的功能(至少我是),目前遇到的常见情况有两种

1、直接select字段然后输出

1
select * from file_1 where id=10086

最寻常的形式,没什么好说的

2、select一些字段作为一个新表,为后面的计算做准备

belike:

1
2
3
4
5
6
7
8
9
10
11
12
WITH filtered AS (
SELECT id,name,code
FROM file_2
WHERE name IN (
'1','2','3'
)
AND is_deleted = 0
),

select * from filtered
left join file_3 on filtered.id = file_3.id
where ......

类似这样,为了后续计算的方便,或者是为了优化性能,提前筛选表内的一些字段作为一个新表来参与后续的计算

2、left join

左连接,本质是把两个表做笛卡尔积再输出

1
2
from A
left join B on A.id = B.id

假设A表有4条数据,B表有8条,其中6条的id能与A表匹配上,最终输出的是4*6=24条数据
其中A表的数据全部包含,B表的数据只有匹配上的6条

注意 如果要加筛选条件,如果筛选A表的数据,则需要在后面添加where A.name = xxx;如果是筛选B表的数据,则是在left join的时候在on后面添加and B.name = xxx这样的语句,此时A表的所有行都在,并且只有匹配上且B.name=xxx的才会显示具体值

赏孩子一口饭吃吧