SQL 小妙招

IF(a,b,c)

if a == true return
	b
else 
	return c

COALESCE(a,b, …)

if a is not null 
	return a
else
	return b
	.....

DISTINCT

去除重复行

CASE WHEN ELSE END

假如,表date

ab
0100
110
250
SELECT 
(CASE date.a
WHEN 0 THEN 'a的值为0'
WHEN 1 THEN 'a的值为1'
ELSE '哈哈哈'
END ) a, date.b
FROM date
ab
a的值为0100
a的值为110
哈哈哈50

可见,WHEN 后面可以接具体的值。

SELECT  date.a,
(CASE date.b
WHEN date.b>50 THEN 'b的值大于50'
WHEN date.b<50 THEN 'b的值小于50'
ELSE 'b的值等于50'
END ) b
FROM date
ab
0b的值大于50
1b的值小于50
2b的值等于50

CONCAT(a,b)

将多项合在一起

SELECT CONCAT(date.a,date.b) total
FROM date
total
0100
110
250

GROUP BY a[,b,c····](此处以下称为分组项)

分组。
以分组项为条件,将所有分组项值相同的行放在一起,每组取第一项作为结果。得到的结果是以分组项为主键。在此查询过程中,可以加入 MAX(),MIN(),COUNT(),SUM()等等用于计算的函数。

ORDER BY a[,b,c····](此处以下称为排序项)

排序。
以排序项为条件,进行排序。首先根据排序项a 进行排序。在不影响排序项a的前提下,再根据排序项b进行排序。以此类推。由此可知。根据排序项a排序后,排序项b应该是在,排序项a值相等的行中,内部排序,不可影响排序项a

LEFT JOIN ON 和 INNER JOIN ON

a LEFT JOIN b ON a.id = b.id and ·····

两个表的左连接,on 后面接条件,最后的结果对于表a 来说,表a中的所有数据都将保留,如果没有符合条件的,将用null 补充。这个时候,问题就来了,我们想约束表b的数据,在后面添加约束条件,是可以达成的,但是对于表a来说,即便规定了表a的某个column的值,但是从最后的结果来看。表a中不符合条件的数据还是将被保留下来,连接表b的column将补null。所以起不到约束的效果。这个时候我们就得将约束表a的条件放到WHERE中。(右连接相反)

a INNER JOIN b ON a.id = b.id and ·····

两个表内连接,on 后面接条件,最后的结果不保证必定有那一个表的所有数据。因为,内连接的两个表都必须符合条件。也就是说,内连接的条件与写在WHERE中的条件等价。

DATE 类型先关操作

date_format(date, ‘?’)获取日期的年、月、日、时、分、秒的数值表达,或者月份的英文缩写表达
具体使用,参考3Wschool相关文档

date_sub(date, interval num day)、date_add(date, interval num hour)
对日期进行加减操作,加一天半,可选择加36小时

持续跟新ing·······

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值