【数据库复习_查询的逻辑处理】
来源:互联网 发布:网络销售香烟 编辑:程序博客网 时间:2024/05/02 19:20
对于一条标准的SQL语句:
SELECT DISTINCT <TOP_specification> <select_list> FROM table WHERE <where_condition> GROUP BY <group_condition> HAVING <having_condition> ORDER BY<list>
查询的逻辑处理过程是分阶段完成的。每个阶段都会产生一张虚拟表,该表会作为下一个阶段的输入。这些中间过程产生的虚拟表不可用。只有最后生成的虚拟表才返回给查询用户。
下图说明了执行步骤:
下面是对逻辑处理过程中各个步骤的说明,请注意虚拟表(VTn)的生成步骤:
· 步骤1(FROM):该步骤中用于验证查询的源表,并处理表操作符。每个表操作符应用于一系列子步骤。例如,在上面用于联接的(1-J)步骤中会涉及如下的子步骤。最终这些子步骤完成后,将生成虚拟表VT1。
Ø (1-J1):执行left_table和right_table两个表的交叉联接(笛卡儿乘积),生成虚拟表VT1-J1;
Ø (1-J2):对笛卡儿乘积应用ON筛选器,生成虚拟表VT1-J2;
Ø (1-J3):如果是外部联接,会在该步骤中将被ON筛选掉的外部行添加到VT1-J2中,生成VT1-J3。否则,将跳过该步骤。
· 步骤2(WHERE):对VT1应用WHERE筛选器,将符合筛选条件的行插入到VT2中。
· 步骤3(GROUP BY):按GROUP BY子句中的列列表对VT2中的行分组,生成VT3。如果语句中包含WITH CUBE或WITH ROLLUP,则将分组统计结果再次加总后插入VT3,生成VT3-RC。
· 步骤4(HAVING):对VT3应用HAVING筛选器,将符合筛选条件的行插入到VT4。
· 步骤5(SELECT):处理SELECT子句中的元素,生成VT5。
u (5-1)计算表达式:该步骤计算SELECT列表中的表达式,生成VT5-1;
u (5-2)DISTINCT:从VT5-1中移除重复行,生成VT5-2;
u (5-3)TOP:该步骤根据ORDER BY子句中指定的排序规则,从VT5-2的开始处筛选出指定数量或比例的行。
· 步骤6(ORDER BY):该步骤对VT5-3中的行按ORDER BY子句中的列列表进行排序,生成一个游标VC6。
- 【数据库复习_查询的逻辑处理】
- 【数据库复习_基本查询】
- 查询处理的逻辑顺序
- SELECT查询的逻辑处理
- 逻辑查询处理注意的地方
- 逻辑查询处理的步骤序号
- MySQL-sql的逻辑查询处理
- 【数据库复习_索引】
- 【数据库复习_视图】
- 【数据库复习_触发器】
- 【数据库复习_游标】
- 【数据库复习_事务】
- 逻辑查询处理阶段
- SQL逻辑查询处理
- SQL逻辑查询处理
- SQL 逻辑查询处理
- MySQL逻辑查询处理
- 逻辑查询处理的步骤和连接查询
- 带上拉加载的SwipeRefreshLayout
- WingIDE安装破解(Ubuntu下也可使用)
- android代码实现圆角布局及selector背景选择
- HttpGet+聚合数据查询空气状况
- 07分布式内存NOSQL_redis key操作命令
- 【数据库复习_查询的逻辑处理】
- MATLAB 直方图,线性变换,直方图均衡化
- android sdk manager无法下载更新解决办法
- AngularJS
- android去掉Launcher3中的hotseat
- POJ2387----Til the Cows Come Home(dijkstra)
- 【RTSP/RTP流媒体】3、RTSP/RTP交互
- Android竖屏录制视频
- Magento获得国家和地区信息