SQL思路+syntax总结
思路
单一表
一. 条件输出: case when
二. 只需要返回aggregation data: group by
三. 需要保留原data以及aggregation data: window function
四. 需要使用order筛选表:window function
多表操作
一. 连接多表: join
二. 多层aggregation: with /create table
一些概念 + explore data
一. Get to know database/table (MySQL)
-
显示所有数据库:show database. 1point3acres
-
改变数据库:use database1
-
显示所有tables名称:show tables
-
显示table的columns名称(显示为field)
a. show columns from table1
b. describe table1
二. data type:
-
string
a. char(n) 必须n位
b. varchar(n) 最多n位
2. number
a. int
b. dec(5,2)=999.99
c. real,double
3. datetime
a. date日期
b. time 时间
c. timestamp日期+时间
三. NULL rules
-
NULL in where
a. NULL in comparison is unknown
b. U and T=U, U and F = F
c. U or T=T, U or F=U
d. SQL 只返回 TRUE
2. NULL in aggregation: 一般忽略null,除了count(*)
单一表
. 1point3acres
一. 输出列: (先要知道使用哪个table (from))
-
条件输出(case when… then… else …end)
-
改变格式cast(column AS INT/DEC/VARCHAR/CHAR…..)
-
numeric
a. 绝对值:abs()
b. 求余数 mod(x,y)
c. 次方power()
d. 开方sqrt()
e. 四舍五入round(column, 位数)
-
text
a. 文本合并:concat(a,b). From 1point 3acres bbs
b. 大写upper()
c. 小写lower()
d. 返回文本长度length()
e. 提取字符mid(column, start, length)
-
去重:distinct
-
aggregation function
a. avg()
b. sum(). 1point3acres
c. count() (常用count(distinct A))
d. max()
e. min()
-
windows function
a. 格式: function() over (partition by x order by y) as a
b. function:
i. aggregation function (sum/avg/max/min)
ii. row_number()
iii. rank()/dense_rank()
iv. lead()/lag()
v. first_value()
-
日期:(syntax各database不统一 )
a. datediff()
b. 改变格式format(column,””)
c. dayname(“”) 周几?需要引号
d. day()日子数字
e. year()年份
f. month()月份
g. ><:日期前后日期要加引号
h. curdate()
二. 筛选行:where (先要知道使用哪个table (from))
key idea: 原理:对每一行判断TRUE/FALSE, 返回TRUE的rows
-
numeric variable :
a. > / < / = / <> / between (连续)
b. 某几个数字: in (10, 20) /not in (间断)
c. is null/ is not null. check 1point3acres for more.
-
categorical variables:
a. in (a, b, c) / not in ()
b. =
c. is null/ is not null
d. like “”
i. “%”表示任何字符任何次数
ii. “_”表示一个字符
-
多个条件:AND/OR
三. 其他部分
-
group by
-
having
-
order by
-
limit
四. 多表
-
横向连接JOIN
a. A INNER JOIN/LEFT JOIN/RIGHT JOIN B ON A.id=B.id
-
纵向连接UNION / UNION ALL
-
temporary table
a. with a as ()
b. create table a as ()