再学TSQL基础--单表查询
本内容是我学习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基础--单表查询的更多相关文章
- 2008技术内幕:T-SQL语言基础 单表查询摘记
这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...
- 第二章 单表查询 T-SQL语言基础(3)
单表查询(3) 2.6 处理字符数据 字符数据的查询处理,内容包括:类型,排序规则,运算符和函数,以及模式匹配. 2.6.1 数据类型 SQL Server支持两种字符数据类型----普通字符和Uni ...
- 第二章 单表查询 T-SQL语言基础(1)
单表查询(1) 本章:逻辑查询处理,特定的SELECT查询生成正确的结果集而要经历的一系列逻辑阶段;单表查询的其他方面,包括:运算符,空值(NULL),字符的处理和临时数据,分级(ranking),C ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- 第二章 单表查询 T-SQL语言基础(2)
单表查询(2) 2.2 谓词和运算符 T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING),CHECK约束,等等. 在逻辑表达式中可以使用各种谓词(取值为TR ...
- 学数据库还不会Select,SQL Select详解,单表查询完全解析?
查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下. 一.数据查询的语句格式 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式> .. ...
- Mysql基础(四):库、表、记录的详细操作、单表查询
目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...
- mysql 基础入门 单表查询
单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...
- SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数
Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下: ...
随机推荐
- 使用栈Stack对整数数值的运算表达式字符串进行运算C#
这里如果对于形如字符串“((6+((7+8)-9)*9+8/2)-3)/2”的运算表达式进行运算.接触过此类的同学知道这种存在着运算符优先级的表达式,不能直接从左到右进行运算,我们使用OperandS ...
- ASP.NET MVC进阶二
一.数据验证 数据验证的步骤 在模型类中添加与验证相关的特性标记 在客户端导入与验证相关的js文件和css文件 使用与验证相关的Html辅助方法 在服务器端判断是否通过服务器端验证 常用的验证标记 R ...
- ajax案例源码
html文件中demo2_index.html ---------------------------------------------------------------------------- ...
- 身份证校验(c++实现)
描述: 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码 ...
- 上传Android代码到Jcenter(解决了字符映射的问题)
请先阅读:http://blog.saymagic.cn/2015/02/16/release-library-to-jcenter.html 最外面的build.gradle // Top-leve ...
- PL/SQL基础2(笔记)
1 第一个PL/SQL的程序 DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; / --2一个简单的PL/SQL程序 DECLARE v ...
- 【转】Visual Studio项目相对路径的设置,实用
这篇文章主要写给那些以前没有用过VS的新手,同时也是自己学习经验的积累,高手就不用看了以免浪费您宝贵的时间. 在VS的工程中常常要设置头文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只 ...
- Silverlight项目笔记5:Oracle归档模式引起的异常&&表格控件绑定按钮
1.Oracle归档模式产生日志文件引起数据库异常 连接数据库失败,提示监听错误,各种检查监听配置文件,删除再添加监听,无果. sqlplus下重启数据库数据库依然无果,期间碰到多个错误提示: ORA ...
- Java 之 内部类
(static修饰的成员属于整个类,而不属于单个对象) 定义:将一个类放到另一个类的内部定义,这个在内部定义的类就叫做内部类(也有的成嵌套类),包含内部类的类被称为外部类(也有的称宿主类). 1.非静 ...
- 提示“正尝试安装的adobe flash player不是最新版本”的解决方法
尼玛,今天下午遇到一个比较奇怪的现象,我电脑的flash的不能正常使用了,我下载了一个重新安装了下,但还是不行.然后我又卸载了,重新安装flash,重启电脑,还是不行...而且在安装flash pla ...