`

个人总结的几条比较有意思的sql语句

 
阅读更多

--------------------------------------------------------------------
--
作者:张爱国
--
日期:2010-01-23 15:00:17
--
描述: 一些比较有意思的SQL语句
--
Version:
--
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)
--
Feb 9 2007 22:47:07
--
Copyright (c) 1988-2005 Microsoft Corporation
--
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
------------------------------------------------------------------
--
首先创建一个测试用的表
--
一下语句中用到的表tb均指这个测试表
--
1、你猜下面这条语句能得到什么结果,这个很常用
ifobject_id('tb') is not null
drop table tb
go select getdate()
create table tb(id int identity ,name varchar(10))
insert into tb select '张三'
union all select '李四'
union all select '王五'
union all select '赵六'
go
select * into ta from tb where 1<>1

--2、下面这条语句会报错吗?为什么,怎么修改才能让它输出 “正确” 这两个字
select case when 1>1 then 1
when 1=1 then '正确'
when 1<1 then 2
end
--3、 怎么才能做到下面的三条同时执行得到的结果是命令已成功完成。
--而不是select附近有语法错误
select
select 1
select
--4、 思考一下这个问题
--
在master中建个表,在其它库里访问(同一服务器),不允许使用限定名,如何才能直接访问此表?

--5、 datalength() 返回用于表示任何表达式的字节数。
--
你猜下面的结果会是什么?为什么
select datalength('1'),datalength(1),datalength(getdate()),datalength('2010-01-23 13:01:37.280')

--6、你可以试试下面的三个语句,为什么第一个会有语法错误,而第二个结果是正确的
--
Ⅰ:
select * from tb order by name
union all
select * from tb
--Ⅱ:
select * from tb
union all
select * from tb order by name
--提示:执行下面的语句得到的错误信息会对你有用
select * from (select * from tb order by name) a

--7、
--
再name列上创建一个简单的聚集索引
if exists (select name from sys.indexes where name = N'ix_tb_name')
drop index ix_tb_name on tb;
GO
create index ix_tb_name on tb(name)
--你猜下面两个语句哪个效率会高(当然是数据量比较大的时候)
select name from tb where left(name,1)=''
select name from tb where name like '张%'

--扩展: 如果不加索引呢?

--8、如果你是第一次见到下面的执行结果会让你感到惊讶的,但是它很常用
--
这又是什么原理呢?
declare @s varchar(100)
select @s=isnull(@s+',','') + name from tb
select @s

--9、怎么快捷简便的将还有英文日期转化为纯数字格式的
--
如:将23 January 2010 或者 January 232010 转化为 2010-01-23
--
提示可以巧用 set language 指令

--10、一个比较好玩的sql语句,再查询分析器里try一下
declare @sql varchar(max);
select @sql=text
from master.sys.dm_exec_requests a
CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)
print @sql
--11、怎么忘下面的表中插入数据
--
前提:不使用alter table 语句和set identity_insert 指令
create table t(id int not null identity(1,1))
/*
总结了一个多小时,刚听到个通知明天不休息,愤怒。。。。
不写了,没心情了,NND。

以后有新发现了再补充
这些都是些雕虫小技
如果你感兴趣又想知道答案的请留言
欢迎大家指教,留下你的建议和看法

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics