可通过查询v$session视图的方法来获得连接oracle的客户端。
语句如下:
select machine,program from v$session查询结果:
其中,第一列为连接数据库的主机,第二列则为连接oracle数据库的客户端程序。
not exists 的意思是为假成立
举例说明:
(创建测试表及数据)
create table dbo.客户产品
(
客户号 varchar(1),
产品号 varchar(4)
)
insert into dbo.客户产品
values
(1,1001),
(1,1002),
(1,2001),
(2,1001),
(2,1002),
(2,1003),
(2,2001),
(2,2002),
(3,1005),
(4,2001)
查询代码分析:
select 客户号
from dbo.客户产品 客户产品1
where not exists
(select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='1'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号))
当客户号='1'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='1'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(没有记录,结果为假,成立)
客户号 产品号
---- ----
(0 行受影响)
当客户号='2'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='2'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(没有记录,结果为假,成立)
客户号 产品号
---- ----
(0 行受影响)
当客户号='3'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='3'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(有3行记录,结果为真,不成立)
客户号 产品号
---- ----
1 1001
1 1002
1 2001
(3 行受影响)
当客户号='4'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='4'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(有2行记录,结果为真,不成立)
客户号 产品号
---- ----
1 1001
1 1002
(2 行受影响)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)