在网上看到一篇文章,内容如下:
SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序;
8、对select列筛选。我对其中的第一步不了解。组装的含义是什么?把数据读到内存中吗?好象
不对,如果表的数据量非常大,显然是不行的。哪位大虾解释下
SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序;
8、对select列筛选。我对其中的第一步不了解。组装的含义是什么?把数据读到内存中吗?好象
不对,如果表的数据量非常大,显然是不行的。哪位大虾解释下
这也就是说from组装来自不同数据源的数据,很明显,不同数据源,即组装来自不同的数据库的数据,使用什么数据库,就应该组装哪个数据库的数据。至于组装的含义,应该是sql底层的名词吧,这只是个人的一些理解,仅供参考
组装就是说把两张表的数据连起来
比如下面的语句
select * from t1,t2;
在select后面并没有指定某个特定的列 而是选中所有列
这个时候oracle就会把两张表做一个笛卡尔积(3*2=6) 每条记录对应每条记录拼接起来
SQL> select * from t1; ID NAME
---------- ----------
1 wh
2 wp
3 wrSQL> select * from t2; ID NAME
---------- ----------
4 xx
5 yy
SQL> select *
2 from t1,t2; ID NAME ID NAME
---------- ---------- ---------- ----------
1 wh 4 xx
2 wp 4 xx
3 wr 4 xx
1 wh 5 yy
2 wp 5 yy
3 wr 5 yy6 rows selected.
应该是对数据存储表的解析
因为马上要通过where条件进行筛选
我的理解是from后面出现的是你要操作的数据的来源,
这个来源可能是单个表,也可能是多各表,还可能是自己组装出来的一个表
例:
select * from tablename1
select * from tablename2
select * from (select rownum num, tablename1.* from tablename1)
where num between 5 and 10 其中最后一个sql语句from后面的数据源为自己组装出来的数据源---目的为选出oracle数据库表
tablename1中5到10行数据(分页显示)。
继续等待更多的解释.
记录一下
组装就是说把两张表的数据连起来
比如下面的语句
select * from t1,t2;
在select后面并没有指定某个特定的列 而是选中所有列
关系理论里面有选择,投影和连接,这里的from组装事实上就是连接,把需要的源表按你的规则连接组装起来,然后where就是选择,选择出满足条件的数据,中间经过一系列排序分组等操作,最后select就是投影出来,最后形成我们想要的结果集了
例子:select e.name || ‘工作于’|| d.depName from emp e join dep d on e.depId = d.depIp where e.id = 123;
比如select * from a,b where a.id=b.id and a.col1>'001' and b.col1<'008';
应该是先通过条件a.col1>'001'取得a符合条件数据,过滤掉a表不符合条件的数据
通过条件b.col1<'008'取得b符合条件数据,过滤掉b表不符合条件的数据
然后再进行连接组装吧
否则,将组装ab表的笛卡尔积