sql简洁笔记

selectdistinctfrom 
join  on 
where 
group by 分组
having 
order by 排序
limit

条件查询 ADN、OR、NOT、LIKE

操作写法作用
<条件1> AND <条件2>WHERE
score >80 AND name =‘M’
满足条件1 且 满足条件2
<条件1>OR<条件2>WHERE
score >80 OR name=‘M’
满足条件1 或 满足条件2
NOT<条件1>WHERE
NOT name = ‘M’
名字 不能 是M
LIKE ‘%A_’模糊查询% 多字符
_一个字符

排序 ORDER BY

操作写法说明
ORDER BY <字段>ORDER BY name
ORDER BY name DESC倒序
ORDER BY name ASC顺序
select * from user
WHERE sex
ORDER BY name ASC age DESC
# 先按名字 顺序排  同名 倒序年纪排

分页 LIMIT

LIMIT  OFFSET 实现分页

select * from user
LIMIT 3 OFFSET 0;
# 每页 3条 数据 获取 第1页的数据

select * from user
LIMIT 3 OFFSET 3;
# 获取 第 2页。每页是3条 数据  第二页 是从 【索引】 3 开始的

LIMIT ,

select * from user
LIMIT 3,3;
# 从索引 3 开始 每页显示 3条数据

连接查询 JOIN

select … from <表1> inner join  <表2> on <条件>

操作写法说明
INNER JOIN <表2> NO <条件>INNER JOIN user
ON u.id = id
id 连接
INNER JOIN 内连接两张表都存在的记录
OUTER JOIN 外连接默认 选出左表存在的记录
RIGHT JOIN <表2> NO<条件>返回右表都存在的行
结果只在右边存在 结果null填充
LEFT JOIN <表2> NO<条件>返回左表都存在的行
FULL JOIN <表2> NO<条件>两张表的记录全部选择出来

union 并集

把多个结果集 合并成一张新表

sql 1union all (sql 2)

增删改查

添加 INSERT

insert into <表名>(字段1,字段2,字段4) values(值1,值2,值3)
不写字段默认按照表中顺序来赋值

修改 UPDATE

update <表名> set 字段1=值 字段2=值…where…

删除 DELETE

delete from<表名> where…

取代 REPLACE INTO

replace into <表名> values()

取代 符合条件的数据

  1. 根据 主键 或唯一索引 判断
  2. 先删除此行,在插入新数据,或者 直接插入

流程控制

IF(判断,真执行,假执行)

IFNULL(值,代替null值)

CASE
WHEN 条件1 THEN 结果
WHEN 条件2 THEN 结果
[ELSE 默认结果]
END
CASE  条件值 a  (switch 一样)
WHEN 1  THEN  结果
WHEN 2  THEN  结果	
[ELSE 结果]
END

函数

聚合函数

函数说明
COUNT()计数
SUM()求和,数值
AVG()平均,数值
MAX()最大,
MIN()最小

sum(if(条件,字段名或固定值,0))

多条件判断

sum(if(条件1 AND 条件2 AND 条件3,字段名或固定值,0))

count(if(条件,true,null))

if null(表达式, null 的代替值)

日期函数

函数作用
DATE(date|datetime)提取日期的 date或 datetime部分
DATE_ADD(date,INTERVAL exp nuit)添加时间
DATA_SUB(date,INTERVAL exp unit)减少时间
DATEDIFF(date1,date2)日期之间的差值 date1 - date 2
DATE_FORMAT(date,format)format格式化 date
Last_day(date)获取当月最后一天日期

日期 本身可以直接 比较

例如 : 2021年9月 之前的数据

# datetime = '2020-8-1 00:00:00'
where datetime < '2021-9-1' and datetime is null

例子

获取 2021 年 8 月 1 日

year(date) = 2021 and  month (date) = 8 and
day(date) = 1

last_day 获取当月最后一天

#date = '2022-02-02 12:00:00'
last_day(date)
# 2022-02-28

时间函数

函数作用
NOW()
SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP()
返回当前时间
CURTIME()返回当前时间
Timestampdiff(nuit , begin ,end)根据单位返回时间差,对于传入的begin 和 end 不需要相同的数据结构,可以存在一个date 一个 datetime
#  date1 和date2 分钟相差多少
Timestampdiff( minut , start_time , submit _time) < 5

添加 减少 时间 ADD SUB

参数类型参数类型
YEAR 年YEAR_MONTH
MONTH 月DAY_HOUR
DAY 日DAY_MINUTE
HOUR 小时DAY_SECOND
MINUTE 分钟HOUR_MINUTE
SECOND 秒HOUR_SECOND
MINUTE_SECOND
select date_add('2022-2-22 12:00:00',interval'1:2' minute_second)
# 结果 2022-2-22 12:01:02

select date_add(now() , interval 1 year)

格式化 DATE_FORAMT

字符作用
%Y年 4位
%y年 2位
%M月 英文
%m月 01-12
%D日 英文 1st,2nd
%d日 01-31
%H时 2位24小时
%h时 12小时
%i分 00-59
%S /% s秒 00-59
%pPM。AM
%rHH:mm:ss PM 格式
%W周,周名
%w周,0-6 :周天 0
%j当前天数 001-366
select date_format(date,'%Y/%m/%d')
# 2022/2/22

算数

函数作用
ABS取绝对值
MOD取余数,接收两个参数,参数1数值,参数2 为除数
ROUND四舍五入,接收2个参数,参数1数值,参数2是小数点位数

字符串函数

函数用法
CONCAT(s1,s2…)连接 字符串组合成一个 新的字符串
CONCAT(s,s1,s1…)s分隔符 拼接
LEFT(s,n)返回 s串 左边 n个字符
RIGHT(s,n)返回 s串 右边 n个字符
substring_index(str , delim ,conut)字符串截取
### substring_index(str,delim,conut)
  1. str : 需要处理的字符串
  2. delim : 分隔符
  3. count : 计数
# str = www.lf.cn
substring_index(str,'.',1)
# 结果 : www

substring_index(str,'.',2)
# 结果 : www.lf

substring_index(str,'.',-2)
# 结果: lf.cn

substring_index(substring(str,'.',-2),1)
# 结果: lf

其他函数

using() 两张表的的链接条件 类似on

select *
from user u left join admin a
on u.id = a.id

select *
from user left join admin
on(id)

事务

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
ROLLBACK;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值