如何查询其他数据库内的表(IN子句实例)?数据库教程

| 收藏本文 下载本文 作者:故乡的风

下面是小编为大家整理的如何查询其他数据库内的表(IN子句实例)?数据库教程(共含7篇),仅供参考,大家一起来看看吧。同时,但愿您也能像本文投稿人“故乡的风”一样,积极向本站投稿分享好文章。

如何查询其他数据库内的表(IN子句实例)?数据库教程

篇1:如何查询其他数据库内的表(IN子句实例)?数据库教程

数据|数据库

如何查询其他数据库内的表(IN子句实例)?

问题:

如何引用其他数据库内的表?(查询外部表)

jet sql 中的 in 子句到底怎么用?在哪里用?

方法一:

select能否查询其他数据库中表的数据?

SELECT * FROM tbl_family IN other.mdb“[5556]”;

方括号[]内的是其他数据库的连接字串

方法二:

SELECT *

FROM [;database=C:db2.mdb;pwd=1].表1 AS a, 表1 AS b

WHERE a.ID=b.id

请参考:

下面是有关select语句的帮助,请注意 in

SELECT 语句

命令 Microsoft Jet数据库引擎从数据库里返回信息,作为一组记录,

语法

SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}

FROM tableexpression [, ...][IN外部数据库]

[WHERE...]

]

[GROUP BY...]

]

[HAVING...]

]

[ORDER BY...]

]

[WITH OWNERACCESS OPTION]

IN 子句

标识出外部数据库中的表,例如dBASE或Paradox数据库,或Microsoft Jet外部数据库,Microsoft Jet数据库引擎能够与之相连。

语法

标识目标表:

[SELECT | INSERT] INTO destination IN

{path | [“path” “type”] | [“” [type; DATABASE = path]]}

标识数据源表:

FROM tableexpression IN

{path | [“path” “type”] | [“” [type; DATABASE = path]]}

包含 IN 子句的SELECT 语句具有以下几个部分:

部分 说明

destination 外部表的名称,将数据插入表中。

tableexpression 表的名称,可从这些表中获取数据。这个变量可能是一个单独的表名,一个已存查询,或是 INNER JOIN, LEFT JOIN, 或 RIGHT JOIN.

Path 目录或文件的整个路径,而且这些目录或文件包含 table 。

type 数据库类型的名称,如果数据库不是 Microsoft Jet 数据库(例如 dBASE III、dBASE IV、Paradox 3.x或Paradox 4.x),则用此类型创建 table 。

说明

通过 IN 你一次只可以连接一个外部数据库

在某些情况中,path 参数可引用包含数据库文件的目录。例如,当使用 dBASE、FoxPro或 Paradox 数据库表时,path 参数将指定包含 .dbf 或 .db 文件的目录。由 destination 或 tableexpression 参数可得到表文件的名称。

为了指定非 Microsoft JET 数据库,可在名称之后附加分号 (;),并用单引号 (' ') 或 (“ ”) 双引号将它括入。例如可用 'dBASE IV;' 或 “dBASE IV;”这两种写法。

也可使用 DATABASE 保留字指定外部数据库。例如,以下示例指定相同的表:

... FROM Table IN “” [dBASE IV; DATABASE=C:DBASEDATA ALES;];

... FROM Table IN “C:DBASEDATA ALES” “dBASE IV;”

注意

为改进性能并方便使用,请使用链接表而不要用 IN。

IN 子句示例

下列表显示您如何使用 IN 子句来捕获外部数据库的数据。在每一示例之中,假设客户表是保存在外部数据库之中。

外部数据库 SQL 语句

Microsoft® Jet 数据库 SELECT CustomerID

FROM Customers

IN OtherDB.mdb

WHERE CustomerID Like “A*”;

dBASE III 或 IV.

捕获数据由 一 dBASE III 表,以 “dBASE III;” 替代 “dBASE IV;”,

SELECT CustomerID

FROM Customer

IN “C:DBASEDATA ALES” “dBASE IV;”

WHERE CustomerID Like “A*”;

dBASE III 或 IV 使用数据库语法。 SELECT CustomerID

FROM Customer

IN “” [dBASE IV; Database=C:DBASEDATA ALES;]

WHERE CustomerID Like “A*”;

Paradox 3.x 或 4.x.

若要由一Paradox version 3.x 表捕获数据,以 “Paradox 3.x;” 替代 “Paradox 4.x;”。 SELECT CustomerID

FROM Customer

IN “C:PARADOXDATA ALES” “Paradox 4.x;”

WHERE CustomerID Like “A*”;

Paradox 3.x 或 4.x 使用数据库语法. SELECT CustomerID

FROM Customer

IN “” [Paradox 4.x;Database=C:PARADOXDATA ALES;]

WHERE CustomerID Like “A*”;

Microsoft EXCEL工作表 SELECT CustomerID, CompanyName

FROM [Customers$]

IN “c:documentsxldata.xls” “EXCEL 5.0;”

WHERE CustomerID Like “A*”

ORDER BY CustomerID;

在工作表之中的一个命名范围 SELECT CustomerID, CompanyName

FROM CustomersRange

IN “c:documentsxldata.xls” “EXCEL 5.0;”

WHERE CustomerID Like “A*”

ORDER BY CustomerID;

-----------------------------------------------------------------------------------------------------

关于文本文件可以这样

select * from [Text;FMT=Delimited;HDR=Yes;DATABASE=C:;].[aparm#txt];

关于在IN子句中查询文本文件如何写链接字串,你可以参考:

support.microsoft.com/default.aspx?scid=kb;en-us;234201&Product=acc

关于Excel可以这样

insert into 表 SELECT * FROM [Excel 5.0;HDR=YES;DATABASE=c:test.xls].[sheet1$];

说明:

c:test.xls 是excel文件名

sheet1是要导入的工作表名

其实,你要获取链接字串还有一个方便的办法,就是使用链接向导,先手工链接一个文件到你的数据库中,然后执行以下代码:

Function displayLinkStringFromLinkTable

'先到工具菜单->引用 中引用 Microsoft ADO Ext. 2.X for DDL and Security

'引用 ADOX

Dim strTableName

strTableName = “001”

'001是链接表的名字

Dim cat As New ADOX.Catalog

Dim objTable As ADOX.table

Set cat.ActiveConnection = CurrentProject.Connection

For Each objTable In cat.Tables

If objTable.Name = strTableName Then

Debug.Print objTable.Properties(“Jet OLEDB:Link Provider String”).Name

Debug.Print objTable.Properties(“Jet OLEDB:Link Provider String”).Value

End If

Next objTable

End Function

www.access911.net 站长收藏

篇2:数据查询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 ( [,...n]) ]

::=

{ | () }

[UNION [ALL] ) [...n] ]

::=

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] ) ]

|

::=

ON

| 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 }

其中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] ) [...n] ]

各参数说明如下:

| ()

指明查询的详细说明或查询表达式。

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

将查询结果每一行转换为以一个普通标识符作为元素标识XML 文档。

AUTO

以简单嵌套的XML 树方式返回查询结果。

EXPLICIT

指定查询结果的XML 树的形式被明确定义的。

XMLDATA

返回概要信息。它是附加在文档上返回的。

ELEMENTS

指明列将以子元素的方式返回。

BINARY base 64

指定查询返回的以base64 格式编码的二进制数据。

10.1.11 OPTION 子句

OPTION 子句用于指定在整个查询过程中的查询提示(Query Hint)。通常,用户不必使用OPTION 子句,因为查询优化器会自动选择一个最佳的查询计划。OPTION 子句必须由最外层的主查询来指定。各查询提示之间应使用逗号隔开。其语法如下:

OPTION ( [,...n] )

::=

{ { 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)个字节。

篇3:查询重复记录数据库教程

重复|重复记录

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_qry]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_qry]

GO

/*--查询重复记录的通用存储过程

可以查询出表中那些数据是重复的,这里的重复,是指除主键外重复的记录

如果表中有主键,请指定主键.

如果表中有标识字段,而且标识字段无重复,请在调用时,将主键指定为标识字段

如果标识字段重复,不能用此存储过程

-- .4--*/

create proc p_qry

@tbname sysname, --要查询的表名

@keyfdname sysname=null --表中的主键,如果未指定,则表中无主键

as

declare @nokey bit,@fd varchar(8000),@tj varchar(8000)

set nocount on

if isnull(@keyfdname,'')=''

begin

select @keyfdname=cast(newid as char(36)),@nokey=1

exec('alter table ['+@tbname+'] add ['+@keyfdname+'] decimal(38,0) identity(1,1)')

end

select @fd='',@tj=''

select @fd=@fd+',['+name+']'

,@tj=@tj+'['+name+']=a.['+name+'] and '

from syscolumns

where object_name(id)=@tbname and name@keyfdname

set @fd=substring(@fd,2,8000)

exec('select '+@fd+' from ['+@tbname+'] a

where exists(select 1 from ['+@tbname

+'] where a.['+@keyfdname+'])'“>'+@tj+'['+@keyfdname+']a.['+@keyfdname+'])')

if @nokey=1

exec('alter table ['+@tbname+'] drop column ['+@keyfdname+']')

set nocount off

go

--调用示例

--创建测试数据

create table 表(f1 int,f2 int,f3 int,f4 int,f5 int)

insert into 表

select 1,1,1,1,1

union all select 2,1,1,1,1

union all select 3,2,1,23,1

union all select 4,2,3,1,3

union all select 5,1,1,1,1

go

--调用通用存储过程实现楼主的查询

exec p_qry '表','f1'

--删除测试环境

drop table 表

/*--测试结果

f2         f3         f4         f5

----------- ----------- ----------- -----------

1          1          1          1

1          1          1          1

1          1          1          1

--*/

篇4:组合查询数据库教程

组合查询

用PB进行数据库应用系统开发时,我们经常要对大量的数据进行筛选、查询,得到符合要求的记录,这就需要用到组合条件查询功能,

组合查询数据库教程

。我在作应用系统开发时,就自己编写了一个简单而又实用的组合条件查询模板窗口,只要用到组合条件查询的地方,都可从此窗口继承而来,非常方便。下面是给出其实现方法。

一、建一个外部数据源的dataobject对象,取名为:d_tabular_query ,各列如下:

Name TypeLenthDeccolumn_namestring10 comparestring3 valuestring255 and_orstring3

二、建一窗口w_condition_query_template,Title设置为:“组合条件查询窗口模板”,并加入控件:

控件名  类型   说明dw_query_condition  datawindow  用以输入查询条件                                            Datawindow Object Name 为前所建数据窗口对象 d_tabular_query      cb_add command button 增加一查询条件cb_del command button删除一查询条件cb_ins command button插入一查询条件cb_clear command button清除所有询条件cb_ok command button由查询条件得出结果dw_query datawindow查询结果 Datawindow Object Name 为空,继承后的子窗口再加入。cb_all command button显示所有记录cb_printcommand button  打印查询结果cb_exit command button 退出

三、编写脚本

1、在dw_query_condition的Constractor事件中加入如下脚本:

//-------------------------------------------------------------//

// 功能说明:根据数据窗口dw_query设定可组合项,供组合查询选择

// 注意事项:数据窗口dw_query的对象中text命名须用默认值,

// 即:列名+ _t

// 柯建勋 于4月27日

//-----------------------------------------------------------------------//

long ll_column_count

long ll_i

long ll_row

string ls_column

string ls_column_name

this.settransobject(sqlca)

ll_row = this.insertrow(0)

this.setitem(ll_row,'compare','=')

this.setitem(ll_row,'and_or','and')

ll_column_count = long(dw_query.Describe(”DataWindow.Column.Count“)) //总列数

this.ClearValues(”column_name“)

for ll_i = 1 to ll_column_count

if dw_query.Describe(”#“+string(ll_i)+”.Visible“) = '1' then

ls_column = dw_query.Describe(”#“+string(ll_i)+”.Name“) //列名

ls_column_name = dw_query.Describe(ls_column + ”_t.text“) //列名对应文本

this.SetValue(”column_name“, ll_i , ls_column_name + ”~t“ + ls_column)

end if

next

2、定义dw_query_condition的用户事件ue_Enterkeydown,Event ID选择pbm_dwnProcessEnter。

当我们按下Enter键时,将触发此事件。在ue_Enterkeydown事件中加入如下脚本:

//回车键(Enter)切换列焦点

long ll_column_count

long ll_column

ll_column_count = long(this.Describe(”DataWindow.Column.Count“))

ll_column = this.getcolumn()

if ll_column = ll_column_count then

cb_add.triggerevent(clicked!) //增加一行

else

this.setcolumn(ll_column + 1)

end if

3、在cb_add的Clicked事件加入:

long ll_row

ll_row = dw_query_condition.insertrow(0)

dw_query_condition.setitem(ll_row,'compare','=')

dw_query_condition.setitem(ll_row,'and_or','and')

dw_query_condition.SetColumn(1)

4、在cb_del的Clicked事件加入:

long ll_row

ll_row = dw_query_condition.getrow()

dw_query_condition.DeleteRow(ll_row)

5、在cb_ins的Clicked事件加入:

long ll_row

long ll_new_row

ll_row = dw_query_condition.getrow()

ll_new_row = dw_query_condition.InsertRow(ll_row)

dw_query_condition.setitem(ll_new_row,'compare','=')

dw_query_condition.setitem(ll_new_row,'and_or','and')

dw_query_condition.SetColumn(1)

6、在cb_clear的Clicked事件加入:

long ll_row

dw_query_condition.reset()

ll_row = dw_query_condition.insertrow(0)

dw_query_condition.setitem(ll_row,'compare','=')

dw_query_condition.setitem(ll_row,'and_or','and')

7、在cb_ok的Clicked事件加入:

//-----------------------------------------------------------------------//

// 条件组合查询 柯建勋 .04.27

//-----------------------------------------------------------------------//

long ll_rowcount

long ll_row

long ll_j

string ls_filter_condition

string ls_column

string ls_compare

string ls_value

string ls_and_or

string ls_column_type

if dw_query_condition.AcceptText() = -1 then return

ll_rowcount = dw_query_condition.rowcount()

if ll_rowcount <=0 then return

ls_filter_condition = ''

for ll_row = 1 to ll_rowcount

ls_column = dw_query_condition.getitemstring(ll_row, 'column_name')

ls_compare = dw_query_condition.getitemstring(ll_row, 'compare')

ls_value = dw_query_condition.getitemstring(ll_row, 'value')

ls_and_or = dw_query_condition.getitemstring(ll_row, 'and_or')

ls_column_type = dw_query.Describe(ls_column + ”.ColType“) //

ls_column_type = left(ls_column_type, 3)

if ll_row = ll_rowcount then //最后一行(不加and、or)

choose case ls_column_type //根据数据类型设置Filter条件

case 'cha' ,'var' ,'str' // 字符型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + ”'“ + ls_value + ”'“

case 'num','dec','lon','rea','ulo' // 数值型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + ls_value

case 'dat','tim' //日期型

ls_filter_condition = ls_filter_condition + ”string(“ + &

ls_column + ”)“ + ls_compare + ”'“ + ls_value + ”'“

case else

end choose

else

choose case ls_column_type //根据数据类型设置Filter条件

case 'cha','var','str' // 字符型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + ”'“ + ls_value + ”' “ &

+ ls_and_or + ” “

case 'num','dec','lon','rea','ulo' // 数值型

ls_filter_condition = ls_filter_condition + &

ls_column + ls_compare + ls_value + ” “ &

+ ls_and_or + ” “

case 'dat','tim' //日期型

ls_filter_condition = ls_filter_condition + ”string(“ +                                                        &    ls_column + ”)“ + ls_compare+ ”“ +        ls_value+ ”' “ &

+ ls_and_or + ” “

case else

end choose

end if

next

dw_query.setredraw(false)

dw_query.setFilter(ls_filter_condition)

if dw_query.filter() = 1 and dw_query.rowcount() > 0 then

ls_column = dw_query_condition.getitemstring(1, 'column_name')

dw_query.setsort(ls_column + ' A')

dw_query.sort()

dw_query.SetColumn(ls_column)

dw_query.selectrow(0,false)

dw_query.selectrow(1,true)

dw_query.setrow(1)

end if

dw_query.setredraw(true)

8、在dw_query的Constractor事件中加入如下脚本:

this.Object.DataWindow.ReadOnly=”Yes“

this.settransobject(sqlca)

this.retrieve()

if this.rowcount() > 0 then

this.selectrow(0,false)

this.selectrow(1,true)

this.setrow(1)

end if

9、在cb_all的Clicked事件加入:

dw_query.SetFilter('')

dw_query.Filter()

if dw_query.rowcount() > 0 then

dw_query.selectrow(0,false)

dw_query.selectrow(1,true)

dw_query.setrow(1)

end if

dw_query.SetFocus()

10、在cb_print的Clicked事件加入:

if messagebox(”提示信息“,”确认打印?“, question!,Yesno!,1) = 1 then

if PrintSetup () = -1 then

messagebox('出错信息','打印机设置出错!',Exclamation!)

return else dw_query.Print() end if

end if

11、在cb_exit的Clicked事件加入:

close(parent)

篇5:用SQL进行单表查询数据库教程

单表查询是相对多表查询而言的,指从一个数据表中查询数据,

用SQL进行单表查询数据库教程

4.2.1 查询所有的记录

在【命令编辑区】执行输入“select * from scott.emp”,然后单击【执行】按钮,出现如图4.3所示的emp数据表所有记录。

【参见光盘文件】:第4章4.2421.sql。

select * from 数据表,这里的“*”代表数据表中所有的字段。

4.2.2 查询所有记录的某些字段

在【命令编辑区】输入“select empno,ename,job from scott.emp”,然后单击【执行】按钮,将显示emp数据表的empno、ename和job字段,如图4.4所示。

【参见光盘文件】:第4章4.2422.sql。

select 字段名1, 字段名2,…… from 数据表,将显示某些特定的字段,注意这里的字段名之间的逗号是英文状态下的逗号。

4.2.3 查询某些字段不同记录

在图4.4所示的job字段中,可以发现有相同的数据,为了查询有多少种不同的job,在【命令编辑区】输入“select distinct job from scott.emp”,然后单击【执行】按钮,出现如图4.5所示的结果。

【参见光盘文件】:第4章4.2423.sql。

select distinct 字段名 from 数据表,这里的“distinct”保留字指在显示时去除相同的记录,与之对应的是“all”将保留相同的记录,默认为“all”。

4.2.4 单条件的查询

(1)在【命令编辑区】输入“select empno,ename,job from scott.emp where job=’MANAGER’”,然后单击【执行】按钮,出现如图4.6所示的字符型字段条件查询的结果,查询的是job为MANAGER的记录。

【参见光盘文件】:第4章4.2424-1.sql。

(2)在【命令编辑区】输入“select empno,ename,sal from scott.emp where sal<=2500”,然后单击【执行】按钮,出现如图4.7所示的数字型字段条件查询的结果,查询的是满足sal小于等于2500的记录。

【参见光盘文件】:第4章4.2424-2.sql。

where可以指定查询条件,如果是指定字符型字段查询条件,形式为字段名 运算符 '字符串';如果是指定数字型字段查询条件,形式为字段名 运算符 '字符串'。 单条件查询使用的比较运算符如表4.1所示。

【参见光盘文件】:第4章4.2table41.sql。

表4.1 比较运算符名称实例=(等于)select * from scott.emp where job=’MANAGER’;select * from scott.emp where sal=1100;!= (不等于)select * from scott.emp where job!=’MANAGER’;select * from scott.emp where sal!=1100;^=(不等于)select * from scott.emp where job^=’MANAGER’;select * from scott.emp where sal^=1100;(不等于)select * from scott.emp where job’MANAGER’;select * from scott.emp where sal1100;<(小于)select * from scott.emp where sal<;select * from scott.emp where job<’MANAGER’;>(大于)select * from scott.emp where sal>2000;select * from scott.emp where job>’MANAGER’;<=(小于等于)select * from scott.emp where sal<=2000;select * from scott.emp where job<=’MANAGER’;>=(大于等于)select * from scott.emp where sal>=2000;select * from scott.emp where job>=’MANAGER’;in(列表)select * from scott.emp where sal in (2000,1000,3000);select * from scott.emp where job in (’MANAGER’,’CLERK’);not in(不在列表)select * from scott.emp where sal not in (2000,1000,3000);select * from scott.emp where job not in (’MANAGER’,’CLERK’);between(介于之间)select * from scott.emp where sal between 2000 and 3000;select * from scott.emp where job between ’MANAGER’ and ’CLERK’;not between (不介于之间)select * from scott.emp where sal not between 2000 and 3000;select * from scott.emp where job not between ’MANAGER’ and ’CLERK’;like(模式匹配)select * from scott.emp where job like ’M%’;select * from scott.emp where job like ’M__’;not like (模式不匹配)select * from scott.emp where job not like ’M%’;select * from scott.emp where job not like ’M__’;Is null (是否为空)select * from scott.emp where sal is null;select * from scott.emp where job is null;is not null(是否为空)select * from scott.emp where sal is not null;select * from scott.emp where job is not null;

like和not like适合字符型字段的查询,%代表任意长度的字符串,_下划线代表一个任意的字符,

like ‘m%’ 代表m开头的任意长度的字符串,like ‘m__’ 代表m开头的长度为3的字符串。

4.2.5 组合条件的查询

(1)在【命令编辑区】输入“select empno,ename,job from scott.emp where job>=’CLERK’ and sal<=2000”,然后单击【执行】按钮,出现如图4.8所示的逻辑与组合查询的结果。

【参见光盘文件】:第4章4.2425-1.sql。

(2)在【命令编辑区】输入“select empno,ename,job from scott.emp where job>=’CLERK’ or sal<=2000”,然后单击【执行】按钮,出现如图4.9所示的逻辑或组合查询的结果。

【参见光盘文件】:第4章4.2425-2.sql。

(3)在【命令编辑区】输入“select empno,ename,job from scott.emp where not job=’CLERK’”,然后单击【执行】按钮,出现如图4.10所示的逻辑非组合查询的结果。

【参见光盘文件】:第4章4.2425-3.sql。

“not job=’CLERK’”等价于“job’CLERK’”。

组合条件中使用的逻辑比较符如表4.2所示。

【参见光盘文件】:第4章4.2table42.sql。

表4.2 逻辑比较符

名称实例and(与)select * from scott.emp where job=’MANAGER’ and sal2000;or (或)select * from scott.emp where job!=’MANAGER’ or sal2000;not(非)select * from scott.emp where not job>=’MANAGER’;

4.2.6 排序查询

在【命令编辑区】输入“select empno,ename,job from scott.emp where job<=’CLERK’ order by job asc,sal desc”,然后单击【执行】按钮,出现如图4.11所示的排序查询的结果。

【参见光盘文件】:第4章4.2426.sql。

order by 可以指定查询结果如何排序,形式为字段名 排序关键词;asc代表升序排列,desc代表降序排列,多个排序字段之间通过逗号分割。若有where查询条件,order by要放在where语句后面。

4.2.7 分组查询

分组查询是指将查询结果按照字段分组。

(1)在【命令编辑区】输入“select empno,ename,job,sal from scott.emp group by job,empno,ename,sal having sal<=2000”,然后单击【执行】按钮,出现如图4.12所示的分组查询的结果。

【参见光盘文件】:第4章4.2427-1.sql。

(2)在【命令编辑区】输入“select empno,ename,job,sal from scott.emp where sal<=2000 group by job,empno,ename,sal”,然后单击【执行】按钮,出现如图4.13所示的分组查询的结果。

【参见光盘文件】:第4章4.2427-2.sql。

where检查每条记录是否符合条件,having是检查分组后的各组是否满足条件。having语句只能配合group by语句使用,没有group by时不能使用having,但可以使用where。

4.2.8 字段运算查询

可以利用几种基本的算术运算符来查询数据。

常见的+(加)、-(减)、*(乘)、/(除)4种算术运算都可以用来查询数据。

在【命令编辑区】输入“select empno,ename,sal,mgr,sal+mgr from scott.emp”,然后单击【执行】按钮,出现如图4.14所示的结果。

【参见光盘文件】:第4章4.2428.sql。

利用算术运算符仅仅适合多个数值型字段或字段与数字之间的运算。

4.2.9 变换查询显示

在【命令编辑区】输入“select empno 编号,ename 姓名,job 工作,sal 薪水 from scott.emp”,然后单击【执行】按钮,出现如图4.15所示的结果,可以将默认的字段名以设定的名称显示。

【参见光盘文件】:第4章4.2429.sql。

以上我们学习了对单个数据表的查询语句。将上面这些基本的实例经过组合,就可以完成基本的日常数据查询任务,接下来进一步学习多表查询。

篇6:如何从 MySQL 数据库表中检索数据数据库教程

1、从数据库表中检索信息

实际上,前面我们已经用到了SELECT语句,它用来从数据库表中检索信息,

select语句格式一般为:

SELECT 检索关键词 FROM 被检索的表 WHERE 检索条件(可选)

以前所使用的“ * ”表示选择所有的列。

下面继续使用我们在上篇文章中创建的表mytable。

2、查询所有数据:

mysql> select * from mytable;

+----------+------+------------+----------+

| name | sex | birth | birthaddr |

+----------+------+------------+--------+

| abccs |f | 1977-07-07 | china |

| mary |f | 1978-12-12 | usa |

| tom |m | 1970-09-02 | usa |

+----------+------+------------+----------+

3 row in set (0.00 sec)

3、修正错误记录:

假如tom的出生日期有错误,应该是1973-09-02,则可以用update语句来修正: mysql> update mytable set birth = ”1973-09-02“ where name = ”tom“;

再用2中的语句看看是否已更正过来。

4、选择特定行

上面修改了tom的出生日期,我们可以选择tom这一行来看看是否已经有了变化:

mysql> select * from mytable where name = ”tom“;

+--------+------+------------+------------+

| name |sex | birth | birthaddr |

+--------+------+------------+------------+

| tom |m | 1973-09-02 | usa |

+--------+------+------------+------------+

1 row in set (0.06 sec)

上面WHERE的参数指定了检索条件。我们还可以用组合条件来进行查询:

mysql> SELECT * FROM mytable WHERE sex = ”f“ AND birthaddr = ”china“;

+--------+------+------------+------------+

| name |sex | birth | birthaddr |

+--------+------+------------+------------+

| abccs |f | 1977-07-07 | china |

+--------+------+------------+------------+

1 row in set (0.06 sec)

5、 选择特定列

假如你想查看表中的所有人的姓名,则可以这样操作:

mysql> SELECT name FROM mytable;

+----------+

| name |

+----------+

| abccs |

| mary |

| tom |

+----------+

3 row in set (0.00 sec)

如果想列出姓名和性别两列,则可以用逗号将关键词name和birth分开: myaql> select name,birth from mytable;

6、对行进行排序

我们可以对表中的记录按生日大小进行排序:

mysql> SELECT name, birth FROM mytable ORDER BY birth;

+----------+------------+

| name | birth |

+----------+------------+

| tom | 1973-09-02 |

| abccs | 1977-07-07 |

| mary | 1978-12-12 |

+----------+------------+

3 row in set (0.00 sec)

我们可以用DESC来进行逆序排序:

mysql> SELECT name, birth FROM mytable ORDER BY birth DESC;

+----------+------------+

| name | birth |

+----------+------------+

| mary | 1978-12-12 |

| abccs | 1977-07-07 |

| tom | 1973-09-02 |

+----------+------------+

3 row in set (0.00 sec)

7、 行计数

数据库经常要统计一些数据,如表中员工的数目,我们就要用到行计数函数COUNT,

COUNT()函数用于对非NULL结果的记录进行计数:

mysql> SELECT COUNT(*) FROM mytable;

+----------+

| COUNT(*) |

+----------+

| 3 |

+----------+

1 row in set (0.06 sec)

员工中男女数量:

mysql> SELECT sex, COUNT(*) FROM mytable GROUP BY sex;

+------+----------+

| sex | COUNT(*) |

+------+----------+

| f | 2 |

| m | 1 |

+------+----------+

2 row in set (0.00 sec)

注意我们使用了GROUP BY对SEX进行了分组。

篇7:如何执行实例程序数据库教程

在服务器上的操作

(1)以system用户、SYSDBA身份登录【SQLPlus Worksheet】,执行creategraduateuser.sql文件创建用户graduateuser,

(2)执行createtablegraduateinfo.sql文件创建数据表graduateuser.graduate_info。

(3)执行createtabledirectorinfo.sql文件创建数据表graduateuser.director_info。

(4)执行createtablemajorinfo.sql文件创建数据表graduateuser.major_info。

(5)执行createindexgraduate.sql文件创建数据表graduateuser. graduate_info的姓名字段的索引。

(6)执行createindexdirector.sql文件创建数据表graduateuser. director_info的姓名字段的索引。

(7)执行createviewgraduate.sql文件创建数据表graduateuser. graduate_info的视图。

(8)执行createviewdirector.sql文件创建数据表graduateuser. director_info的视图。

(9)执行createviewmajor.sql文件创建数据表graduateuser. major_info的视图。

在客户机上的操作

(1)在客户机上调用Oracle 9i客户机的【网络配置助手】(Net Configuration Assistant)配置一个能够连接数据库服务器的【本地网络服务名称】,笔者配置的名称为myoraclelink。这个名称是可以任意取的。

(2)在客户机的【控制面板】/【32位ODBC】中创建一个系统数据源名称,这个名称必须是graduateDB。当然如果读者要采用自己的名称,可以在VB程序的模块MODULE1中进行适当的修改。修改的代码如下。

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

‘定义了名为ConnectString的无参数函数,连接数据库

Public Function ConnectString() As String

ConnectString = ”DSN=graduateDB;UID=graduateuser;PWD=12345678"

End Function

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

在客户机上运行程序

(1)将配套光盘上的Graduate.exe文件任意复制到客户机上,执行该文件出现如图10.55所示界面,

(2)出现如图10.56所示的【添加专业信息】界面。

(3)成功添加专业信息后出现如图10.57所示的提示界面。

(4)按照同样的步骤依次添加专业信息数据,这样添加后的专业数据将用于研究生信息录入和导师信息录入窗体使用。

(5)出现如图10.58所示的【添加导师信息】界面。

(6)成功添加导师信息后出现如图10.59所示的界面。

(7)按照同样的步骤依次添加导师信息数据。

(8)出现如图10.60所示的界面。

(9)成功添加研究生信息后出现如图10.61所示界面,单击“确定”按钮。

(10)出现如图10.62所示的【修改研究生信息】界面。

(11)出现如图10.63所示的【查询研究生信息】界面。

(12)在图10.55所示的系统主界面的【菜单栏】选择【退出系统】选项将退出系统。

(13)其他操作读者可以自行学习,这里不再赘述。

组合查询数据库教程

远程管理SQL数据的方法数据库教程

更改Oracle数据库表的表空间数据库教程

ChangeAllObjectOwner数据库教程

实现千万级数据的分页显示数据库教程

为下拉式数据窗口建立缓冲区数据库教程

Excel 访问远程数据的四种方法数据库教程

项目管理数据库教程

复制监视器数据库教程

Excel实例 在间隔数据中排定名次EXCEL基本教程

如何查询其他数据库内的表(IN子句实例)?数据库教程(精选7篇)

欢迎下载DOC格式的如何查询其他数据库内的表(IN子句实例)?数据库教程,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档