MingHao_Hu

博客园 首页 新随笔 联系 订阅 管理
  81 随笔 :: 0 文章 :: 23 评论 :: 37318 阅读

随笔分类 -  sql

数据库
摘要:在sql中使用exists替换in查询时要注意使用exists时一定要关联主查询和子查询的关联不然查询会得不到相应的结果如下语句:语句一使用in查询:select realname from Users where Users.UserId in (select Gallery.Galleries.CreatorId from Gallery.Galleries group by Gallery.Galleries.CreatorId having COUNT(Gallery.Galleries.CreatorId)>1 ) Order by UserId语句二使用exists查询:se 阅读全文
posted @ 2012-11-22 12:11 MingHao_Hu 阅读(784) 评论(0) 推荐(0) 编辑

摘要:写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了。通过设置STATISTICS我们可以查看执行SQL时的系统情况。选项有PROFILE,IO,TIME。介绍如下:SETSTATISTICSPROFILEON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。SETSTATISTICSIOON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。SETSTATISTICSTIMEON:显示每个查询执行后的结果集,代表查询执行的配置文件。使用方 阅读全文
posted @ 2012-11-22 09:15 MingHao_Hu 阅读(343) 评论(0) 推荐(0) 编辑

摘要:1:在查询是用exist来代替in,使用not exist代替 not in2:使用级联letf join 或者right join 时一定要用少的一边join那一张表。 阅读全文
posted @ 2012-11-22 09:14 MingHao_Hu 阅读(158) 评论(0) 推荐(0) 编辑

摘要:数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下:1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。假设有两张表:表1:tab2idsize110220330表2:tab2sizename10AAA20BBB20CCC两条SQL: 1、select * form tab1 left join t 阅读全文
posted @ 2012-11-20 09:35 MingHao_Hu 阅读(367) 评论(0) 推荐(0) 编辑

摘要:利用索引可以更改一张表的排序方式语句:create index IX_T on T(ID asc) 阅读全文
posted @ 2012-11-02 16:49 MingHao_Hu 阅读(631) 评论(0) 推荐(0) 编辑

摘要:SELECT 字段序号 = a.colorder, 字段名 = a.name, 标识 = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, 主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT 阅读全文
posted @ 2012-10-09 14:53 MingHao_Hu 阅读(182) 评论(0) 推荐(0) 编辑

摘要:今天一不小心在sql中写出以下脚本select defaultPositionId from TableName where UserId=1100528 and defaultPositionId =null执行之后大惊怎么没有结果,使用select * from tableName 该列确实为null怎么查补出来难道自己人品问题于是自己又写了以下判断if(null=null)BEgin print 'fff'end elsebegin print 'gggg'end输出结果如下:无语难道null与null还有区别。于是找搜索引擎,在sql中null是一种数据 阅读全文
posted @ 2012-09-21 16:30 MingHao_Hu 阅读(1726) 评论(13) 推荐(2) 编辑

摘要:DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID VARCHAR(50) ,@sql2 NVARCHAR(MAX);SET @TableName = 'Orders ';SET @OrderID = N'10251';SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERI 阅读全文
posted @ 2012-09-04 08:43 MingHao_Hu 阅读(288) 评论(0) 推荐(0) 编辑

摘要:Create procedure [dbo].[test]@test1 int output as BEGINselect @test1=count(*) from Usersend以下是调用存储过程DECLARE @test int Exec [test] @test output //需要注意的是如果想要获得输出参数的值,在调用的过程中output关键字必须加上,不然默认是输入参数select @test //这个输出的是users表的所有行数 阅读全文
posted @ 2012-08-15 08:59 MingHao_Hu 阅读(299) 评论(0) 推荐(0) 编辑

摘要:sql2008我在数据库表中某列设置为bigint可以为空,当我存放数据时不给该列赋值该列存放到数据库中的值既然是0当是0是会导致我查询有问题,找了很长时间也是知道什么原因最后判断一下如果该列没有值,就存进去null 阅读全文
posted @ 2012-08-01 14:24 MingHao_Hu 阅读(425) 评论(0) 推荐(0) 编辑

摘要:---分组排序返回的行是在改组中的第几个位置中间可能间断select FileId,FileClass,UserId,RANK() over(PARTITION BY fileClass order by UserId) from files----分组排序返回的行是在改组中的第几个位置中间不间断,组数是根据ntile(参数)中的参数select FileId,FileClass,UserId,ntile(3) over(PARTITION BY fileClass order by UserId) from files----分组排序返回的行是在改组中的第几个位置中间不间断select Fi 阅读全文
posted @ 2012-06-27 12:41 MingHao_Hu 阅读(234) 评论(0) 推荐(0) 编辑

摘要:1.over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。其参数:over(partition by columnname1 order by columnname2)含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。例如:employees表中,有两个部门的记录:department_id =10和20 select department_id,rank() over(partition by department_id order by salary) from employee 阅读全文
posted @ 2012-05-07 08:42 MingHao_Hu 阅读(1408) 评论(0) 推荐(0) 编辑

摘要:dt1.Select("BindUID='" + model.Uid + "'").Length == 0和dt1.Select("BindUID=\"" + model.Uid + "\").Length == 0区别是:第一句语句是正确的,第二与回报错误!原因是在liqn查询的所有语句都是按sql的语法编写的,第二句中BindUID=\"" + model.Uid + "\" 字符串连接后的“"”在sql中是无法解释的! 阅读全文
posted @ 2012-05-02 08:44 MingHao_Hu 阅读(393) 评论(0) 推荐(0) 编辑

摘要:INSERT @TImmobility SELECT ImmobilityId,ImmobilityName,ImmobilityType, EditDate FROM Immobility.Bases WHERE ExpiredDate>=GETDATE() and QualifyType>=@QualifyType and CityId like @UserCity+'%'SET @COUNT = @COUNT + ROWCOUNT_BIG()返回上一次操作的行数!放回的是插入上个表中的行数。 阅读全文
posted @ 2012-03-21 17:03 MingHao_Hu 阅读(450) 评论(0) 推荐(0) 编辑

摘要:^,叫异或,SQL里的位运算符,运算规则:0^0=0 ;0^1=1;1^1=0,即两个二进制数据,按着^运算,相同结果为0,相异结果为1。位运算符在两个表达式之间执行位操作,这两个表达式可以为整数类型中的任何数据类型select 1^1345这样会得到1344。具体算法,把参与运算的两个整数都转换为二进制数据(可用计算器算二进制数),然后上下对应按位异或。1345对应的2进制数:101010000011010100000100000000001--------------------1010100000010101000000对应的10进制数为1344,就是这么来的 阅读全文
posted @ 2012-03-09 17:11 MingHao_Hu 阅读(1302) 评论(0) 推荐(0) 编辑

摘要:select * from城市列表的table where '863302' like CityId+'%'是在city中检索包含在常量'863302'中的字符串select * from城市列表的table where '863302' like CityId+'%'上面sql语句查询出来的结果如下: 阅读全文
posted @ 2011-12-23 09:05 MingHao_Hu 阅读(195) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示