文章分类 -  MSSQL

摘要:假设有这样一张运动员比赛成绩表 tb_score 现在要求查询出每个国家的前三名的成绩记录,查询语句可以这样写: 1、 select t3.id,t3.country,t3.score from (select t1.*, (select count(*) from tb_score t2 wher 阅读全文
posted @ 2017-01-05 10:45 QQ天堂 阅读(262) 评论(0) 推荐(0) 编辑
摘要:MySQL查询获取行号rownumMySQL中可以使用变量产生行号,下面是2个简单例子:使用工具:MySQL Workbench说明:表heyf_10中字段,empid(员工工号)、deptid(部门编号)、salary(薪资);rownum是自定义变量,表示行号。对员工按照部门进行分组,分组后对相... 阅读全文
posted @ 2015-12-28 19:34 QQ天堂 阅读(2383) 评论(0) 推荐(0) 编辑
摘要:Explain语法EXPLAIN SELECT ……变体:1. EXPLAIN EXTENDED SELECT ……将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT ……用于分... 阅读全文
posted @ 2015-11-30 18:53 QQ天堂 阅读(383) 评论(0) 推荐(0) 编辑
摘要:项目应用中,曾有以下一个场景:接口中要求发送一个int类型的流水号,由于多线程模式,如果用时间戳,可能会有重复的情况(当然概率很小)。所以想到了利用一个独立的自增的sequence来解决该问题。当前数据库为:mysql由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一... 阅读全文
posted @ 2015-08-05 19:28 QQ天堂 阅读(875) 评论(0) 推荐(0) 编辑
摘要:提到mysql,我顺便讲讲序列。用过oracle的人都知道,orale没有类似mysql的AUTO_INCREMENT这样的自增长字段,实现插入一条记录,自动增加1.oracle是通过sequence(序列)来完成的。这样看起来,似乎mysql的自增长要比oracle序列的实现更好更方便。那我为什么... 阅读全文
posted @ 2015-08-05 19:27 QQ天堂 阅读(55231) 评论(4) 推荐(0) 编辑
摘要:LPAD(str,len,padstr)用字符串 padstr对 str进行左边填补直至它的长度达到 len个字符长度,然后返回 str。如果 str的长度长于 len',那么它将被截除到 len个字符。mysql> SELECT LPAD('hi',4,'??'); -> '??hi'RPAD(s... 阅读全文
posted @ 2015-08-05 19:25 QQ天堂 阅读(15129) 评论(0) 推荐(2) 编辑
摘要:概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度。同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,如果不特殊说明的话一般是指单一索引。宽索引也就是索引列超过2列的索引。设计索引的一个重要原 阅读全文
posted @ 2012-09-17 17:56 QQ天堂 阅读(1901) 评论(0) 推荐(0) 编辑
摘要:having子句与where有相似之处但也有区别,都是设定条件的语句。在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。简单说来:where子句:select sum(num) as rmb from order where id>10//只有先查询出id大于10的记录才能进行聚合语句having子句:select reportsto as manager, count(*) as reports from employeesgroup by 阅读全文
posted @ 2011-12-26 10:35 QQ天堂 阅读(217) 评论(0) 推荐(0) 编辑
摘要:数据库在创建主键同时,会自动建立一个唯一索引。如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,则建立主键时候,同时建立一个唯一的聚集索引。所以建立主键(PRIMARY KEY)与聚集索引(Clustered Index)的先后顺序就只有下面几种情况:为了更方面的描述,假设我们有如下表:CREATE TABLE [dbo].[User]( [UserName] [nvarchar](10) NOT NULL, [Email] [nvarchar](100) NULL ) ON [PRIMARY] GO情况一、在没有任何索引的表上建主键,同时自动产生唯一的聚集索引。这种情况 阅读全文
posted @ 2011-10-31 18:28 QQ天堂 阅读(741) 评论(0) 推荐(0) 编辑
摘要:主键(PRIMARY KEY )来自MSDN的描述:表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎 将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可 阅读全文
posted @ 2011-10-31 18:23 QQ天堂 阅读(15252) 评论(0) 推荐(0) 编辑
摘要:1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=03.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎 阅读全文
posted @ 2011-08-05 11:25 QQ天堂 阅读(361) 评论(0) 推荐(0) 编辑
摘要:确切匹配: select * from hs_user where ID=123 模糊查询 select * from hs_user where ID like '%123%' %为通配符通配符:(LIKE用于字符串,,,,,如果要对数字进行操作用in...in (200,230))通配符描述示例%包含零个或更多字符的任意字符串。WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。_(下划线)任何单个字符。WHERE au_fname LIKE '_ean' 将查找以 ea 阅读全文
posted @ 2011-05-23 13:46 QQ天堂 阅读(80504) 评论(0) 推荐(3) 编辑
摘要:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_search]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_search] GO /*--在整个数据库搜索某个字符串在哪个表的哪个字段中 /*--调用示例 ... 阅读全文
posted @ 2010-12-02 22:29 QQ天堂 阅读(673) 评论(0) 推荐(0) 编辑
摘要:方法1:[代码]方法2:01CREATE PROC sp_ValueSearch 02@value sql_variant, --要搜索的数据 03@precision bit=1 --1=仅根据sql_variant中的数据类型查找对应类型的数据列.<>1,查询兼容的所有列,字符数据使用like匹配 04AS05SET NOCOUNT ON06IF @value IS NULL RE... 阅读全文
posted @ 2010-11-24 00:32 QQ天堂 阅读(1738) 评论(0) 推荐(0) 编辑
摘要:ALTER TABLE名称ALTER TABLE — 更改表属性输入table试图更改的现存表的名称.column现存或新的列名称.type新列的类型.newcolumn现存列的新名称.newtable表的新名称.输出ALTER从被更名的列或表返回的信息.ERROR如果一个列或表不存在返回的信息.描述ALTER TABLE变更一个现存表的定义.ADD COLUMN形式用与CREATE ... 阅读全文
posted @ 2010-03-05 18:29 QQ天堂 阅读(1485) 评论(0) 推荐(0) 编辑
摘要:索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引,可以加快数据的查询速度和减少系统的响应时间;可以使表和表之间的连接速度加快。但是,不是在任何时候使用索引都能够达到这种效果。若在不恰当的场合下,使用索引反而会事与愿违。所以,在SQL Server数据库中使用索引的话,还是需要遵守一定的规则。笔者觉得,主要是... 阅读全文
posted @ 2009-10-26 18:32 QQ天堂 阅读(191) 评论(0) 推荐(0) 编辑
摘要:临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL S... 阅读全文
posted @ 2008-12-19 21:01 QQ天堂 阅读(941) 评论(0) 推荐(0) 编辑
摘要:在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?谢谢! 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) >... 阅读全文
posted @ 2008-11-05 15:49 QQ天堂 阅读(3770) 评论(1) 推荐(0) 编辑
摘要:語法DISABLE TRIGGER { [ schema . ] trigger_name [ ,...n ] | ALL }ON { object_name | DATABASE | ALL SERVER } [ ; ]權限 若要禁用 DML 触发器,用户必须至少对为其创建触发器的表或视图具有 ALTER 权限。 若要禁用服务器作用域 (ON ALL SERVER) 中的 DDL 触发器,用户必... 阅读全文
posted @ 2008-11-05 15:43 QQ天堂 阅读(1530) 评论(0) 推荐(0) 编辑
摘要:SELECT SUM([Flux]) AS [SumPIDFlux], CONVERT(VARCHAR(10),[PerDayDateTime],120) AS [PerDayDateTime] FROM [Sherrys_stat].[dbo].[FluxAreaStats]RIGHT OUTER JOIN [#PerDayReport]ON CONVERT(... 阅读全文
posted @ 2008-11-02 17:08 QQ天堂 阅读(3840) 评论(0) 推荐(0) 编辑