SQL基础语句总结.doc_第1页
SQL基础语句总结.doc_第2页
SQL基础语句总结.doc_第3页
SQL基础语句总结.doc_第4页
SQL基础语句总结.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL基础语句总结 写在前面本节主要讲述一些基本的,常用的SQL语句,而非数据库方面的基本知识。 数据库方面的知识留待以后再讲,现在就我们平常常用的一些SQL语句展开论述。 本节会涉及到SQL的基本句法,SQL的执行顺序,SQL之间的组合,动态SQL语句四个方面。 这四个方面之间没有前后顺序之分,是相辅相成,其内在还是有很多联系的。 一.四种基本的SQL语句1.查询select*from table2.更新update tableset field=value3.插入insertintotable(field)values(value)4.删除deletefromtable二.语句的执行顺序1.语法分析分析语句中语法是否符合规范,衡量语句中各表达式的意义。 2.语义分析检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。 3.选择优化器不同的数据库有不同的算法(这个涉及到数据结构),数据库会根据自己的理解(数据库本身)为SQL语句选择不同的优化器,不同的优化器会选择不同的“执行计划”4.运行“执行计划”根据“执行计划”执行SQL语句。 以上所述是数据执行时的大体路线。 5.select语句的执行顺序借用ItZik Ben-Gan、Lubor Kollar、Dejan Sarka所著的Sql Serverxx技术内幕T-SQL查询的一段话足以说明 (8)select (9)distinct (11) (1)from (3)join (2)on (4)where (5)group by (6)withcube|rollup (7)having(having_condition) (10)order by从这个顺序可以看出,所有的查询语句都是从from开始执行的。 在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的基础。 第一步from首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表vt1.第二步on接下来便是应用on筛选器,on中的逻辑表达式将应用到vt1中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表vt2.第三步join如果是outer join那么这一步就将添加外部行,left outerjion就把左表在第二步中过滤的添加进来,如果是right outer join那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表vt3.第四步多表如果from子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表vt3.第五步where应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outerjoin中还可以把移除的行再次添加回来,而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.select1.1选择性插入语句1.1.1Insert into table1(field1)Select field2from table2要求table1必须存在。 1.1.2select field1intotable1from table2要求table1不存在,在运行时会自动创建表名为table1,字段名为field1的一个表。 1.2打开其它数据源/*OracleSvr为链接服务器名,本示例假定已经创建了一个名为ORCLDB的Oracle数据库别名。 */EXEC sp_addlinkedserverOracleSvr,-链接服务器名OracleSvr,sysname类型MSDAORA,-provider_name数据源提供程序,此处为oracleORCLDB-数据源名称GO Select*from OPENQUERY(OracleSvr,SELECT name,id FROMjoe.titles)如果有多个sql server实例SELECT*FROMservernameinstancename.pubs.dbo.authors.注意一个对象的完整名称包括四个标识符服务器名称、数据库名称、所有者名称和对象名称。 其格式如下server.database.owner_name.object_name中间的名称可以省略,但是.不可以省略。 如serverobject_name2.update2.1多表更新Update table1set table1.field1=table2.field2from table1,table2/*猜测下连接方式全联接FULLOUTERJOIN*/where table1.field3=table2.filed3知识SQL Server的update语句中from后可跟多个表,Oracle则不支持该用法Oracle中Update table1set table1.field1=(select table2.field2from table2where.field3=table2.filed3)3.insert3.1插入语句的规范问题在sql server2000,sql serverxx中标准语句insert intotable(field)values(value)提示在aess中不正确,原因sql语句不规范,因此在书写sql语句的过程中一定要按正规的语法来写。 4.delete4.1标准删除标准语句delete from table wherecondition提示同insert4.2其它删除4.2.1truncate语法truncate tabletable_name删除表中所有行,不记录单个行删除操作,不记录日志,,所有速度比Delete快。 4.2.2drop语句Drop tabletable_name删除表及相关,有fk约束的不能删,先去年fk;系统表不能使用。 5.order by功能排序技巧order bynewid()随机排序四.动态SQL语句4.1基本原则4.1.1预编译问题在EXECUTE执行之前,数据库不会编译EXECUTE语句内的语句,动态SQL语句就是放到存储过程中,它也不会预先编译。 4.1.2什么时候使用动态SQL语句字段名,表名,数据库名作为变量时,必须用动态SQl语句4.2.execute4.2.1语法exec(select*from table_name wherename=+name+)-括号不能少4.2.2传递参数-假设存储过程test_sp中需要一个参数类型nvarchar (50)名称parm Declareparms nvarchar (50)Setparms=测试变量Exec test_spparm=parms方括号内的可以省略如果是批处理中的第一句,则可以省略Exec4.2.3输出参数declarenum int,field int,sqls nvarchar (4000)Setfield=1setsqls=selecta=count(*)from table_name wherefield=fieldexec sp_executesqlsqls,Na intoutput,field int,num output,field selectnum4.3.sp_executesql语法executesp_executesql Nselect*fromtable_name wherefie

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论