以下是小编为大家整理的一种嵌套查询,变成连接查询的办法数据库教程,本文共5篇,希望对您有所帮助。本文原稿由网友“笑春风”提供。
篇1:一种嵌套查询,变成连接查询的办法数据库教程
主 题:这句sql语句可不可以变成连接查询的呢? 作 者:overmind (overmind) 等 级: 信 誉 值:100 所属社区:Oracle 开发 问题点数:100 回复次数:6 发表时间:-12-14 10:31:43 select t1.oid from t1 where t1.oid not in (select oid from t2 where t2.userid='overmind'); 回复人: overmind(overmind) ( ) 信誉:100 2004-12-14 10:32:07 得分: 0 谢谢了先! Top 回复人: ORARichard(没钱的日子好难过啊) ( ) 信誉:100 2004-12-14 10:38:00 得分: 100 select t1.oid from t1,(select oid from t2 where t2.userid='overmind') t3where t1.oid t3.oid Top 回复人: ORARichard(没钱的日子好难过啊) ( ) 信誉:100 2004-12-14 10:40:49 得分: 0 还可以select t1.oid from t1,( select oid from t1 minus select oid from t2 where userid='overmind') t3where t1.oid=t3.oid;
篇2:查询重复记录数据库教程
重复|重复记录
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
/*--查询重复记录的通用存储过程
可以查询出表中那些数据是重复的,这里的重复,是指除主键外重复的记录
如果表中有主键,请指定主键.
如果表中有标识字段,而且标识字段无重复,请在调用时,将主键指定为标识字段
如果标识字段重复,不能用此存储过程
-- 2004.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
--*/
篇3:组合查询数据库教程
组合查询
用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)
篇4:动态分组查询数据库教程
动态|分组
原帖地址:
community.csdn.net/Expert/topic/3428/3428792.xml?temp=.6476251
--示例数据
create table 表(ID int,NUM int)
insert 表 select 1,2
union all select 2,3
union all select 3,2
union all select 4,2
union all select 5,12
union all select 6,2
union all select 7,1
union all select 8,5
union all select 9,1
go
/*--问题说明:
输入分组参数,比如输入 ”3,6“ ,实现按 ID<=3,3
输入分组参数,比如输入 ”2,5,8\" ,实现按 ID<=2,2
--*/
--查询的存储过程
create proc p_qry
@numlist varchar(1000)
as
set nocount on
declare @t table(id int identity,组 varchar(10),a int,b int)
declare @i int,@pnum varchar(10)
select @i=charindex(',',@numlist+',')
,@pnum=left(@numlist,@i-1)
,@numlist=stuff(@numlist,1,@i,'')
,@i=charindex(',',@numlist)
insert @t select 'id<='+@pnum,null,@pnum
while @i>0
begin
insert @t select @pnum+'
select @pnum=left(@numlist,@i-1)
,@numlist=stuff(@numlist,1,@i,'')
,@i=charindex(',',@numlist)
end
insert @t select 'id>'+@numlist,@numlist,null
select b.组,num=sum(a.num)
from 表 a,@t b
where case
when b.a is null then case when a.id<=b.b then 1 else 0 end
when b.b is null then case when a.id>b.a then 1 else 0 end
else case when a.id>b.a and a.id<=b.b then 1 else 0 end
end=1
group by b.组
order by min(b.id)
go
--调用存储过程进行查询
exec p_qry '2,5,8'
go
--删除测试
drop table 表
drop proc p_qry
/*--测试结果
组 num
---------- -----------
id<=2 5
2
id>8 1
--*/
篇5:分布式查询和分布式事务数据库教程
分布式
Microsoft® SQL Server™ 允许创建与称为链接服务器的 OLE DB 数据源的链接,分布式查询和分布式事务数据库教程
。在链接到 OLE DB 数据源之后,可以:从 OLE DB 数据源引用行集,作为 Transact-SQL 语句中的表。
将命令传递给 OLE DB 数据源,并包含结果行集,作为 Transact-SQL 语句中的表。 每个分布式查询都可以引用多个链接的服务器,而且可以对每个链接的服务器分别执行更新或读取操作。单个分布式查询可以对某些链接的服务器执行读取操作,并且对其它链接的服务器执行更新操作。通常情况下,每当某个事务可能更新多个链接服务器中的数据时,Microsoft SQL Server 都要求相应的 OLE DB 提供程序支持分布式事务。因此,链接服务器上所支持的查询类型取决于 OLE DB 提供程序中对事务的支持级别。OLE DB 为事务管理定义了两个可选的接口:
ITransactionLocal 支持 OLE DB 数据源中的本地事务。
ITransactionJoin 允许提供程序联结包含其它资源管理器的分布式事务。
所有支持 ITransactionJoin 的提供程序也都支持 ITransactionLocal。
如果在连接是自动提交模式时执行分布式查询,则应用以下规则:
对于不支持 ItransactionLocal 的提供程序,只允许执行读取操作,
对于支持 ITransactionLocal 的提供程序,允许执行所有更新操作。
主控 SQL Server 会自动调用每个参与更新操作的链接的服务器中的 ITransactionLocal,以启动本地事务,并在语句执行成功时提交或在语句执行失败时回滚。
如果分布式查询是针对分布式分区视图或者是在连接为显式或隐性事务时执行,则应用下列规则:
对于不支持 ITransactionJoin 的提供程序,只允许执行读取操作。不支持任何事务或只支持 ITransactionLocal 的提供程序不能参与更新操作。
如果 SET XACT_ABORT 设置为 ON,则对于支持 ITransactionJoin 的任意提供程序都允许执行所有的更新操作。主控 SQL Server 会自动调用每个参与更新操作的链接服务器中的 ITransactionJoin,以便在分布式事务中登记该服务器。然后当主控服务器表示要提交或回滚事务时,MS DTC 将提交或者回滚。
如果 SET XACT_ABORT 设置为 OFF,则链接服务器还必须支持嵌套事务,才能对其执行更新操作。当会话已经有一个现有事务时,如果提供程序支持调用 ITransactionLocal::StartTransaction,则支持嵌套事务。这使 SQL Server 得以回滚分布式查询中的单个语句,而不是回滚整个事务。
上述规则意味着提供程序的下列限制不支持嵌套事务:仅在 XACT_ABORT 选项设置为 ON 时,分布式事务中才允许更新操作。
- [转]辽宁高考查分高考成绩查询办法2024-04-22
- 一些有用的查询语句(关于系统表的使用)数据库2023-03-15