SQL基础语句总结

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

写在前面:本节主要讲述一些基本的,常用的 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 语句。
水果礼盒 www.bzs8.com 理胎发 www.bjhgg.com.cn

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

以上所述是数据执行时的大体路线。 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.

水果礼盒 www.bzs8.com

理胎发 www.bjhgg.com.cn

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

第四步:多表 如果 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 选择性插入语句

水果礼盒 www.bzs8.com

理胎发 www.bjhgg.com.cn

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

1.1.1 Insert into table1 (field1 ) Select field2 from table2 要求 table1 必须存在。 1.1.2 select field1 into table1 from table2 要求 table1 不存在,在运行时会自动创建表名为 table1,字段名为 field1 的一个表。 1.2 打开其它数据源 /* OracleSvr 为链接服务器名 ,本示例假定已经创建了一个名为 ORCLDB 的 Oracle 数据库别名。*/ EXEC sp_addlinkedserver 'OracleSvr', --链接服务器名 OracleSvr,sysname 类型 'MSDAORA', --provider_name 数据源提供程序,此处为 oracle 'ORCLDB' --数据源名称 GO Select * from OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 如果有多个 sql server 实例: SELECT *FROM [servername\instancename.]pubs.dbo.authors. 注意:一个对象的完整名称包括四个标识符:服务器名称、数据库名称、所有者名称 和对象名称。其格式如下: [ [ [ server. ] [ database ] .] [ owner_name ] .] object_name 中间的名称可以省略,但是.不可以省略。如:server…object_name 2.update 2.1 多表更新 Update table1 set table1.field 1=table2.field2 from table1,table2 /*猜测下连接方式全联接 FULL [OUTER] JOIN */ where table1.field3= table2 .filed3

水果礼盒 www.bzs8.com

理胎发 www.bjhgg.com.cn

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

知识:SQL Server 的 update 语句中 from 后可跟多个表,Oracle 则不支持该用法 Oracle 中:Update table1 set table1.field1= (select table2.field2 from table2 where .field3= table2 .filed3) 3.insert 3.1 插入语句的规范问题 在 sql server 2000,sql server 2005 中 标准语句:insert into table(field) values (value) 提示:在 access 中不正确,原因 sql 语句不规范,因此在书写 sql 语句的过程中一定 要按正规的语法来写。 4.delete 4.1 标准删除 标准语句:delete from table where condition 提示:同 insert 4.2 其它删除 4.2.1 truncate 语法:truncate table table_name 删除表中所有行,不记录单个行删除操作,不记录日志,,所有速度比 Delete 快。 4.2.2 drop 语句: Drop table table_name 删除表及相关,有 fk 约束的不能删,先去年 fk;系统表不能使用。 5.order by 功能:排序

水果礼盒 www.bzs8.com

理胎发 www.bjhgg.com.cn

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

技巧:order by newid() 随机排序 四. 动态 SQL 语句 4.1 基本原则 4.1.1 预编译问题 在 EXECUTE 执行之前,数据库不会编译 EXECUTE 语句内的语句,动态 SQL 语句就是 放到存储过程中,它也不会预先编译。 4.1.2 什么时候使用动态 SQL 语句 字段名,表名,数据库名作为变量时,必须用动态 SQl 语句 4.2.exec[ute] 4.2.1 语法 exec (?select * from table_name where name=???+@name+????) --括号不能少 4.2.2 传递参数 --假设存储过程 test_sp 中需要一个参数:类型 nvarchar(50) 名称 @parm Declare @parms nvarchar(50) Set @parms=?测试变量? Exec test_sp [@parm=]@parms –方括号内的可以省略 如果是批处理中的第一句,则可以省略 Exec 4.2.3 输出参数 declare @num int, @field int, @sqls nvarchar(4000) Set @field=1 set @sqls='select @a=count(*) from table_name where field=@field'

水果礼盒 www.bzs8.com

理胎发 www.bjhgg.com.cn

饭店装修 www.ltcyzs.com

服装店装修 www.ltdmzs.com

exec sp_executesql @sqls,N'@a int output,@field int',@num output ,@field select @num 4.3.sp_executesql 语法:exec[ute] sp_executesql N?select * from table_name where field=@field?,N?@field int?,@field=1 使用 sp_exexutesql 比使用 exec 更有效率. 结束语:以上是 SQL 中常用的语句,及其执行时的顺序。不管是 SQL Server 系列, mysql,access,Oracle 系列这些都基本相同。如果要在数据库方面做高深的研究,则多看一下 其自带的帮助,多练习,多看一些数据库原理方面的书。

水果礼盒 www.bzs8.com

理胎发 www.bjhgg.com.cn


相关文档

sql基本语句(代码总结)
SQL语句总结
SQL语句大全 总结
T-SQL常用语句总结
常用SQL语句简单总结
总结经典常用的SQL语句(1)
总结经典常用的SQL语句(2
常用的SQL数据库语句总结
SQL语句经典总结大全
标准sql语句总结
电脑版