包含selectnullfrom的词条

http://www.itjxue.com  2023-01-13 01:17  来源:未知  点击次数: 

在PL/SQL中,Select Null From Dual Connect By Rownum 具体是什么意思,getstr和str怎么用

Connect By Rownum ???

好像不能这样用的,CONNECT BY 后面需要跟一个条件,可以修改为

Select NULL From Dual Connect By Rownum 5

这句话的意思是查询出4条记录,而每条记录的结果都是NULL,至于说具体这样做的目的就需要看看具体的应用场景了,有时候,为了初始化多行记录,而对于来列的值允许为空的时候,就可以使用这种方式。

另外,PL/SQL中没有看到getstr和str的函数,不知道楼主想用这个做什么?

数据库里选中的都变为etx ,怎么处理

select * from t1 where exists ( select null from t2 where y = x )

可以理解为:

for x in ( select * from t1 )

loop

if ( exists ( select null from t2 where y = x.x )

then

OUTPUT THE RECORD

end if

end loop

对于in和exists的性能区别:

如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。

其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了

另外IN时不对NULL进行处理

如:

select 1 from dual where null in (0,1,2,null) 2.NOT IN与NOT EXISTS:

NOT EXISTS的执行流程

select .....

from rollup R

where not exists ( select 'Found' from title T

where R.source_id = T.Title_ID);

可以理解为:

for x in ( select * from rollup )

loop

if ( not exists ( that query ) ) then

OUTPUT

end if;

end;

注意:NOT EXISTS与 NOT IN不能完全互相替换,看具体的需求。如果选择的列可以为空,则不能被替换。

例如下面语句,看他们的区别:

select x,y from t;

x y

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

1 3

3 1

1 2

1 1

3 1

5

select * from t where x not in (select y from t t2 )

no rows

select * from t where not exists (select null from t t2

where t2.y=t.x )

x y

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

5 NULL

所以要具体需求来决定

对于not in和 not exists的性能区别:

not in只有当子查询中,select 关键字后的字段有not null约束或者有这种暗示时用not in,另外如果主查询中表大,子查询中的表小但是记录多,则应当使用not in,并使用anti hash join.

如果主查询表中记录少,子查询表中记录多,并有索引,可以使用not exists,另外not in最好也可以用/*+ HASH_AJ */或者外连接+is null

NOT IN在基于成本的应用中较好

比如:

select .....

from rollup R

where not exists ( select 'Found' from title T

where R.source_id = T.Title_ID);

gbase8t有没有”select NULL from 表名“的表达式?

关于null值的查询,可以按以下格式使用。

select null::char from table where ....;

select null::int from table where ....;

根据要插入字段的类型来判断是char或int

也可以使用decode语句

例如:select decode(NULL,NULL,NULL) from 表名

mysql中的select null from table中的null是什么意思

查询结果只返回1列,列名为NULL,表中内容全是null。

没有多大用处,可以学习研究使用,实际项目组基本不会这样查询。

SQLSERVER语句 in和exists哪个效率高本人测试证明

例如下面两个SQL语句

1 SELECT OrderNo, SiteCode, AreaCode

2 FROM SchedulingProgram

3 WHERE AreaCode IN ( 'P', 'M' ) AND SiteCode IN ( SELECT SiteCode

4 FROM EnvBasicInfo

5 WHERE cityiD = 31 ) AND OrderNo NOT IN (

6 SELECT OrderNo

7 FROM KK_DeliveryinfoTmp )

上面SQL语句IN里面有IN和NOT IN

1 SELECT OrderNo, SiteCode, AreaCode

2 FROM SchedulingProgram

3 WHERE ( AreaCode IN ( 'P', 'M' ) AND SiteCode IN ( SELECT SiteCode

4 FROM EnvBasicInfo

5 WHERE cityiD = 31 )

6 ) AND NOT EXISTS ( SELECT OrderNo

7 FROM KK_DeliveryinfoTmp

8 WHERE KK_DeliveryinfoTmp.OrderNo = SchedulingProgram.OrderNo )

上面的SQL语句IN里面又有NOT EXISTS

这样的情况很难测试同等条件下IN语句和EXISTS语句的效率

还有一个非SARG运算符

在《SQLSERVER企业级平台管理实践》的第424页里提到:

SQLSERVER对筛选条件(search argument/SARG)的写法有一定的建议

对于不使用SARG运算符的表达式,索引是没有用的,SQLSERVER对它们很难使用比较优化的做法。非SARG运算符包括

NOT、、NOT EXISTS、NOT IN、NOT LIKE和内部函数,例如:Convert、Upper等

所以当您的表中有索引并且SQL语句包含非SARG运算符,那么当测试SQL语句的执行时间的时候肯定相差很大,

因为有些SQL语句走索引,有些SQL语句不走索引

建表脚本

注意:两个表中都有索引!!

CT_FuelingData表

1 USE [GPOSDB]

2 GO

3 /****** 对象: Table [dbo].[CT_FuelingData] 脚本日期: 08/24/2013 11:00:34 ******/

4 SET ANSI_NULLS ON

5 GO

6 SET QUOTED_IDENTIFIER ON

7 GO

8 SET ANSI_PADDING ON

9 GO

10 CREATE TABLE [dbo].[CT_FuelingData](

11 [RecordNO] [int] IDENTITY(1,1) NOT NULL,

12 [I_FD_StationNo] [int] NOT NULL,

13 [VC_FD_No] [varchar](50) NOT NULL,

14 [VC_FD_Cardno] [varchar](50) NOT NULL,

15 [I_FD_CardStatus] [int] NULL,

16 [LI_FD_CTC] [bigint] NOT NULL,

17 [I_FD_TypeCode] [int] NULL,

18 [I_FD_PumpID] [int] NOT NULL,

19 [VC_FD_OilType] [varchar](50) NULL,

20 [DE_FD_Volume] [decimal](18, 2) NULL,

21 [DE_FD_Price] [decimal](18, 2) NULL,

22 [DE_FD_Amount] [decimal](18, 2) NULL,

23 [I_FD_Point] [decimal](10, 2) NULL,

24 [D_FD_DateTime] [datetime] NOT NULL,

25 [VC_FD_GroupNo] [varchar](50) NULL,

26 [D_FD_GroupDate] [datetime] NULL,

27 [DE_FD_CardAmount] [decimal](18, 2) NULL,

28 [DE_FD_VolumeTotals] [decimal](18, 2) NULL,

29 [DE_FD_AmountTotals] [decimal](18, 2) NULL,

30 [I_FD_ISSend] [int] NULL,

31 [VC_FD_CardMoneyauthFile] [varchar](50) NULL,

32 [D_Month] [datetime] NULL,

33 CONSTRAINT [PK_CT_FuelingData_1] PRIMARY KEY CLUSTERED

34 (

35 [VC_FD_No] ASC

36 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

37 ) ON [PRIMARY]

38

39 GO

40 SET ANSI_PADDING OFF

CT_InhouseCard表

1 USE [GPOSDB]

2 GO

3 /****** 对象: Table [dbo].[CT_InhouseCard] 脚本日期: 08/24/2013 10:59:58 ******/

4 SET ANSI_NULLS ON

5 GO

6 SET QUOTED_IDENTIFIER ON

7 GO

8 SET ANSI_PADDING ON

9 GO

10 CREATE TABLE [dbo].[CT_InhouseCard](

11 [RecordNO] [int] IDENTITY(1,1) NOT NULL,

12 [VC_IC_CardNO] [varchar](50) NOT NULL,

13 [VC_IC_PhysicalNO] [varchar](50) NULL,

14 [I_IC_CardType] [int] NULL,

15 [VC_IC_UserName] [varchar](50) NULL,

16 [VC_IC_JobNO] [varchar](50) NULL,

17 [VC_IC_UserID] [varchar](50) NULL,

18 [VC_IC_Password] [varchar](50) NULL,

19 [DE_IC_CardAmount] [decimal](18, 2) NULL,

20 [DE_IC_AppendAmount] [decimal](18, 2) NULL,

21 [DE_IC_ConsumerAmount] [decimal](18, 2) NULL,

22 [I_IC_ISLost] [int] NULL,

23 [D_IC_UsedDateTime] [datetime] NULL,

24 [D_IC_UselifeDateTime] [datetime] NULL,

25 [I_IC_IssueStationNO] [int] NULL,

26 [VC_IC_IssuerNO] [varchar](50) NULL,

27 [D_IC_IssueDateTime] [datetime] NULL,

28 [D_IC_LastUpdateDateTime] [datetime] NULL,

29 [I_IC_CardStatus] [int] NULL,

30 [VC_IC_Remark] [varchar](256) NULL,

31 CONSTRAINT [PK_CT_InhouseCard] PRIMARY KEY CLUSTERED

32 (

33 [VC_IC_CardNO] ASC

34 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

35 ) ON [PRIMARY]

36

37 GO

38 SET ANSI_PADDING OFF

sql server 分组筛选语句

use?DT_WareHouse;

set?nocount?on;

declare?@tb?table

(

?id?int?identity(1,1),

?cnid?int,

?name?nvarchar(30)

)

insert?into?@tb(cnid,name)

select?'111','张三'?union?all

select?'111','张三'?union?all

select?'22','李四'?union?all

select?'22','李四'?union?all

select?'22','王五'?union?all

select?'22','赵六'?union?all

select?'22','狗蛋'?union?all

select?'333','铁柱'?union?all

select?'333','二牛'?union?all

select?'333','二牛'?

select

A.id,A.cnid,A.name

from?@tb?A

where?not?exists

(

??select?null?from?@tb?B?where?A.cnid=B.cnid?and?A.name=B.name?and?A.idB.id

)

以上是执行结果。

(责任编辑:IT教学网)

更多

推荐Frontpage教程文章