“香菜不要啊”通过精心收集,向本站投稿了7篇如何按指定的顺序获取数据数据库教程,这次小编给大家整理后的如何按指定的顺序获取数据数据库教程,供大家阅读参考。

篇1:如何按指定的顺序获取数据数据库教程
数据
原贴地址:community.csdn.net/Expert/topic/3693/3693091.xml?temp=.6086542
测试table
create table table1 (id int,name char)
insert into table1
select 1,'q'
union all select 2,'r'
union all select 3,'3'
union all select 4,'5'
要求按指定的id顺序(比如2,1,4,3)排列获取table1的数据
方法1:使用union all,但是有256条数据的限制
select id,name from table1 where id=2
union all
select id,name from table1 where id=1
union all
select id,name from table1 where id=4
union all
select id,name from table1 where id=3
方法2:在order by中使用case when
select id ,name from t where id in (2,1,4,3)
order by (case id
when 2 then 'A'
when 1 then 'B'
when 4 then 'C'
when 3 then 'D' end)
*以上两种方法适合在数据量非常小的情况下使用
方法3:使用游标和临时表
先建一个辅助表,里面你需要的顺序插入,比如2,1,4,3
create table t1(id int)
insert into t1
select 2
union all select 1
union all select 4
union all select 3
declare @id int --定义游标
declare c_test cursor for
select id from t1
select * into #tmp from table1 where 1=2 --构造临时表的结构
OPEN c_test
FETCH NEXT FROM c_test
INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
--按t1中的id顺序插数据到临时表
insert into #tmp select id,name from table1 where id=@id
FETCH NEXT FROM c_test INTO @id
End
Close c_test
deallocate c_test
*该方法适合需要按照辅助表的顺序重排table的顺序时使用
(即辅助表已经存在的情况)
方法4:分割字符串参数
select * into #tmp from table1 where 1=2 --构造临时表的结构
declare @str varchar(300),@id varchar(300),@m int,@n int
set @str='2,1,4,3,' ---注意后面有个逗号
set @m=CHARINDEX(',',@str)
set @n=1
WHILE @m>0
BEGIN
set @id=substring(@str,@n,@m-@n)
--print @id
insert into #tmp select id,name from table1 where id=convert(int,@id)
set @n=@m+1
set @m=CHARINDEX(',',@str,@n)
END
*该方法比较有通用性
测试结果
id name
----------- ----
2 r
1 q
4 5
3 3
(所影响的行数为 4 行)
篇2:sql获取指定时间范围数据
以下分别为获取本天、本周、本月数据需要的where条件,其中publishDate为数据库里面存储的日期字段
此代码是在查询oracle数据库的.net 代码
[csharp] view plaincopy
DateTime today = DateTime.Now;
whereDay = string.Format(“to_char(publishDate,'yyyy-mm-dd') ='{0}' ”,
today.ToString(“yyyy-MM-dd”)
);
whereWeek = string.Format(“to_char(publishDate,'yyyy-mm-dd') >='{0}' and to_char(publishDate,'yyyy-mm-dd')<='{1}' ”,
today.AddDays(0 - (int)today.DayOfWeek).ToString(“yyyy-MM-dd”),
today.ToString(“yyyy-MM-dd”)
);
whereMonth = string.Format(“to_char(publishDate,'yyyy-mm-dd') >='{0}' and to_char(publishDate,'yyyy-mm-dd')<='{1}' ”,
today.ToString(“yyyy-MM-00”),
today.ToString(“yyyy-MM-dd”)
);
摘自 robot的学习日志

篇3:高手推荐的直接获取数据库数据方法
当使用SQL注入access的时候,经常会遇到密码为中文、猜不到关键字段名这样的问题,使用本技术就能够很快速的解决这样的问题。本技术最低要求有两条:
1.使用access数据库的系统存在SQL注入漏洞;mssql数据库也支持这个技术
2.需要知道欲爆数据所在的表的表名以及这个表下的一个字段名,一般都是id字段
使用本技术显而易见的优势在于:
1.可以不需要引号,过滤引号对本技术没有影响
2.可以快速的知道敏感数据的内容,而不必像以往一样慢慢的猜解,中文、特殊字符等等都通杀
3.在SQL Server屏蔽了错误信息之后仍然可以快速得到敏感数据内容
4.可以在不知道关键(欲知数据的)字段名的情况下仍然能够获取到欲知数据
咋一看可能这个技术很难,其实很简单。一共有两个难点,一般的第一个难点在看到结果以后都很容易想到,但是第二个难点却的确有点点麻烦。
首先看一个表格,是union的语法。这也是爆出数据的主要原理。如下图所示:
当我们使用SQL Inject技术插入union语句以后,只要两个select查询得到的列数相同,那么整条SQL语句执行完成以后,得到的查询结果就变成了union后面select得到的数据。所以就有可能将我们所需要的数据爆出来。来看一个简单的例子:
www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20admin
这是一个SQL Server的服务器,关闭了错误信息的回报,所以不能够按照以往的方法直接得到敏感数据。通过SQL Inject插入union语句以后,可以大胆的猜测到所执行的SQL语句变成了:
select * from Soft where SoftID=3903 union select username,password,1,1,1 from admin
那么在正常情况下显示Soft第1、2个字段值得地方就会显示admin的username和password字段,后面的3个1也是同理替代了。按照这个特性,我们当然也可以直接得到Admin_UserInfo表里面的username和password字段。构造的语句如下所示:
www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20Admin_UserInfo%20where%20username
以上就是简单的利用union来实现对敏感数据的获取,而不通过复杂的暴力拆解。为了实现在不知道字段名同样能够得到其中的数据这个目的的时候,我们当然就应该想到使用*来代替字段名。这样只要*所代表的字段再加上几个1的数目和脚本中的select查询表中的字段数目相同,那么就同样可以得到不知道字段名的数据了。
考虑到这样一种情况,有这样一条语句:select id,hit,softname,softURL from soft where id=10。其中能够在网页中正常显示出来的字段是softname和softURL,那么我们在使用union的时候就应该调整*所在的位置,一般admin表中结构为id username password,那么在注入上面这条假设的语句的时候就应该这样构造SQL语句:select 1,* from admin。使*所代替的username和pssword字段处于softname和softURL两个字段的位置上,这样网页才能够将我们想要得username和password字段乖乖的交出来。当然这里只是最简单的一个例子来说明,有很多时候一个表里面可能有十几个字段,我遇到最长的是四十三个字段。那么脚本中使用select *来做查询的话,我们在构造union select就应该用1凑数到四十三个字段。其中当然是会有一些字段不被网页显示出来,这就需要考虑union select后面的*号所在的位置了,
相信这个应该不用我多说了。
上面说的语法完全符合SQL Server。但是Access和SQL Server相比较,真的是小巫见大巫了。在SQL Server里面,当我们使用select *,1,1,1 from admin语句查询得到的记录集合分别是:* 1 1 1。但是在access当中上面的这条语句查询的结果是1 1 1 *,也就是说无论你将*号处于这群1中间的什么位置上,*所代表的数据总是处于查询结果的最后面。用一个复杂点的例子作说明:
www.hnp2p.com/mov/view.asp?id=1916%20union%20(select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16%20from%20admin)
这个站点使用的是access数据库,可以看到能够正常显示出来的字段是2、3、7、8、10、11,而后面的字段却不会显示出来,去掉14,15,16换上*号,页面同样显示出数字,也就是说admin中的字段数是三个,肯定是id username password这种结构,但是除了id字段其他的字段都不能够被猜测出名字。按照在上面SQL Server中所使用的方法移动*号的位置以求能够将敏感数据爆出来,在access中是不可行的。原因是access始终将*好所代替的字段放在查询数据集的最后面。Access查询出来的结果永远都是:1,2,3,4,5,6,7,8,9,10,11,12,13,*这个样子。为了将*好所代替的字段表示出来,我们必须将*所代替的字段移动到其他位置上。先看结果:
www.hnp2p.com/mov/view.asp?id=1916%20union%20select%201,*%20from%20(((admin%20as%20a%20inner%20join%20admin%20as%20b%20on%20a.id=b.id)%20inner%20join%20admin%20as%20c%20on%20c.id=b.id)%20inner%20join%20admin%20as%20d%20on%20d.id=c.id)%20inner%20join%20admin%20as%20e%20on%20d.id=e.id
通过这样构造的语句的执行,最终查询得到的数据形式是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1,a.id a.name a.pwd b.id b.name b.pwd c.id c.name c.pwd d.id d.name d.pwd e.id e.name e.pwd
其中第3和第7个字段正好就是我们想要得username和password字段的值。这里我使用的是join语法,将两个表连接(相加)起来从而构造得到这样的一个满足我们要求的查询结果。
Join分为全部连接、左连接和右连接,具体区别可以去查看SQL语法。在这里,access中我们不管选择哪一种连接方式效果都等同于全部连接。看一个简单的join语法
SELECT *
FROM (表1 INNER JOIN 表2 ON 表1.序号=表2.序号)
INNER JOIN 表3
ON 表1.序号=表3.序号
转换为实例就是:
select 1,2,3,4,*
from ((admin as a inner join admin as b on a.id=b.id)
inner join admin as c on c.id=b.id)
inner join admin as d on d.id=c.id
按照这种格式就可以把上面的那个url真正执行的SQL语句解出来,无非就是不断的使用join连接数据表admin,然后通过1来补齐前面的字段数目。只要语句构建得当,那么不知道字段名的数据全部都能够在页面中显示出来。这就是这个技术的难点所在了。 好了,全部都介绍完了。如果想把这个技术写成程序的话,也是很有可能的。只不过在语句结构构造的时候最好还是使用人脑吧~~~呵呵
篇4:通过视图管理数据数据库教程
视图与表具有相似的结构,当向视图中插入或更新数据时,实际上对视图所引用的表执行数据的插入和更新,
通过视图管理数据数据库教程
。但是通过视图插入、更新数据和表相比有一些限制,下面通过具体的例子来讲述通过视图插入、更新数据以及其使用的限制。使用SELECT 语句,可以在视图和表中查到该条记录。但是如果执行下面的语句,虽然仍可以成功执行,但只可以在表而不是视图中查到该条数据。
注意:由于向视图插入数据实质是向其所引用的基本表中插入数据,所以必须确认那些来包括在视图列但属于表的列允许NULL值或有缺省值。
若要执行INSERT 语句,则在同一个语句只能对属于同一个表的列执行操作,
所以,若向视图au_title 中插入一行数据,只能分别执行以下语句:
insert into au_title (author_au_id, au_lname, au_fname, contract)
values ('234-34-4611','John','Smith', 1)
insert into au_title (title_au_id, title_id, au_ord, royaltyper)
values ('234-34-4611','BU1111',1,50)
通过视图对数据进行更新与删除时需要注意到两个问题:
执行UPDATE DELETE 时,所删除与更新的数据,必须包含在视图结果集中;
如果视图引用多个表时,无法用DELETE 命令删除数据,若使用UPDATE 则应与INSERT 操作一样,被更新的列必须属于同一个表。
篇5:基于HTTP 的数据访问数据库教程
除了XML 技术之外,Microsoft SQL Server 的开发者们也把通过HTTP 访问的特性(HTTP access9 作为SQL Server 2000 的一个核心特性,
基于HTTP 的数据访问数据库教程
。这样用户完全可以把SQL Server 放到一个URL 上了,从而保证开发人员和潜在的最终用户都能简单地通过一个URL 来访问SQL Server。 本节我们主要介绍以下三个问题:如何创建虚拟目录
HTTP 的语法
HTTP 的访问能力20.4.1 创建虚拟目录
在使用HTTP 访问SQL Server 2000 数据库前必须首先利用IIS 专门为SQL Server 提供的虚拟目录管理器来创建虚拟目录(virtual directory), 同时确保使用的操作系统支持IIS 服务器。创建虚拟目录其主要目的就是在SQL Server 实例与新创建的虚拟目录之间建立新的连接。下面以一个具体的例子来介绍创建虚拟目录要执行哪些步骤。
(1) 在SQL Server Tool 程序单中选择Configure SQL XML Support in IIS 选项。
(2) 打开要创建虚拟目录的服务器图标,然后选择管理站点图标。右击该图标在弹出菜单中选择New ,单击Virtual Directory。
(3) 选中General 标签页,如图20-3 所示。
(4) 该标签页用来给出HTTP 存取数据库数据时所要使用的虚拟目录以及虚拟目录的真实目录的路径。真实目录主要存放通过该虚拟目录要访问的文件,此外模板文件(template files) 和注释匹配模式文件(annotated mapping schema files) 也存储在该目录。在该例中我们在Virtual Directory Name 中输入VirtualRoot; 在Local Path 中输入 E:Inetpubwwwroot VirtualRoot。
(5) 选中Security 标签页,如图20-4 所示。
该标签页用来定义登录的认证方法,共在三种IIS 认证模式。
Always log on as
Windows 和SQL Server 帐号与IIS 认证安全的匿名访问模式相匹配。匿名访问是指任何人都可以访问虚拟目录,但是访问服务器的任何一个客户都必须提供正确的帐号和口令才能够登录成功。其中SQL Server 选项表示当指定SQL Server 登录时,虚拟目录的所有用户都可以使用该SQL Server 登录帐号;Windows 选项表示为所有使用该虚拟目录的用户指定一个Windows 帐号,在缺省情况下使用安装IIS 时的缺省用户IUSR_ServerName。
Use Windows Integrated Authentication
该选项表示使用Windows NT 或Windows 2000 的IIS 认证方法,即合法的 Windows NT 或Windows 2000 用户才具有访问虚拟目录的权限。该访问模式要求 Windows 用户也具有访问SQL Server 的权限。
Use Basic Authentication (Clear Text) to SQL Server account
该选项是指通过SQL Server 登录和口令来进行安全认证。本认证模式与IIS 的基本认证模式不同。我们可以使用匿名认证。(6) 选中Data Source 标签页,如图20-5 所示。在Data Source 标签页主要完成两个任务,其一是选择一个SQL Server 2000 运行实体,其二选择包含在该实体内且被HTTP 访问的数据库,
在本例中选择Pubs 数据库。
(7) 选中Setting 标签页,如图20-6 所示。 Setting 标签页用来确定将使用何种SQL Server 2000 访问类型来通过虚拟目录进行数据访问。应该指出模板(Template) 文件和模式(Schema) 文件可以存储在任何地方。
Allow URL queries
表示直接在URL 中执行SQL 查询,但是考虑到访问的安全性我们建议不使用该选项。
Allow template queries
表示在URL 中执行已存在的模板文件。模板是合法的XML 文档,包括一个或多个SQL 查询。在缺省情况下使用该选项。
Allow XPath
表示直接在URL 中对注释匹配模式进行查询。
(8) 选中Virtual Names 标签页,如图20-7 所示。
该标签页主要用来定义虚拟名称。在URL 中只能使用虚拟名称,基于安全考虑,任何关于执行的对象以及文件的存储位置等信息都被隐藏。
Defined virtual names 表示在访问网络资源时将要用到的虚拟名称。比如通过IISServer/VirtualRoot/ temvir/可以访问位于VirtualRoot 虚拟目录下的temvir。
Type 指出要创建的虚拟名称属于哪一个查询类型。
dbobject 表示查询的是数据库对象。
schema 表示对匹配模式执行Xpath 查询。
template 表示模板文件中的SQL 查询。
path 指出模板或模式所在的目录路径,该路径可以是相对路径也可以是绝对路径。如果查询类型为dbobject, 则不需指明路径。该路径可以指文件夹(虚拟名称)的路径也可以指一文件路径。如果指文件夹(虚拟名称)的路径,则在URL 中必须加上文件的名称。例如: IISServer/VirtualRoot/ temvir/sample.xml(9)选中Advanced 标签页,如图20-8 所示。
Advanced 标签页主要是用来指定sqlisapi.dll 存放的位置,通过虚拟目录访问 SQL Server 2000 实体时需要使用该文件。如果虚拟目录被创建于远程服务器上,则必须提供存放位置。在缺省情况下sqlisapi.dll 文件被安装于FilesCommon FilesSystemOle DB 目录下。
20.4.2 HTTP 的访问能力
在SQL Server 2000 中,HTTP 的访问能力得到了明显的提高用户,不仅可以在 URL 中直接输入SQL 语句或存储过程,而且能够在URL 中加入模板文件或进行 XPath 查询。在详细介绍这些访问方法之前首先让读者了解HTTP 的语法。
3 在URL 中使用模板
虽然在URL 中直接执行SQL 语句有着简单、快速的优点,但是目前这种方式在大部分互联网环境中都是不合适的。因为开发者不会希望用户书写或是看到SQL 语句,因为这可能泄露访问开发者数据库的内部机制。出于安全原因,开发者显然不会希望这样。因此对于开发人员来说更好的选择就是允许通过URL 来访问指定服务器端的XML 模板。这虽然提供了对SQL Server 的直接访问但是实际已把SQL Select 语句或XPath 查询请求隐藏在了XML 模板中。因此许多中间层代码的使用和数据库交互过程就不必要了。以此方法,可以简便快速地把数据库放置到网络上。这也是SQL Server 为开发人员提供的一种更快捷地跟上市场需要的方法。
篇6:数据查询SELECT语句数据库教程
数据库是为更方便有效地管理信息而存在的人们,希望数据库可以随时提供所需要的数据信息,
数据查询SELECT语句数据库教程
。因此,对用户来说,数据查询是数据库最重要的功能。本章将讲述数据查询的实现方法。
在数据库中,数据查询是通过SELECT 语句来完成的。SELECT 语句可以从数据库中按用户要求检索数据,并将查询结果以表格的形式返回。我们在“Transact-SQL 语言”章节及前面的章节中已经初步接触到了SELECT 语句的一些用法,在本章中将分类讲述其具体用法。
本节讲述SELECT 语句完整的锓结构U馐且桓龇浅H叱ぁ⒖菰锏墓程。读者? 以跳过本节,从第二节开始阅读,而将本节作为理解、编写查询语句的语法参考资料。 SELECT 语句完整的语法结构如下:
SELECT statement ::=
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [,...n] ]
[ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,...n]
[ BY expression [,...n] ] ]
[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ] }
[ OPTION (
{
[UNION [ALL]
SELECT [ ALL | DISTINCT ]
[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]
[ INTO new_table ]
[ FROM {} [,...n] ]
[ WHERE
[ GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ] ]
[ HAVING
由于SELECT 语句特别复杂,上述结构还不能完全说明其用法,因此我们将它拆分为若干部分来讲述。
10.1.1 SELECT 子句
SELECT 子句指定需要通过查询返回的表的列,其语法如下:
SELECT [ ALL | DISTINCT ]
[ TOP n [PERCENT] [ WITH TIES] ]
{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [AS] column_alias ]
| column_alias = expression
} [,...n]
各参数说明如下:
ALL
指明查询结果中可以显示值相同的列。ALL 是系统默认的。
DISTINCT
指明查询结果中如果有值相同的列,则只显示其中的一列。对DISTINCT 选项来说, Null 值被认为是相同的值。
TOP n [PERCENT]
指定返回查询结果的前n 行数据。如果PERCENT 关键字指定的话,则返回查询结果的前百分之n 行数据。
WITH TIES
此选项只能在使用了ORDER BY 子句后才能使用当指定此项时,除了返回由TOP n (PERCENT) 指定的数据行外,还要返回与TOP n (PERCENT) 返回的最后一行记录中由ORDER BY 子句指定的列的列值相同的数据行。
select_list
select_list 是所要查询的表的列的集合,多个列之间用逗号分开。
* 通配符,返回所有对象的所有列。
table_name | view_name | table_alias.*
限制通配符*的作用范围。凡是带*的项,均返回其中所有的列。
column_name
指定返回的列名
expression
表达式可以为列名、常量、函数或它们的组合。
IDENTITYCOL
返回IDENTITY 列。如果FROM 子句中有多个表含有IDENTITY 列,则在IDENTTYCOL 选项前必须加上表名,如Table1.IDENTITYCOL。
ROWGUIDCOL
返回表的ROWGUIDCOL 列。同IDENTITYCOL 选项相同,当要指定多个ROWGUIDCOL 列时,选项前必须加上表名,如Table1. ROWGUIDCOL。
column_alias
在返回的查询结果中用此别名替代列的原名。column_alias 可用于ORDER BY 子句,但不能用于WHERE GROUP BY 或HAVING 子句如果查询是游标声明命令DECLARE CURSOR 的一部分,则column_alias 还不能用于FOR UPDATE 子句(有关游标的介绍请参见“游标和视图”章节)。
10.1.2 INTO 子句
INTO 子句用于把查询结果存放到一个新建的表中。SELECT...INTO 句式不能与COMPUTE 子句一起使用。其语法如下:
INTO new_table
参数new_table 指定了新建的表的名称。新表的列由SELECT 子句中指定的列构成,新表中的数据行是由WHERE 子句指定的。但如果SELECT 子句中指定了计算列,在新表中对应的列则不是计算列,而是一个实际存储在表中的列,其中的数据由执行SELECT...INTO 语句时计算得出。如果数据库的“Select into/bulk copy” 选项设置为“True/On”,则可以用INTO 子句创建表和临时表,反之,则只能创建临时表。
10.1.3 FROM 子句
FROM 子句指定需要进行数据查询的表。只要SELECT 子句中有要查询的列,就必须使用FROM 子句。其语法如下:
FROM {} [,...n]
::=
table_name [ [AS] table_alias ] [ WITH ( [,...n]) ]
| view_name [ [AS] table_alias ]
| rowset_function [ [AS] table_alias ]
| OPENXML
| derived_table [AS] table_alias [ (column_alias [,...n] ) ]
|
| CROSS JOIN
|
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[
JOIN
各参数说明如下:
table_source
指明SELECT 语句要用到的表、视图等数据源。
table_name [ [AS] table_alias ]
指明表名和表的别名。
view_name [ [AS] table_alias ]
指明视图名称和视图的别名。
rowset_function [ [AS] table_alias ]
指明行统计函数和统计列的名称。
OPENXML
提供一个XML 文档的行集合视图。
WITH ([,...n])
指定一个或多个表提示。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。关于表提示table_hint 的设,定请参见下一章的“删除数据”部分。
derived_table [AS] table_alias
指定一个子查询,从数据库中返回数据行。
column_alias
指明列的别名,用以替换查询结果中的列名。
joined_table
指定由连接查询生成的查询结果。有关连接与连接查询的介绍参见本章的相关章节。
join_type
指定连接查询操作的类型。
INNER
指定返回两个表中所有匹配的行。如果没有join_type 选项,此选项就为系统默认。
LEFT [OUTER]
返回连接查询左边的表中所有的相应记录,而右表中对应于左表无记录的部分,用NULL 值表示。
RIGHT [OUTER]
返回连接查询右边的表中所有的相应记录,而左表中对应于右表无记录的部分,用NULL 值表示。
FULL [OUTER]
返回连接的两个表中的所有记录。无对应记录的部分用NULL 值表示。
join_hint
指定一个连接提示或运算法则。如果指定了此选项,则INNER LEFT RIGHT 或FULL选项必须明确指定。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。
join_hint 的语法如下:
其中LOOP | HASH | MERGE 选项指定查询优化器中的连接是循环、散列或合并的。REMOTE 选项指定连接操作由右边的表完成。当左表的数据行少于右表,才能使用REMOTE 选项。当左表和右表都是本地表时,此选项不必使用。
JOIN
指明特定的表或视图将要被连接。
ON
指定连接的条件。
CROSS JOIN
返回两个表交叉查询的结果。10.1.4 WHERE 子句
WHERE 子句指定数据检索的条件,以限制返回的数据行。其语法如下:
WHERE
::=
column_name { *= | =* } column_name
各参数说明如下:
search_condition
通过由谓词构成的条件来限制返回的查询结果,
old_outer_join
指定一个外连接。此选项是不标准的,但使用方便。它用“*=” 操作符表示左连接,用“=*” 操作符表示右连接。此选项与在FROM 子句中指定外连接都是可行的方法,但二者只能择其一。
注意:如果在WHERE子句中指定一个值为FALSE的条件,则可以用SELECT...INTO语句来创建一个表名不同,但结构和数据类型均和原表相同的表。
10.1.5 GROUP BY 子句
GROUP BY 子句指定查询结果的分组条件。其语法如下;
GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ]
各参数说明如下:
ALL
返回所有可能的查询结果组合,即使此组合中没有任何满足WHERE 子句的数据。分组的统计列如果不满足查询条件,则将由NULL 值构成其数据。ALL 选项不能与CUBE或ROLLUP 选项同时使用。
GROUP BY ALL is not supported in queries that access remote tables.
group_by_expression
指明分组条件。group_by_expression 通常是一个列名,但不能是列的别名。数据类型为TEXT、 NTEXT、 IMAGE 或BIT 类型的列不能作为分组条件。
CUBE
除了返回由GROUP BY 子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件列排序显示,再按第二个条件列排序显示以此类推。统计行包括了GROUPBY 子句指定的列的各种组合的数据统计。
ROLLUP
与CUBE 不同的是,此选项对GROUP BY 子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行。改变列的顺序会使返回的结果的行数发生变化。
使用Distinct选项的统计函数,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、和SUM(DISTINCT column_name)等,不能在使用CUBE或ROLLUP选项时使用。
10.1.6 HAVING 子句
HAVING 子句指定分组搜索条件。HAVING 子句通常与GROUP BY 子句一起使用。TEXT、 NTEXT 和IMAGE 数据类型不能用于HAVING 子句。其语法如下:
HAVING
HAVING 子句与WHERE 子句很相似,其区别在于其作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
10.1.7 UNION 操作符
UNION 操作符将两个或两个以上的查询结果合并为一个结果集。它与使用连接查询合并两个表的列是不同的。使用UNION 操作符合并查询结果需要遵循两个基本规则:
列的数目和顺序在所有查询中必须是一致的;
数据类型必须兼容。
其语法如下:
UNION [ALL]
[UNION [ALL]
各参数说明如下:
指明查询的详细说明或查询表达式。
UNION
合并操作符。
ALL
合并所有数据行到结果中,包括值重复的数据行。如果不指定此选项,则重复的数据行只显示一行。
10.1.8 ORDER BY 子句
ORDER BY 子句指定查询结果的排序方式。其语法如下:
ORDER BY {order_by_expression [ ASC | DESC ] } [,...n]
各参数说明如下:
order_by_expression
指定排序的规则。order_by_expression 可以是表或视图的列的名称或别名。如果SELECT 语句中没有使用DISTINCT 选项或UNION 操作符。那么ORDER BY 子句中可以包含select list 中没有出现的列名。或别名ORDER BY 子句中也不能使用TEXT、 NTEXT 和 IMAGE 数据类型。
ASC
指明查询结果按升序排列。这是系统默认值。
DESC
指明查询结果按降序排列。
注意:Null值被作为最小的值。
10.1.9 COMPUTE 子句
COMPUTE 子句在查询结果的末尾生成一个汇总数据行。其语法如下:
COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP |VAR | VARP | SUM }
(expression) } [,...n]
[ BY expression [,...n] ]
各参数说明如下:
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM以上参数与对应的函数有相同的含义。这些函数均会忽略NULL 值,且DISTINCT选项不能在此使用。
expression
指定需要统计的列的名称。此列必须包含于SELECT 列表中,且不能用别名。COMPUTE子句中也不能使用TEXT、 NTEXT 和IMAGE 数据类型。
BY expression
在查询结果中生成分类统计的行。如果使用此选,项则必须同时使用ORDER BY 子句。expression 是对应的ORDER BY 子句中的order_by_expression 的子集或全集。
注意:在SELECT子句中使用统计函数,会覆盖COMPUTE子句中的相应选项。在SELECTINTO语句中不能使用COMPUTE子句。
10.1.10 FOR BROWSE 子句
FOR BROWSE 子句用于读取另外的用户正在进行添加、删除或更新记录的表。其语法如下:
FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ]
}
各参数说明如下:
BROWSE
BROWSE 选项指明当查看在使用DB-Library 的客户机应用程序中的数据时,可以更新数据。
使用此子句时对所操作的表有一些限制:
表必须包含一个timestamp 类型的时间标识列;
表必须有一个惟一索引。
注意:
在SELECT语句中:FOR BROWSE子句必须是SELECT语句的最后子句;FOR BROWSE子句不能与UNION操作符同时使用;FOR BROWSE子句不能与表提示HOLDLOCK选项同时使用。
XML
XML 选项指明查询结果以XML 文档模式返回XML。 模式分为RAW、 AUTO、 EXPLICIT 三种。
RAW
将查询结果每一行转换为以一个普通标识符
AUTO
以简单嵌套的XML 树方式返回查询结果。
EXPLICIT
指定查询结果的XML 树的形式被明确定义的。
XMLDATA
返回概要信息。它是附加在文档上返回的。
ELEMENTS
指明列将以子元素的方式返回。
BINARY base 64
指定查询返回的以base64 格式编码的二进制数据。
10.1.11 OPTION 子句
OPTION 子句用于指定在整个查询过程中的查询提示(Query Hint)。通常,用户不必使用OPTION 子句,因为查询优化器会自动选择一个最佳的查询计划。OPTION 子句必须由最外层的主查询来指定。各查询提示之间应使用逗号隔开。其语法如下:
OPTION (
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| FAST number_rows
| FORCE ORDER
| MAXDOP number
| ROBUST PLAN
| KEEP PLAN
| KEEPFIXED PLAN
| EXPAND VIEWS
}
各参数说明如下:
{HASH | ORDER} GROUP
指定在GROUP BY 或COMPUTE 子句中指定的查询使用散列法或排序法。所谓散列法是指为存储和检索数据项或数据,把搜索关键字转换为一个地址的一种方法。该方法常作为数据集内的记录的一种算法,可以使记录分组均匀,减少搜索时间。
{MERGE | HASH | CONCAT} UNION
指定所有的UNION 操作符采用合并(Merge)、散列(Hash) 或连接(Concatenate)的方法执行操作。如果指定了多个UNION 提示,查询优化器会挑选一个最佳的提示方案。
{LOOP | MERGE | HASH |} JOIN
指定查询过程中的所有连接操作采取循环连接(Loop Join)、合并连接(Merge Join)或散列连接(Hash Join) 的方法。如果指定了多个JOIN 提示,查询优化器会挑选一个最佳的提示方案。
FAST number_rows
指定查询优化只用于迅速返回前number_rows 行数据,在number_rows 行以后的数据采用原查询方法。
FORCE ORDER
指定在查询语法中说明的连接顺序在查询优化的过程中保持不变。
MAXDOP number
忽略由Sp_configure 设定的针对查询的最大并行线程数目。
ROBUST PLAN
强制查询优化器尝试使用最大行容量的计划。
KEEP PLAN
强制查询优化器放松重新编译查询的阈值。指定此选项可以让一个表被多次更新而不必频繁地重新编译查询。
KEEPFIXED PLAN
强制查询优化器不重新编译查询。这样只有当表的概要改变或执行Sp_recompile 存储过程时,才会重新编译查询。
EXPAND VIEWS
扩展索引化视图(当一个视图的名称在查询文本中被视图定义替换时称这个视图被扩展了),并且查询优化器不再将索引化视图作为查询的某部分的替代品。如果视图使用了WITH (NOEXPAND) 说明,则不能被扩展。注意:SELECT语句中各子句的排列次序是很重要的,子句必须依相应的次序来使用。
当用SELECT命令读取TEXT和IMAGE类型数据时,一次所能读取的数据受限于@@TE-XTSIZE全局变量的值。
可以用SET TEXTSIZE命令来更改它。@@TEXTSIZE的初始值为4K,最大为231-1(2,147,483,647)个字节。
篇7:mysql数据复制到access数据库数据库教程
access|mysql|数据|数据库
mysql数据库表sqltable字段id,name,sex,email
access数据库表accesstable
id,name,sex,email
$connect = mysql_connect(“localhost”,“”,“”);
mysql_select_db(“mydatabase”);
$sql = “select * from sqltable;
$result = mysql_query($sql};
$connectodbc=odbc_connect(”DSN“,”USERNAME“,”PASSWORD“);
while($row = mysql_fetch_row($result))
{
$sql=”insert into accesstable
values($row[“id”,$row[“name”,$row[“sex”],$row[“email”])";
odbc_do($connectodbc,$sql);
}
odbc_close($connectodbc);
mysql_close($conect);
?>
【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】












