一、数据类型
1、int 整数
float 小数,浮点数
varchar 文本
date 日期
2、数值型
int(size) 在括号中规定最大位数
float(size,d) 单精度浮点型 size表示最大位数,d表示小数点
double(size,d) 双精度浮点型 size表示最大位数,d表示小数点
3、日期型
Year() 2位或4位格式的年
Date() 日期格式
Time() 时间格式
DateTime() 日期时间组合
TimeSTamp() 时间戳
4、文本型
char() 保存固定长度的字符串
varchar() 保存可变长度的字符串
二、SQL基础查询语言
1、常用命令以及书写顺序
select *()
from 表
where 条件
group by 条件
having 条件
order by 条件
limit 限制数据条数
2、检索数据 select
语法:
select 字段名
from 表名
- 检索单列:select 列名 from 表名
- 检索多列:用“,”隔开
- 检索所有列:select *
- 限制检索结果:limit(limit x,n 意味着从第x+1行返回n行)
- 去重检索:distinct
3、限定条件 where
语法:
select *()
from 表
where 条件
- 常用于判断命令
数值判断:> < = != <= >= between and
逻辑判断:AND OR NOT IN()
模糊判断: LIKE % _ 例:like"%财%"
4、计算字段
语法:
select
字段1 + 字段2 as '合计'
字段1 - 字段2 as '相差'
字段1 * 字段2 as '乘积'
字段1 / 字段2 as '除以'
from 表名
where 条件(非必须)
5、拼接字段
select concat(字段1,字段2) as '新名称'
from 表名
6、数据分组
语法:
select *()
from 表
where 条件
group by 条件
7、数据过滤
语法:
select *()
from 表
where 条件
group by 条件
having 条件
8、结果排序
语法:
select *()
from 表
where 条件
group by 条件
having 条件
order by 条件
排序 :升序 asc (默认)
降序 desc
三、SQL函数
1、数值型
SUM(列名) 返回某列的总和
AVG(列名) 返回某列的平均值
MAX(列名) 返回某列的最大值
MIN(列名) 返回某列的最小值
COUNT(列名) 返回某列行数(不包括null值)
2、日期型函数
NOW() 返回当前日期和时间
CURDATE() 返回当前日期
CURTIME() 返回当前时间
DATE() 提取日期或日期/时间表达式的日期部分
3、文本型函数
LEFT() 返回左边的字符
RIGHT() 返回右边的字符
LENGTH() 返回某字段的长度
SUBSTRING(s,n,len) 返回字符串s从第n个字符开始取长度为len的字符串
4、控制语句
- IF 函数
语法:IF(condition,true,false)
- 条件函数
语法:
case
when 条件1 then '结果1'
when 条件2 then '结果2'
......
Else '默认值'
END as '新字段名'
四、 SQL进阶
1、sql语句执行顺序
from ; join ; on ; where ; group by ; having ; select ; order by ; limit
2、多表连接查询
1>横向连接
- 内连接 inner join
select *
from 表1 as a
inner join 表2 as b
on a.列名 = b.列名
2.左连接 left join
select *
from 表1 as a
left join 表2 as b
on a.列名 = b.列名
3.右连接 right join
select *
from 表1 as a
right join 表2 as b
on a.列名 = b.列名
2> 纵向连接 UNION
3> 子查询
- 定义:当一个查询是另一个查询的一部分时,我们把内层的查询称为子查询,外层查询称为父查询;通过子查询可以实现多表查询,该查询可能包括in,any,all和exists等关键字,除此以外可能还包含比较运算符
- 子查询分类
1> where 子查询
语法:
select *
from 表
where c01<(select xxx from 表t)
注:where后面的字段名一定要和子查询中的字段名顺序一致 ;where后面的字段数目要和子查询中的字段数目一致
2> from 子查询
语法:
select *
from (select xxx from 表)as t1
where 条件
子查询本身是一个完整的查询,需要赋予别名
3、窗口函数
定义:用于计算基于组(group by)的某种聚合值,它与聚合函数不同点在于:窗口函数可以在分组后返回多行结果,而聚合函数对于每组只能返回一行
窗口函数可用于解决这几类经典问题:排名问题、Top N问题、前百分之N问题、累计问题、每组比较问题、连续问题
排名函数
select * row_number() over(partition by <要分组的列名> order by<要排序的列名>)as 排名
from 表名
注:如果不分组只对某列表排序,partition by 可省略
row_number() 可替换其他排名函数
Top N问题
select *
from(select * row_number() over(partition by <要分组的列名> order by<要排序的列名>)as 排名
from 表名
)as a
where 排名 <= <N>
百分之N问题
使用窗口函数percent_rank()
累计问题
select * 聚合函数 over(partition by <要分组的列名>
order by<要排序的列名>
rows between 范围起始行 and 范围终结行)
from 表名
每组内比较问题
select *
from(select * avg(<列名>) over(partition by <要分组的列名> )as 新名
from 表名
)as a
where <列名> > 组内比较值
连续出现N次问题
select distinct 列
from(select 列 函数 over(partition by <要分组的列名> order by<要排序的列名>)as 列1
from 表名
)as a
where (列 = 列1 ...)
结语 :本篇是SQL的基础知识浓缩总结,所看书籍 《SQL面试宝典》。知识只是辅助,还需大量实战多刷题