分区表
- 功能:
辅助查询,缩小查询范围 - 用法:
1 . 单分区表建表语句:
create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id,content,dt三列
2 . 双分区建表语句:
create table day_hour_table (id int, content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列
3 . 基于分区的查询的语句:
SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08'
4 . 查看分区语句:
show partitions day_hour_table
心如大海
查询易错点
1 . group by不支持别名,order_by 推荐使用别名
2 . 查询多列时,不能针对某列使用distinct,因为对多列使用distinct,只有完全相同的才会被去重
select distinct ID,AA,BB from tName
查找ID+AA+BB列都不重复的
3 . A表left join B表时,如果on a.user=b.userid,where条件设置b.userid is null,则where条件不能再出现B表字段,否则查询结果为空。
因为既然要求B表链接为空,则在where子句设置B表其他字段的限制必然是找不到该字段的,可以on增加条件限制
4 . 多张表关联时
select count(A.id) from A
left join B
on A.id=B.id
left join C
on A.id=C.id
与
select count(A.id) from A
left join B
on A.id=B.id
left join C
on B.id=C.id
2者取出来的行数值是不一样的
5 . Join语法概述
http://www.cnblogs.com/BeginMan/p/3754322.html
- 5.1
- INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。
- LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
- RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
- Cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积
- 5.2 性能优化
- left join/right join VS inner join
- 尽量用inner join.避免 LEFT JOIN 和 NULL
- on与 where的执行顺序,where在匹配完成后才进行过滤
- 尽量避免子查询,而用join
6 . 关键字查询时需加上反引号``