写在前面:这一节主要讲一些基本的、常用的SQL语句,而不是数据库的基础知识。数据库的知识后面会讲到。现在,我们将讨论一些常用的SQL语句。
本节涉及四个方面:SQL的基本语法、SQL的执行顺序、SQL的组合、动态SQL语句。这四个方面之间没有先后顺序,但是相辅相成,相互之间还是有很多联系的。
I .四个基本SQL语句
1.询问
从表中选择*
2.更新
更新表集字段=值
3.插入
将表(字段)值(值)插入[到]表中
4.删除
从表中删除
二。语句的执行顺序
1.语法分析
分析语句中的语法是否符合规范,衡量语句中每个表达式的含义。
2.语义分析
检查语句涉及的所有数据库对象是否存在,用户是否有相应的权限。
3.选择优化程序
不同的数据库有不同的算法(这涉及到数据结构)。数据库会根据自己的理解(数据库本身)为SQL语句选择不同的优化器,不同的优化器会选择不同的“执行计划”
4.运行“执行计划”
根据"执行计划"执行SQL语句。
以上是数据执行的大致路线。
5.5.select语句的执行顺序
借用ItZik Ben-Gan、Lubor Kollar和Dejan Sarka的《sql server 2005的内部技术:T-SQL查询》中的一段话就足以说明:
(8) select (9) distinct (11)top _ specification & gt& ltselect _ list & gt
(1)从& ltlef t _ table & gt
(3)& lt;join _ type & gt加入& ltright _ table & gt
(2)on & lt;join _condition >
(4)凡& ltwhere _ condition & gt
(5)分组依据& ltgroup _ by _ list & gt
(6)使用{cube|rollup}
(7)拥有(having_condition)
(10)订单由& ltorder_by_condition >
从这个序列可以看出,所有的查询语句都是从from。在执行过程中,每一步都会为下一步生成一个虚拟表,这个虚拟表是下一步执行的基础。
第一步:从
首先,对from子句中的前两个表执行笛卡尔积运算,然后生成一个虚拟表vt1。
第二步:打开
下一步是应用on滤波器。on中的逻辑表达式将应用于vt1中的每一行,满足on逻辑表达式的行将被筛选出来,生成虚拟表vt2。
第三步:加入
如果是外部连接,那么这一步将添加外部行。left outer jion将在左表中添加第二步中筛选的行。如果是右外连接,它将在右表中添加第二步中过滤的行,从而生成虚拟表vt3。
第四步:万用表
如果from子句中的表数多于两个表,那么将vt3与第三个表连接起来,计算笛卡尔积并生成一个虚拟表。这个过程是重复1-3的步骤,最后得到新的虚拟表vt3。
第五步:在哪里
应用where过滤器,将where过滤器引用到上一步中生成的虚拟表,并生成虚拟表vt4。这里有一个重要的细节。对于包含outer join子句的查询,有一个令人困惑的问题。您希望用on筛选器还是where筛选器来指定逻辑表达式?on和where之间的最大区别是,如果逻辑表达式应用于on,则被移除的行可以在外部连接的第三步中再次添加回来,而where的移除是最终的。
第六步:分组依据
分组以生成虚拟表vt4
第七步:拥有
将having过滤器应用于vt4以生成虚拟表vt5
第八步:选择
处理选择列表以生成虚拟表vt6
第九步:独特
删除vt6中的重复行以生成虚拟表vt7。
第十步:排序依据
根据order by子句中的列列表对vt7中的行进行排序,以生成游标vc8。
第十一步:顶部
从vc8的开头选择指定数量或比例的行,生成虚拟表vt9,并将其返回给调用者
三。SQL语句扩展
1 .选择
1.1可选插入语句
1.1.1插入表1(字段1)从表2中选择字段2
要求表1必须存在。
1.1.2从表2中选择字段1到表1
要求table1不存在,运行时会自动创建一个名为table1的表和名为field1的字段。
1.2打开其他数据源
/* oracleSvr是链接服务器的名称。此示例假设已经创建了一个名为ORCLDB的Oracle数据库别名。*/
Exec _ addlinkedserver' OracleSvr ',-链接服务器名称OracleSvr,sysname类型
' MSDAORA ',- provider_name _ name数据源提供程序,此处为oracle
ORCLDB' -数据源名称
去
Select * from OPENQUERY(OracleSvr,' SELECT name,id FROM joe.titles ')
如果有多个sql server实例:
SELECT * FROM[服务器名\实例名。]pubs.dbo.authors。
注意:对象的完整名称包括四个标识符:服务器名、数据库名、所有者名和对象名。其格式如下:
[ [ [服务器。] [数据库]。] [所有者姓名]。]对象名称
中间的名字可以省略,但是。不能省略。例如server & hellip对象名称
2 .更新
2.1多表更新
更新table 1 set table 1 . field 1 = table 2 . field 2 from
1,table1/*完全联接[外部]联接*/
其中,表1 .字段3=表2 .文件3
知识:SQL Server的update语句后面可以跟多个表,但是Oracle不支持这种用法。
Oracle:更新table1 set table1.field1=
(从表2中选择table2.field2,其中. field3= table2 .filed3)
3 .插入
3.1插入语句的规范
在sql server 2000、sql server 2005中
标准语句:插入表(字段)值(值)
提示:在access中是不正确的,因为sql语句是不规范的,所以在编写sql语句的过程中一定要按照正规的语法来编写。
4 .删除
4.1标准删除
标准语句:从where条件表中删除
提示:与插入相同
4.2其他删除
截断
语法:截断表table_name
删除表中的所有行,不记录单个行的删除,不记录日志,所有都比删除快。
4.2.2下降
语句:删除表table_name
删除表格和相关表格。如果有fk约束,就不能删除。第一,去年的fk;无法使用系统表。
5 .排序依据
功能:分类
提示:order by newid()随机排序
四。动态SQL语句
4.1基本原则
4.1.1预编译问题
在执行execute之前,数据库不会编译EXECUTE语句中的语句。即使将动态SQL语句放入存储过程,也不会提前编译。
4.1.2何时使用动态SQL语句
当字段名、表名和数据库名用作变量时,必须使用动态SQl语句。
4.2.exec[ute]
语法
exec(& lsquo;select * from table_name,其中name = & rsquo& rsquo& rsquo+@ name+& rsquo;& rsquo& rsquo& rsquo)-括号不能少。
4.2.2传递参数
-假设存储过程test_sp中需要一个参数:键入nvarchar(50) name @parm
Declare @parms nvarchar(50)
Set @ parms = & rsquo测试变量& rsquo
exec test _ sp[@ parm =]@ parms & ndash;方括号可以省略。
如果是一批中的第一句话,可以省略Exec。
输出参数
声明@num int,@field int,
@ SQL nvarchar(4000)
Set @field=1
set @ SQL = ' select @ a = count(*)from table _ name where field = @ field '
exec sp _ executesql @ sqls,N'@a int output,@field int ',@num output,@field
选择@num
4.3.sp_executesql
语法:exec[ute]sp _ execute SQL N & rsquo;。select * from table_name其中field = @ field & rsquo,N & rsquo@ field int & rsquo,@field=1
使用sp_exexutesql比使用exec更高效。
结论:以上是SQL中常用的语句及其执行顺序。无论是SQL Server系列,mysql,access,Oracle系列,这些基本都是一样的。如果想做数据库方面的高级研究,多看看它自己的帮助,多练习,多看看数据库原理方面的书。(来源:暴风生活)
关键词:SQL语句
优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。本文链接:http://www.123down.cn/gonglue/227169.html