SQL基础语句总结
来源:Asp之家 发布时间:2011-03-11 14:54:00
写在前面:本节主要讲述一些基本的,常用的SQL语句,而非数据库方面的基本知识。数据库方面的知识留待以后再讲,现在就我们平常常用的一些SQL语句展开论述。
本节会涉及到SQL的基本句法,SQL的执行顺序,SQL之间的组合,动态SQL语句四个方面。这四个方面之间没有前后顺序之分,是相辅相成,其内在还是有很多联系的。
一. 四种基本的SQL语句
1. 查询
select * from table
2. 更新
update table set field=value
3. 插入
insert [into] table (field) values(value)
4. 删除
delete [from] table
二.语句的执行顺序
1.语法分析
分析语句中语法是否符合规范,衡量语句中各表达式的意义。
2.语义分析
检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。
3.选择优化器
不同的数据库有不同的算法(这个涉及到数据结构),数据库会根据自己的理解(数据库本身)为 SQL语句选择不同的优化器,不同的优化器会选择不同的“执行计划”
4.运行“执行计划”
根据“执行计划”执行SQL语句。
以上所述是数据执行时的大体路线。
5.select 语句的执行顺序
借用ItZik Ben-Gan、Lubor Kollar、Dejan Sarka所著的《Sql Server 2005 技术内幕:T-SQL查询》的一段话足以说明:
(8) select (9) distinct (11) <top_specification > <select_list>
(1)from<lef t_table>
(3) <join_type> join <right_table>
(2) on <join _condition>
(4) where <where_condition>
(5)group by <group_by_list>
(6) with {cube|rollup}
(7)having(having_condition)
(10) order by <order_by_condition>
从这个顺序可以看出,所有的查询语句都是从from开始执行的。在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的基础。
第一步:from
首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表vt1 .
第二步:on
接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 .
第三步:join
如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3.
第四步:多表
如果 from 子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3.
第五步:where
应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来,而where的移除的最终的。
第六步:group by
分组,生成虚拟表 vt4
第七步:having
对vt4应用having筛选器,生成虚拟表 vt5
第八步:select
处理select 列表,生成虚拟表vt6
第九步:distinct
将vt6 中重复的行去掉,生成虚拟表vt7
第十步:order by
将vt7中的行按order by 子句中的列列表排序,生成一个游标vc8
第十一步:top
从vc8的开始处选择指定数量或比例的行,生成虚拟表vt9,并返回给调用者
三. SQL语句扩展
1.select
1.1 选择性插入语句
1.1.1 Insert into table1 (field1 ) Select field2 from table2
要求table1必须存在。
1.1.2 select field1 into table1 from table2
要求table1不存在,在运行时会自动创建表名为table1,字段名为field1的一个表。
猜你喜欢
- 一段时间以来,发现有很多人XHTML都不会用,不光是普通的初学者,有的程序员都不是很清楚该怎么写这个XHTML,我这里呢算是把一些常见的应用
- 学习自然语言的最好方法就是溶入相应的语言环境在交流中学习,学习一种编程语言的最好方法就是看例程。为了帮助大家建立wml应用的第一印象,所以请
- 一个封装好的JavaScript拖动类,使用方便:<div id="idDrag" style="bor
- MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上
- 1、前言 MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使用简便、
- ORCLE数据库备份策略 1.通过使用exp和imp命令实现数据库导出和导入。 有三种模式: a. 用户模式: 导出(导入)用户所有对象以及
- 有时会在存储过程中处理一些XML格式的数据,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 M
- 今天研究了一下JS的用setAttribute方法实现一个页面两份样式表的效果,具体方法如下:第一步:在连接样式表的元素里定义一个id,例如
- 增大 SGA 已经缓冲看来对于性能的提升并不显著,加载时间只提升了 1.73%。下面我们增加 SGA 重做日志的大小: DB3: Log B
- 前面已经了解了关于PL/SQL编程的基础,本文将结合一个案例来加深对这些知识点的理解。一. 案例介绍 某数据库有两张表,是关于某公司员工资料
- 有多少次你在考虑怎样设置数据库时感到为难?其实,如果你在Linux上使用MySQL,就不会有这种情况了。在Linux上使用Webmin图形界
- <input type=button value=刷新 onclick="hist
- HTML 5 和 XHTML 2规范草稿公布以来,一直存在很大的争议。HTML 5是由包括Google、Mirosoft、Mozilla、O
- 在进行ASP网站开发时,有时需在客户端调用MSSQL数据库的数据进行打印,若调用数据量小,可以通过在客户端运用FileSystemObjec
- 原文作者:青女 附注及色样添加:Quester西式的色名及色样表,可以参见以下链接 (Java 类色彩兼容):http
- asp如何显示全部的环境变量?<%@Language="VBScript"%><%dim H
- 用VBS语言实现的一个简单网页计算器,功能:可以进行加法、减法、乘法、除法、取反、开根号、及指数运算。虽然简单但是比起windows xp自
- 1。在Asp页面首部<head>加入 Response.Buffer =
- create or replace PROCEDURE proceudre_name AS BEGIN DECLARE sPara VARC
- SQLServer中建立与服务器的连接时出错的解决方案如下:步骤1:在SQLServer 实例上启用远程连接1.指向“开始->程序-&