SQL的别名和SQL的执行顺序和SQL优化

SQL的别名

1、不可以在where子句中使用列名的别名,即select name t from emp where t>2999;是不允许的

2、使用别名的好处:

  提高SQL的易读性

  提高SQL的解析执行效率

  语法检查

  语义检查

  共享池检查

  生成执行树

  执行

3、SQL的硬解析和软解析?

SQL的执行顺序

1、from语句--where语句--group by语句--having语句--select语句--order by语句

rownum的使用

select * from emp rownum<=2  /*查找emp表的前两条记录*/

select * from (select rownum t,ename from emp) m

where m.t>=5 and m.t<=10 /*查询某个范围的记录,先查询出rownum并保存为临时表m,再进行查询*/

where和having的区别?

  where对分组前的小组内的详细信息进行过滤

  having对分组后的信息进行过滤

内连接,外连接,自连接?

SQL优化

1、避免使用select * ,而是具体指出选择哪些列

2、SQL大小写,数据库在解析sql时,先把SQL语句转换为大写,再进行解析操作,所以建议直接提供大写的SQL语句。

3、过滤时,>和>=,使用>=优先,如a>2000和a>=2001,这样可以避免过滤2000和2001之间的小数,可以调高效率

4、where子句中,不等于判断会使索引失效。

5、where子句中,对列做运算,例如,加减乘除,会使索隐列失效。所以尽量不要在索隐列上做操作。

6、模糊查询时,like "%abc%",前模糊会导致索引失效,后模糊不会导致索引失效。

7、in和exists的区别?

  1、in适合内表小外表大的情况,select * from emp where emp.deptno in (select deptno from dept)

  2、exists适合外表小内表大的情况.如此运用可提升效率

  注:由于两者对表的连接方式不同,导致以上区分,in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

8、not in 和 not exists 用法同上

9、某些情况下可以使用exists替换distinct。

时间: 2024-12-10 15:38:09

SQL的别名和SQL的执行顺序和SQL优化的相关文章

sql执行顺序及编写优化依据

每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用.只是最后一步生成的表才会返回 给调用者.如果没有在查询中指定某一子句,将跳过相应的步骤. 标准的 SQL 的解析顺序为:(1).FROM 子句, 组装来自不同数据源的数据(2).WHERE 子句, 基于指定的条件对记录进行筛选(3).GROUP BY 子句, 将数据划分为多个分组---group by的对象有可能由聚合函数产生(max.min等)(4).使用聚合函数进行计算(5).

容易被忽略的事----sql语句中select语句的执行顺序

关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意. 今天在一次面试的时候自己见到了,感觉没一点的印象,所以也就没有答上来,现在整理一下吧,希望提醒自己,也能够帮到其他的朋友.如下: (8) SELECT (9)DISTINCT (11) <TOP_specification> <select_list> (1) FROM <left_table> (3) <join_

【Oracle】SQL 中Select语句完整的执行顺序

SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函数进行计算: 5.使用having子句筛选分组: 6.计算所有的表达式: 7.select 的字段: 8.使用order by对结果集进行排序. SQL语言不同于其他编程语言的最明显特征是处理代码的顺序.在大多数据库语言中,代码按编码顺序被处理.但在SQL语句中,第一个被处理的子句式FROM,而不是

sql中select语句的逻辑执行顺序

下面是SELECT语句的逻辑执行顺序: FROMONJOINWHEREGROUP BYWITH CUBE or WITH ROLLUPHAVINGSELECTDISTINCTORDER BYTOP MICROSOFT指出,SELECT语句的实际物理执行顺序可能会由于查询处理器的不同而与这个顺序有所出入. GROUP BY和HAVING 不能使用别名,就是因为他们先于select执行.

SQL语句中SELECT语句的执行顺序

SELECT语句的执行的逻辑查询处理步骤: 执行顺序 语句 8 SELECT 9 DISTINCT 11 <TOP_specification> <select_list> 1 FROM <left_table> 3 <join_type> JOIN <right_table> 2 ON <join_condition> 4 WHERE <where_condition> 5 GROUP BY<group_by_li

sql执行顺序及性能优化

sql语句的执行步骤:1.语法分析2.语义分析3.视图转换4.表达式转换5.选择优化器6.选择连接方式7.选择连接顺序8.选择数据的搜索路径9.运行"执行计划" sql查询处理的步骤:(8)SELECT(9)DISTINCT(11)<TOP_specification><select_list>(1)FROM <left_table>(3)<join_type>JOIN<right_table>(2)ON <join_c

sql(join on 和where的执行顺序)

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录. inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行. full join:外连接,返回两个表中的行:left join + right join. cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数. 关键字: on 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表

mysql五补充部分:SQL逻辑查询语句执行顺序

阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition>

mysql第四篇--SQL逻辑查询语句执行顺序

mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition&g