本内容是我学习tsql2008的阅读笔记

什么是关系模型?

若对列创建唯一约束,背后中的物理机制也是创建了一个唯一索引.

SQL语句的逻辑解析顺序是FROM

WHERE

GROUP BY

HAVING

SELECT

OVER

DISTINCT

TOP

ORDER BY

如果SELECT语句中涉及到分组,则后面的select order having的操作对象将是分组。

所有聚合函数都会忽略NULL值,只有count(*)除外。

带有order by子句的查询被ANSI称之为游标。表表达式不能处理游标。

TOP 是TSQL所特有的,用来限制返回的行数或百分比。

开窗函数使用OVER子句提供窗口作为上下文,对窗口中的一组值进行操作,而不是使用GROUP BY 子句提供的上下文。这样可以同时返回基础行的列和聚合列。

ROW_NUMBER() 函数用于为查询的结果集中的各行分配一个递增的序列号。其逻辑顺序通过OVER子句中的ORDER BY语句来进行指定。但即使ORDER By的列不唯一,则序列值也会增加,这样会造成返回的值不确定。

RANK 和 DENSE_RANK为具有相同逻辑排序值的所有行生成相同的排名。

RANK表示前面有多少行更低的排序值,而DENSE RANK表示前面有多少个不同的排序值。

可以认为在同一SELECT子句中不同时指定DISTINCT和ROW NUMBER是一条最佳实践,

因为DISTINCT在这种情况下不起任何作用。

SELECT empid,firstname,lastname

FROM HR.Employees

WHERE lastname like N'D%';

N表示National,用于表示字符串是Unicode数据类型(NCHAR或NVARCHAR).

SQL中的三值逻辑,如果想返回region列不等于WA的所有行,如下:

SELECT custid,country,region,city

FROM Sales.Customers

WHERE region<>N'WA'

OR region IS NULL;

SQL支持两种字符数据类型:普通字符和Unicode字符。

普通字符使用一个字节来保存每个字符,所以限制这个列所支持的语言只能是英语。

使用定长的字符串时,SQLSERVER会预先分配相应的空间,使其无法扩展,它更适合以写入为主的系统,但是这种类型的存储消耗不是最优的,读取的时候可能要付出更多的代价。

变长字符的存储空间由实际数据量来决定,但是更新数据的时候可能会需要数据移动,超出当前页的范围,所以更新时的效率相对会低一些。

SELECT PATINDEX('%[0-9]%','abcd123efgh');

可以使用Replace来计算某字符在字符串中出现的次数,方法是先把它替换成空,然后比对前后的差值再除以要匹配的字符串的长度就可以了。

SELECT STUFF('A2DEFG',2,1,'BC') 返回:ABCDEFG

DateTimeoffset 有时区部分可以进行识别

DateTime2 精度可控,而且支持的范围从0001开始到9999.

将字符串文字转成日期类型时,如果没有指定时间,sqlserver则默认用午夜时间作为其时间值.

在大多数情况下,在过滤条件中对列进行函数化处理,极有可能造成相应列上的索引无法使用,降低查询效率,解决方案是使用等值的范围查询.例如:

SELECT orderid FROM sales.Orders WHERE YEAR(ORDERDATE)=2007

:SELECT orderid FROM sales.Orders WHERE ORDERDATE >='20070101' AND ORDERDATE<'20080101'

SELECT

current_timestamp as [current_timestamp],

GETDATE() as [getdate],

getutcdate() as [getutcdate],

SYSDATETIME() as [sysdatetime],

SYSUTCDATETIME() as [sysutcdatetime],

SYSDATETIMEOFFSET() as [sysdatetimeoffset]

我们尽可能使用标准的SQL,而不是TSQL,如果他们能表示成同样的功能.例如获取当前日期时间时选择current_timestamp比GetDate()要好些.

cast是ANSI的标准SQL.

SELECT

SWITCHOFFSET(SYSDATETIMEOFFSET(),'+00:00') AS [UTCDATETIME],--可以把时间转成UTC的

CURRENT_TIMESTAMP AS [CURRENTDATE],

SYSUTCDATETIME() AS [SYSUTCDATETIME]

获取表的元数据信息:

exec sp_tables

EXEC sp_columns N'SCORE',N'DBO'

EXEC sp_helpconstraint N'SCORE'

----每个月最后一天生成的订单

--SELECT

--orderid,

--orderdate,

--custid,

--empid

--FROM

--SALES.ORDERS

--WHERE

--ORDERDATE = DATEADD(DD,-1,Convert(CHAR(7),DATEADD(mm,1,ORDERDATE),121) +'-01')

--ORDERDATE = dateadd(month,datediff(month,'19991231',orderdate),'19991231')

--return lastname has a more than twice

--select

--empid,firstname,lastname

--from

--hr.employees

--where

--LEN(lastname) - len(replace(lastname,'a',''))>1

--lastname like '%a%a%'

返回总价大于10000的订单

--select

--orderid,

--SUM(qty*unitprice) as totalvalue

--from

--sales.orderdetails

--group by orderid

--having SUM(qty*unitprice) >10000

再学TSQL基础--单表查询的更多相关文章

  1. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

  2. 第二章 单表查询 T-SQL语言基础(3)

    单表查询(3) 2.6 处理字符数据 字符数据的查询处理,内容包括:类型,排序规则,运算符和函数,以及模式匹配. 2.6.1 数据类型 SQL Server支持两种字符数据类型----普通字符和Uni ...

  3. 第二章 单表查询 T-SQL语言基础(1)

    单表查询(1) 本章:逻辑查询处理,特定的SELECT查询生成正确的结果集而要经历的一系列逻辑阶段;单表查询的其他方面,包括:运算符,空值(NULL),字符的处理和临时数据,分级(ranking),C ...

  4. 【T-SQL基础】01.单表查询-几道sql查询题

    概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...

  5. 第二章 单表查询 T-SQL语言基础(2)

    单表查询(2) 2.2 谓词和运算符 T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING),CHECK约束,等等. 在逻辑表达式中可以使用各种谓词(取值为TR ...

  6. 学数据库还不会Select,SQL Select详解,单表查询完全解析?

    查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下. 一.数据查询的语句格式 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式> .. ...

  7. Mysql基础(四):库、表、记录的详细操作、单表查询

    目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...

  8. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

  9. SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

    Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   ...

随机推荐

  1. Java NIO服务器端开发

    一.NIO类库简介 1.缓冲区Buffer Buffer是一个对象,包含一些要写入和读出的数据. 在NIO中,所有的数据都是用缓冲区处理的,读取数据时,它是从通道(Channel)直接读到缓冲区中,在 ...

  2. 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型

    [源码下载] 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本 ...

  3. java多线程(三)——锁机制synchronized(同步语句块)

    用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法之行一个长时间的任务,那么B线程必须等待比较长的时间,在这样的情况下可以使用synchronized同步语句快来解 ...

  4. 以Self Host的方式来寄宿Web API

    Common类及实体定义.Web API的定义请参见我的上一篇文章:以Web Host的方式来寄宿Web API. 一.以Self Host寄宿需要新建一个Console控制台项目(SelfHost) ...

  5. j2ee分布式缓存同步实现方案dlcache v1.0.0

    现成的分布式K/V缓存已经有很多的实现,最主要的比如redis,memcached,couchbase.那为什么我们还要自己去实现呢,在我们解决了分布式系统下大量rpc调用导致的高延时后,我们发现很多 ...

  6. GetStartedWithWin10Develop

    GetStartedWithWin10Develop 首先要确保已经配置好win10开发环境,开始第一个win10开发的HelloWorld 1.首先创建你的win10项目(示例的项目名称为 Hell ...

  7. 终端环境之tmux

    今天继续介绍我的终端环境,tmux. why tmux? 用一个工具的第一问自然还是为什么要用.其实当时使用tmux的原因很简单.工作中经常需要长时间的编译.总想要下班后要关机的情况下,(肯定有人问我 ...

  8. Linux0.11内核剖析--初始化程序(init)

    1.概述 在内核源代码的 init/目录中只有一个 main.c 文件. 系统在执行完 boot/目录中的 head.s 程序后就会将执行权交给 main.c.该程序虽然不长,但却包括了内核初始化的所 ...

  9. C语言常量与指针

    C语言功能强大而丰富,还表现在const与指针的结合使用上,对不同的问题,它提供不同的保护,特别有用的是指向常量的指针 本文地址:http://www.cnblogs.com/archimedes/p ...

  10. iOS 杂笔-21(self.name = “object” 和 _name =”object” 有什么不同?)

    iOS 杂笔-21(self.name = "object" 和 _name ="object" 有什么不同?) 问题如题,这是考察对属性与变量的了解而已. s ...