基本语法规则
- 如果sql 别名需要包含中文,最常见的情况在单位。有网友说 可以使用双引号包裹起来就ok,比如: select Alone as “A(bcde)” from table where 单引号都解决不了问题,必须双引号。但是hive中单引号 双引号都不行(hive情况亲测)
- sql一个查询内部内部的别名可以在order by后面使用但是 不能再group having后面使用 百度知道查询
- 表别名在兄弟查询 一级 表别名在父子查询之间的可用性问题
- 查询列可否使用其他查询列的别名 比如 a b (a+b)
sql优化
语法细节
- 只列出该查的列
- 使用count(1),而不是count( * )
- where 后面条件如果在都没有索引的条件下,个人觉得应该是扫描次数一样,但是如果将条件限制非常强写在前面,该条件如果不满足,后面的就不用比较了。可以有效减少比较次数
- UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。 - 查询列要不在select后面的聚合函数中,要么在group by中,同时group by中的列可以不出现在select后面(等待验证)
索引和尽量使用索引的优化
- having字句的每一个元素也必须出现在select元素列表,Oracle除外
- where 1 = 1 这种形式的东西一来可以使用在sql语句拼接,以保证语法形式的正确性。同时1=2 这种可以用来只复制表结构。
- 多列去重count,count本身是不能统计多个字段的,他的参数只有一个。只能变相通过子查询或者 字符串拼接来间接完成。
多列查询实例其他
即席查询是指那些用户在使用系统时,根据自己当时的需求定义的查询。即席查询生成的方式很多
注意
尤其需要注意的是如果我们聚合函数是作用在列上面的 千万不要写出 a, b,sum(a)+sum(b) 的带语病的sql