您的位置:首页 > 数据库

个人总结的几条有趣的SQL语句

2010-03-02 11:16 926 查看
-------------------------------------------------------------------------------------------------------------
-- 作者:小爱

-- 日期: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均指这个测试表

if object_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
--1、你猜下面这条语句能得到什么结果,这个很常用
select * into ta from tb where 1<>1
-- 把条件换成 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 23 2010 转化为 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。

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

--2010-01-28补充一个

--12、下面的赋值语句有何不一样?

set @Id=(select id from @tb where id=@LvenNum)
select @Id=id from @tb where id=@LvenNum

--2010-01-29补充

--13、再企业管理器的可视化操作,打开表(表格形式的),在允许null的行中

-- 怎么输入null,当然默认的是null。如果有值或者为“ ” 怎么改回null?

--2010-01-31

--14、SQl2005 怎么动态添加一计算列等于原有几个计算列的和或者积或者更复杂点的运算

--2010-02-01

--15、查一个月有多少天的SQL语句,方法会有很多种

--2010-03-01

--16、两个重要的微软未公开的存储过程

  sp_msforeachtable
  sp_msforeachdb个人总结的几条有趣的SQL语句
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: