您当前位置:优侠库 > 资讯攻略 >
来源:未知
2022-03-03 05:52:12 浏览: 分类:资讯攻略

SQL基础语句总结

写在前面:这一节主要讲一些基本的、常用的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

攻略资讯
安卓软件
安卓游戏