1)文本处理函数

left(str,len),right(str,len)
SELECT left(record_number,3),right(record_number,3) FROM `py_etl_private_fund_base_info_2_1` ;
LENGTH(str) 、lower(str)、UPPER(str)、LTRIM(str)、RTRIM(str)
SELECT LENGTH(record_number) FROM `py_etl_private_fund_base_info_2_1` ;
SELECT lower(record_number),UPPER(record_number) FROM `py_etl_private_fund_base_info_2_1` ;
SELECT LTRIM(record_number),RTRIM(record_number) FROM `py_etl_private_fund_base_info_2_1` ;
SOUNDEX(str):返回的是字段 其语音表示的字母数字的算法,可对字段发音进行比较
SELECT full_name FROM `py_etl_private_fund_base_info_2_1` where SOUNDEX(full_name) =SOUNDEX("上海国富永钤投资合伙企业(有限合伙)") ;
2)日期和时间处理函数
DATE(expr):将字段处理成date类型
DATEDIFF(expr1,expr2) : 返回两个日期之间的差值(expr1 -expr2)
DATE_ADD(date,INTERVAL expr unit)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
unit参数可以是下列值:
| unit 值 |
|---|
| MICROSECOND |
| SECOND |
| MINUTE |
| HOUR |
| DAY |
| WEEK |
| MONTH |
| QUARTER |
| YEAR |
| SECOND_MICROSECOND |
| MINUTE_MICROSECOND |
| MINUTE_SECOND |
| HOUR_MICROSECOND |
| HOUR_SECOND |
| HOUR_MINUTE |
| DAY_MICROSECOND |
| DAY_SECOND |
| DAY_MINUTE |
| DAY_HOUR |
| YEAR_MONTH |
DATE_FORMATE(expr,format):函数来显示不同的格式
具体格式参考:https://www.w3school.com.cn/sql/func_date_format.asp
YEAR(expr):字段的年份
MONTH(expr):字段的月份
DAY(expr):字段的日
SELECT DATE(full_name) FROM `py_etl_private_fund_base_info_2_1`
SELECT DATEDIFF(established_date,liquidation_date) FROM `py_etl_private_fund_base_info_2_1`
SELECT py_private_id,DATE_ADD(established_date,INTERVAL 2 DAY) FROM `py_etl_private_fund_base_info_2_1`
SELECT py_private_id,DATE_ADD(established_date,INTERVAL 2 DAY_MINUTE) FROM `py_etl_private_fund_base_info_2_1`
SELECT py_private_id,DATE_FORMAT(NOW(),'%m-%d-%Y') FROM `py_etl_private_fund_base_info_2_1`
3)数值处理函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmcE1tF1-1597915497361)(C:\Users\ADMINI~1\AppData\Local\Temp\1597817153982.png)]
还有round()
SELECT py_private_id,abs(closed_period),cos(closed_period),exp(closed_period),tan(closed_period),sin(closed_period) FROM `py_etl_private_fund_base_info_2_1`
4)聚集函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zwWYeC4u-1597915497362)(C:\Users\ADMINI~1\AppData\Local\Temp\1597817178063.png)]
SELECT avg(closed_period),count(closed_period),max(closed_period),min(closed_period),sum(closed_period) FROM `py_etl_private_fund_base_info_2_1
# 其中 avg 只对于单个列,多列时必须使用多个 avg 函数,且忽略 null值
# count(*)是对表中行的数目进行计数,不管表列中包含的是空值还是非空值,而 count(column) 是对特定列进行计数,忽略NULL值的
SELECT * FROM `py_etl_private_fund_base_info_2_1`; 长度 170815
SELECT count(*) FROM `py_etl_private_fund_base_info_2_1`; # 两个语句输出的长度等价 长度 170815
SELECT count(fund_manager) FROM `py_etl_private_fund_base_info_2_1`; 长度 161704
2.SQL 高级查询
1)子查询
SELECT fund_manager FROM `py_etl_private_fund_base_info_2_1`
where full_name in (SELECT full_name FROM `py_etl_private_fund_base_info_2_1` WHERE fund_type = "私募证券投资基金" );
2)联结/内部联结/外部联结
联结:
SELECT id,cp_id,py_private_id FROM `py_etl_product_bank_financial_gather`,`py_etl_private_fund_base_info_2_1`
where py_etl_product_bank_financial_gather.id = py_etl_private_fund_base_info_2_1.py_private_id;
这也叫做交叉连接
上面那句话 等价
SELECT id ,cp_id,py_private_id FROM `py_etl_product_bank_financial_gather` CROSS JOIN `py_etl_private_fund_base_info_2_1`
where py_etl_product_bank_financial_gather.id = py_etl_private_fund_base_info_2_1.py_private_id
如果不写where 条件 就是 笛卡尔积
SELECT id,py_private_id FROM `py_etl_product_bank_financial_gather`,`py_etl_private_fund_base_info_2_1` ;
SELECT id,py_private_id FROM `py_etl_private_fund_base_info_2_1` ,`py_etl_product_bank_financial_gather`;
# 书上说:没有指明联结 就是笛卡尔积,第一个表中的行数乘以第二个表中的函数
# 个人发现 把表的位置进行调换,结果是一致的,应该是根据第一个字段来的,来判断是哪个表,再按照两个表的数据
用交叉连接的写法
SELECT id ,cp_id,py_private_id FROM `py_etl_product_bank_financial_gather` CROSS JOIN `py_etl_private_fund_base_info_2_1`
稍难版本:
SELECT
a.id,
a.cp_id,
b.py_private_id,
b.liquidation_date
FROM
`py_etl_product_bank_financial_gather` a
CROSS JOIN (
SELECT
py_private_id,
max(liquidation_date) AS liquidation_date
FROM
`py_etl_private_fund_base_info_2_1`
GROUP BY
py_private_id
) b
内部联结、外部联结必须要与on 相连。
inner join、right (outer) join、left(outer) join 、full (outer) join
简易版本:
SELECT id ,cp_id,py_private_id FROM `py_etl_product_bank_financial_gather` LEFT JOIN `py_etl_private_fund_base_info_2_1`
on py_etl_product_bank_financial_gather.id = py_etl_private_fund_base_info_2_1.py_private_id
稍难版本:
SELECT
a.id,
a.cp_id,
b.py_private_id,
b.liquidation_date
FROM
`py_etl_product_bank_financial_gather` a
RIGHT JOIN (
SELECT
py_private_id,
max(liquidation_date) AS liquidation_date
FROM
`py_etl_private_fund_base_info_2_1`
GROUP BY
py_private_id
) b ON a.id = b.py_private_id
# 需要注意的是 groupby 也可根据别名进行分组
SELECT
cp_id as new_id,
max(id) AS id
FROM
`py_etl_product_bank_financial_gather`
GROUP BY
new_id
3)组合查询
UNION
1.UNION 必须由两条以上的或两条以上的SELECT 语句组成,语句之间用UNION 隔开
2.UNION 每个查询 必须包含相同的列、表达式、聚集函数(不过各个列不需要以相同的次序列出)
3.列数据类型必须兼容:类型不必完全相同,但是必须是DBMS可以隐含的转换的类型(不同的数值类型或者不同的日期类型)
SELECT id,cp_id,product_name FROM `py_etl_product_bank_financial_gather`
UNION
SELECT py_private_id as id,closed_period as cp_id,full_name as product_name FROM `py_etl_private_fund_base_info_2_1`
UNION 会 取消重复的行,如果需要 不取消重复的行 使用 UNION ALL
对比例子
SELECT condition_type,product_name FROM `py_etl_product_bank_financial_gather`
UNION
SELECT py_private_id as condition_type,full_name as product_name FROM `py_etl_private_fund_base_info_2_1`
SELECT condition_type,product_name FROM `py_etl_product_bank_financial_gather`
UNION ALL
SELECT py_private_id as condition_type,full_name as product_name FROM `py_etl_private_fund_base_info_2_1`
2655


,日期处理函数(DATE,DATEDIFF,DATE_ADD,DATE_FORMATE)&spm=1001.2101.3001.11974&articleId=108128319&d=1&t=3&u=22f99ae2e88b491082beb06973777404)

被折叠的 条评论
为什么被折叠?



