随笔分类 -  数据库

摘要:HAVING子句用于指定对组进行过滤的谓词或逻辑表达式,这与WHERE阶段对单独的行进行过滤相对应。只有能让HAVING子句中的逻辑表达式为TRUE的组,HAVING阶段才会把这些组返回到下一个逻辑查询处理阶段。逻辑表达式计算结果为FALSE或UNKNOWN的组将被过滤掉。 因为HAVING子句是在对行进行分组后处理的,所以可以在逻辑表达式中引用聚合函数。例如,在下面所示的代码中,HAVING子句使用了逻辑表达式COUNT(*)>1,意味着HAVING阶段过滤器只保留包含多行的组(雇员和订单年份)。 SELECT empid,YEAR(orderdate) AS orderyear,CO 阅读全文
posted @ 2012-09-21 16:50 沙耶 编辑
摘要:GROUP BY阶段可以将WHERE逻辑查询处理阶段返回的行按“组”进行组合。每个组由在GROUP BY子句中指定的各元素决定。例如,以下代码所示查询的GROUP BY子句就使用了empid和YEAR(orderdate)元素: SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders FROM Sales.Orders WHERE custid=71 GROUP BY empid,YEAR(orderdate); 这意味着对于WHERE阶段返回的数据中出现的每个雇员ID和订单年份值的唯一组合,在GROUP B... 阅读全文
posted @ 2012-09-21 16:24 沙耶 编辑
摘要:在WHERE子句中,可以指定一个谓词或逻辑表达式,从而过滤由FROM阶段返回的行。只有能让逻辑表达式结果为TRUE的行,才能由WHERE阶段返回给后续的逻辑查询处理阶段。 SELECT orderid,custid,empid,orderdate,freight FROM Sales.Orders WHERE custid=71; 上面这段代码应用了过滤条件custid=71,WHERE阶段将只保留客户ID等于71的行。 WHERE子句对查询性能有重要影响。在过滤表达式的基础上,SQL Server会计算使用什么索引来访问请求的数据。与扫描整个表相比,通过使用索引,有时可以大幅减少... 阅读全文
posted @ 2012-09-21 16:15 沙耶 编辑
摘要:FROM子句是在逻辑处理阶段第一个要处理的查询子句。这个子句用于要查询的表名,以及对这些表进行操作的表运算符。应该总是用数据库架构来限定代码中的对象名称。即便你没有显示指定架构名称,SQL Server也一定会隐式地解析它。这样就产生了一些额外的代价,而且如果完全让SQL Server决定使用哪个对象,也容易产生歧义。通过显示指定架构名称,可以保证得到的对象的却是你原来想要的而且还不必付出任何额外的代价。 如果不用任何特殊处理而返回一个表的所有行,所有需要做的就是使用一个带有FROM子句的查询,在FROM子句中指定想要查询的表名,在SELECT子句中指定想要返回的各个属性。例如以下语句查... 阅读全文
posted @ 2012-09-21 15:29 沙耶 编辑
摘要:SELECT语句的目的是对表进行查询、应用一定的逻辑处理,并返回结果。注意,这里的“逻辑查询处理”是指ANSI SQL定义的概念模型,规定了如何处理一个查询,以及如何取得最终的结果。Microsoft SQL Server引擎并不教条地严格遵守逻辑查询处理;相反,在物理地处理一个查询时,它可以自由地调整处理阶段的顺序,只要最终的结果能够和逻辑查询处理的规定保持一致。SQL Server可以(事实上经常)在查询的物理处理中采用很多快捷方式。 我们使用以下代码来描述逻辑查询处理和各种SELECT查询字句:USE TestDB SELECT empid,YEAR(orderdate) AS ... 阅读全文
posted @ 2012-09-21 14:44 沙耶 编辑
摘要:关系模型带来的最大优点之一就是模型本身集成了数据完整性。作为模型的一部分而实施的数据完整性(也就是说,作为表定义的一部分)称为声明式(declarative)数据完整性。用代码来实施的数据完整性(例如,用存储过程或触发器)称为过程式(procedural)数据完整性。 为属性选择的数据类型和是否允许为NULL值,甚至数据模型本身都是声明式数据完整性约束的例子。其他声明式约束包括主键、唯一约束(UNIQUE)、外键、检查约束(CHECK),以及DEFAULT约束。当用CREATE TABLE语句创建表时,可以同时定义这些约束;或者在已经创建好表之后,用ALTER TABLE语句增加这些约束... 阅读全文
posted @ 2012-09-21 09:02 沙耶 编辑
摘要:一、创建数据库 我们知道表是属于架构的,而架构又是属于数据库的。要在SQL Server环境中创建一个名为TestDB的数据库,可以运行以下代码: IF DB_ID('TestDB') IS NULL CREATE DATABASE TestDB; 如果不存在名为TestDB的数据库,这段代码就会创建一个新的。DB_ID函数接受一个数据库名称作为输入,返回它的内部数据库ID。如果输入名称指定的数据库不存在,这个函数将返回NULL。这是一种检查数据库是否存在的简单方法。注意:在这个简单的CREATE DATABASE语句中,采用了默认的文件设置(例如,区域和初始大小)。在产品环境 阅读全文
posted @ 2012-09-20 16:58 沙耶 编辑
摘要:一个数据库包含多个架构,而每个架构则又包含多个对象。可以将架构看作是各种对象的容器,这些对象可以是表(table)、视图(view)、存储过程(stored procedure)等。 可以在架构级别上控制对象的访问权限。例如,可以为一个用户授予某个架构上的SELECT权限,让这个用户能够查询该架构中所有对象的数据。所以,对于决定在架构中如何组织对象,安全性是应该考虑的因素之一。 此外,架构也是一个命名空间,用作对象名称的前缀。例如,假设在架构Sales中有一个Order表,架构限定(schema-qualified)的对象名称是Sales.Orders,也称为两部分对象名称(two-p... 阅读全文
posted @ 2012-09-20 14:42 沙耶 编辑
摘要:我们有时需要返回特定数量的记录,而不管符合条件的行有多少。要返回排在前面的值,可以有两个选择:指定固定数量的行,或者指定总行数的百分比。例如以下查询将返回前10个价格最高的产品。 SELECT TOP 10 Name,ListPrice FROM Production.Product ORDER BY ListPrice DESC SQL Server不对这些数据做任何分析,甚至在截断列表时,也不会考虑这些值是不是已经排过序,上述查询将在返回第10行后截断结果,而不管后面还有多少条记录的ListPrice与第10行的ListPrice相同,如果想把与第10行相同价格的行也包含进来,可... 阅读全文
posted @ 2012-09-20 09:42 沙耶 编辑
摘要:使用指定的字符分割字符串。思路:1,先计算出指定的分割字符在字符串中的索引, 2.然后再分割字符串。关键函数: charindex,substring,len,额外函数: right,leftsql代码如下: declare @strorder nvarchar(200) declare @ismulorder int declare @firstOrder nvarchar(200) declare @secondOrder nvarchar(200) set @strorder='LastModifyDate Desc,OurPrice Asc' select CHARIN 阅读全文
posted @ 2012-09-19 16:10 沙耶 编辑
摘要:需求:需要统计网站的访问量,具体是哪个用户的ip访问该网站,并统计从哪个连接访问该网站。提示。先按userIP分组,再按时间排序,最后编号。代码如下:select row_number() over (partition by UserIp order by insertTime),* from useraccess 阅读全文
posted @ 2012-09-19 16:05 沙耶 编辑
摘要:1、使用identity(int,1,1)来产生行号,必须把数据插入到一张表中。2、如图:3、代码如下: select rowid=identity(int,1,1),userip into tempT from useraccess select * from tempT 阅读全文
posted @ 2012-09-19 15:59 沙耶 编辑
摘要:1、显示带美元货币符号的数字。 如图:代码如下: int digital = 123456; CultureInfo di = new CultureInfo("en"); Console.WriteLine(digital.ToString("c",di)); 2、显示带人民币货币符号的数字。代码如下: int digital = 123456; CultureInfo di = new CultureInfo("zh-chs"); Console.WriteLine(digit... 阅读全文
posted @ 2012-09-19 15:42 沙耶 编辑
摘要:1.语法DATEPART (datepart , date )参数datepart是将为其返回integer的 date(日期或时间值)的一部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。datepart缩写yearyy,yyyyquarterqq,qmonthmm,mdayofyeardy,ydaydd,dweekwk,wwweekdaydwhourhhminutemi, nsecondss,smillisecondmsmicrosecondmcsnanosecondnsTZoffsettzISO_WEEKisowk,isowwdate是一个表达式,可以解析 阅读全文
posted @ 2012-09-19 14:37 沙耶 编辑
摘要:1,可以通过使用 sql中的language来设置要查询出来的语言。1.1使用繁体中文如下代码: set language N'繁體中文' SELECT DATENAME(ww, '2011-08-17 12:13:00'), DATENAME(DW,'2011-08-17 13:12:00'), CONVERT(varchar,getdate(),109) 执行结果如下:2.2使用英文代码如下: set language N'English' SELECT DATENAME(ww, '2011-08-17 12:13:0 阅读全文
posted @ 2012-09-19 14:27 沙耶 编辑
摘要:1.语法:DATEADD (datepart , number , date ) 2.参数datepart是与integernumber 相加的 date 部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。datepart缩写yearyy,yyyyquarterqq,qmonthmm,mdayofyeardy,ydaydd,dweekwk,wwweekdaydw,whourhhminutemi,nsecondss,smillisecondmsmicrosecondmcsnanosecondnsnumber是一个表达式,可以解析为与 date 的 datepar. 阅读全文
posted @ 2012-09-19 14:22 沙耶 编辑
摘要:这很实用。在企业管理器中:先在本地建一个目的数据库-》右击该DB-》所有任务-》导入数据-》在源数据库选择对话框中,将“服务器”选择为你所要的Server,填入登录名及密 码,选择要导入的数据库-》在目的数据库选择对话框中,用默认值或再自行选择-》选择“复制数据库间的对象和数据”-》接下来next即可 阅读全文
posted @ 2012-09-19 12:47 沙耶 编辑
摘要:为便于管理数据库中的权限,SQL Server提供了若干“角色”,这些角色是用于分组其他主体的安全主体。它们类似于 MicrosoftWindows操作系统中的组。数据库级角色的权限作用域为数据库范围。SQL Server 中有两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和您可以创建的“灵活数据库角色”。固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。db_owner 和 db_securityadmin 数据库角色的成员可以管理固定数据库角色成员身份。但是,只有 db_owner 数据库角色的成员能够向db_owner 固定数据库角色中添加成员。msdb 数据库中还 阅读全文
posted @ 2012-09-19 12:39 沙耶 编辑
摘要:datetime,smalldatetime、datetime2,date,time,datetimeoffset的具体 区别如下:大部分都只是秒钟的差别。 阅读全文
posted @ 2012-09-19 09:45 沙耶 编辑
摘要:1使用row_number()函数进行编号:如select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer 原理:先按psd进行排序,排序完后,给每条数据进行编号。2.在订单中按价格的升序进行排序,并给每条记录进行排序代码如下:select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) as rows from OP_Order 3.统计出每一个各户的所有订单并按每一个客户下的订单的金额 升序排序,同时给每.. 阅读全文
posted @ 2012-09-19 09:36 沙耶 编辑