SQL基础语句总结_sql语句总结

2020-02-27 其他工作总结 下载本文

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)(1)from(3)join(2)on(4)where(5)group by(6)with {cube|rollup}(7)having(having_condition)(10)order by 从这个顺序可以看出,所有的查询语句都是从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的一个表。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 [servernameinstancename.]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 知识: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)提示:在acce中不正确,原因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 功能:排序

技巧: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' 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基础语句总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
SQL基础语句总结
点击下载文档
相关专题 sql语句总结 语句 基础 sql sql语句总结 语句 基础 sql
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文