学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础
第 2 章: 单表查询
use TSQLFundamentals2008; select * from Sales.orders; select empid, year(orderdate) as orderyear, Count(*) as numorders
from Sales.Orders
where custid=''
group by empid, year(orderdate)
having count(*) >1
order by empid, orderyear; select empid, year(orderdate) as orderyear, Count(distinct custid) as custnum
from Sales.Orders
group by empid, year(orderdate)
order by empid, orderyear; select * from HR.Employees; select distinct country as cty, * from HR.Employees
order by country; select distinct country from HR.Employees as e
order by country; select count(*) from Sales.Orders select top(861) * from Sales.Orders select top(5) orderid, orderdate, custid, empid
from Sales.Orders
order by orderdate desc select top(5) orderid, orderdate, custid, empid
from Sales.Orders
order by orderdate desc, orderid desc select top(5) with ties orderid, orderdate, custid, empid
from Sales.Orders
order by orderdate desc --2.1.8 OVER 子句
select orderid, custid, val
from Sales.OrderValues; select orderid, custid, val,
sum(val) over() as totalvalue,
sum(val) over(partition by custid) as custtotalvalue
from Sales.OrderValues; select orderid, custid, val,
100. * val /sum(val) over() as totalvaluePer,
100. * val /sum(val) over(partition by custid) as custtotalvaluePer
from Sales.OrderValues; select OV.orderid, OV.custid, ov.val,
ROW_NUMBER() over(order by val, OV.orderid) as rownum,
Rank() over(order by val) as rank,
Dense_rank() over(order by val) as dense_rank,
NTile(10) over(order by val) as ntile
from Sales.OrderValues as OV
order by val select OV.orderid, OV.custid, ov.val,
--ROW_NUMBER() over(order by val, OV.orderid) as rownum,
--Rank() over(order by val) as rank,
--Dense_rank() over(order by val) as dense_rank,
NTile(10) over(order by val) as ntile
from Sales.OrderValues as OV
order by val -----------------------------------------------------
select ov.val,
ROW_NUMBER() over(order by val) as rownum
from sales.OrderValues as ov select distinct ov.val,
ROW_NUMBER() over(order by val) as rownum
from sales.OrderValues as ov select val
from sales.OrderValues as ov
group by val select ov.val,
ROW_NUMBER() over(order by val) as rownum
from sales.OrderValues as ov
group by val ----------------------------------------------------- -----------------------------------------------------
--2.3 Case子句
----------------------------------------------------- select P.productid, p.productname, categoryid,
Case categoryid
when 1 then 'Beverages'
when 2 then 'Condimets'
when 3 then 'Confe'
when 4 then 'Beverages'
when 5 then 'sdf'
when 6 then 'asd'
when 7 then 'ghh'
else '不知道'
end as Categoryname
from Production.Products as P select orderid, custid,val,
case
when val<1000.00 then '< 100'
when val between 1000.00 and 3000.00 then '1000-3000'
when val > 3000.00 then '> 3000'
else '不知道'
end as valueCategory
from sales.OrderValues; --2.4
select *
from Sales.Customers
where region=N'WA' select *
from Sales.Customers
where region <> N'WA' select *
from Sales.Customers
where region <>N'WA' or region IS NULL --------------------------------------
--2.5
--2.6.2
select *
from sys.fn_helpcollations() select Len('abcde')
select Len(N'abcde')
select dataLength('abcde')
select dataLength(N'abcde') select Len('abcde ')
select dataLength(N'abcde ')
---2.7.5
select
GETDATE() as "GetDate",
CURRENT_TIMESTAMP as "CURRENT_TIMESTAMP",
SYSDATETIME() as "SYSDATETIME",
SYSUTCDATETIME() as "SYSUTCDATETIME",
SYSDATETIMEOFFSET() as "SYSDATETIMEOFFSET" select
Cast(CURRENT_TIMESTAMP as date) as "date",
Cast(CURRENT_TIMESTAMP as time) as "time" select
CURRENT_TIMESTAMP as "CURRENT_TIMESTAMP",
Cast(CURRENT_TIMESTAMP as date) as "date1",
Cast(CURRENT_TIMESTAMP as char(100)) as "date2" select CONVERT(Char(8),CURRENT_TIMESTAMP, 112),
Cast(CONVERT(Char(8),CURRENT_TIMESTAMP, 112) as datetime) select CONVERT(Char(12),CURRENT_TIMESTAMP, 114),
Cast(CONVERT(Char(12),CURRENT_TIMESTAMP, 114) as datetime),
Cast(CONVERT(Char(12),CURRENT_TIMESTAMP, 114) as datetime2) select
DATEADD(year, 1, ''),
DATEADD(year, 1, CURRENT_TIMESTAMP) select datediff(DAY,'', '') select
CURRENT_TIMESTAMP,
Datediff(day,'', CURRENT_TIMESTAMP),
DATEadd(day, Datediff(day,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(MONTH,'', CURRENT_TIMESTAMP),
DATEadd(MONTH, Datediff(MONTH,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(MONTH,'', CURRENT_TIMESTAMP),
DATEadd(MONTH, Datediff(MONTH,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(YEAR,'', CURRENT_TIMESTAMP),
DATEadd(YEAR, Datediff(YEAR,'', CURRENT_TIMESTAMP), '') select
CURRENT_TIMESTAMP,
Datediff(YEAR,'', CURRENT_TIMESTAMP),
DATEadd(YEAR, Datediff(YEAR,'', CURRENT_TIMESTAMP), '') select year(current_timestamp)
select year('') select datepart(month,'')
select datepart(month,CURRENT_TIMESTAMP) select datename(month,CURRENT_TIMESTAMP)
select datename(month,'') select *
from sys.tables; select SCHEMA_NAME(schema_id),name as tablename
from sys.tables; select * from sys.columns
select TYPE_NAME(system_type_id),
*
from sys.columns where object_id = OBJECT_ID(N'Sales.Orders') --2.6
exec sys.sp_help
@objname=N'Sales.Orders' exec sys.sp_columns @table_name=N'Orders', @table_owner=N'Sales' --2.10
--2.10.1
select orderid, orderdate, custid, empid
from Sales.Orders as o
where o.orderdate > '' and o.orderdate < '' --2.10.2
select orderid, orderdate, custid, empid
from Sales.Orders as o
where o.orderdate= dateadd(month,datediff(month,'',o.orderdate),'') --select DateDiff(MONTH,'19991231',current_timestamp);
--select Dateadd(MONTH,DateDiff(MONTH,'19991231','20160602'),'19991231');
select Dateadd(MONTH,DateDiff(MONTH,'',''),''); select Dateadd(MONTH,DateDiff(MONTH,'',''),'');
select Dateadd(MONTH,DateDiff(MONTH,'',''),''); select Dateadd(MONTH,DateDiff(MONTH,'',''),'');
select Dateadd(MONTH,DateDiff(MONTH,'',''),'');
select Dateadd(MONTH,DateDiff(MONTH,'',''),''); --2.10.3
select empid, firstname, lastname
from hr.Employees as e
where e.lastname like N'%a%a' ----2.10.4
select * from
Sales.OrderDetails select orderid, Sum(od.unitprice * od.qty) as totalValue
from Sales.OrderDetails as od
group by od.orderid
having Sum(od.unitprice * od.qty) > 10000
order by totalValue Desc ----2.10.5
select * from Sales.Orders select top(3) o.shipcountry,AVG(o.freight) as avgfreight
from Sales.Orders as o
where o.orderdate >= '' and o.orderdate < ''
group by o.shipcountry
order by AVG(o.freight) desc ----2.10.6
select custid, orderdate, orderid,
ROW_NUMBER() over(partition by custid order by orderdate,orderid) as rownum
from Sales.Orders ----2.10.7
select * from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case titleofcourtesy
when 'Ms.' then 'Female'
when 'Mrs.' then 'Female'
when 'Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case titleofcourtesy
when 'Ms.' then 'Female'
when 'Mrs.' then 'Female'
when 'Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case
when titleofcourtesy ='Ms.' then 'Female'
when titleofcourtesy ='Mrs.' then 'Female'
when titleofcourtesy ='Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select empid, firstname, lastname, titleofcourtesy,
case
when titleofcourtesy Like'M%s.' then 'Female'
when titleofcourtesy Like'Mr' then 'Male'
else 'Unknown'
end as gender
from HR.Employees select * from Sales.Customers select custid, region
from Sales.Customers
order by case when region is Null then 1 else 0 end ,region select custid, region
from Sales.Customers
order by case when region is Null then 4 else 3 end ,region
第 3 章 :联接查询
Use TSQLFundamentals2008;
--3.1.1
select * from Sales.Customers as C
select * from HR.Employees as E
select *
from Sales.Customers as C
cross join HR.Employees as E --3.1.2
select * from Sales.Customers, HR.Employees; --3.1.3
select E1.empid, E2.empid
from HR.Employees as E1 cross join HR.Employees as E2 select E1.empid, E2.empid
from HR.Employees as E1 cross join HR.Employees as E2
order by E1.empid select E1.empid, E2.empid
from HR.Employees as E1 cross join HR.Employees as E2
order by E1.empid,E2.empid --3.1.4
use tempdb;
if OBJECT_ID('dbo.Digits') is not null drop table dbo.Digits
create table dbo.Digits(
digit int not null primary key
)
insert into dbo.Digits(digit)
values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9) select D1.digit, D2.digit
from dbo.Digits as D1
cross join dbo.Digits as D2 select D1.digit, D2.digit, D3.digit
from dbo.Digits as D1
cross join dbo.Digits as D2
cross join dbo.Digits as D3 select D3.digit * 100 + D2.digit * 10 + D1.digit + 1 as n
from dbo.Digits as D1
cross join dbo.Digits as D2
cross join dbo.Digits as D3
order by n select D3.digit * 100 + D2.digit * 10 + D1.digit + 1 as n
from dbo.Digits as D1
,dbo.Digits as D2
,dbo.Digits as D3
order by n --3.2.1
select *
from dbo.Digits as D1
join dbo.Digits as D2 on D1.digit = D2.digit --3.2.2
select *
from dbo.Digits as D1
,dbo.Digits as D2 where D1.digit = D2.digit use TSQLFundamentals2008 --3.3.3
select C.custid, O.orderid
from Sales.Customers as C
join Sales.Orders as O on c.custid=O.custid select o.orderid, od.productid
from Sales.Orders as O
JOIN Sales.OrderDetails AS OD on O.orderid=OD.orderid select C.custid, O.orderid
from Sales.Customers as C
join Sales.Orders as O on c.custid=O.custid select C.custid,o.orderid, od.productid
from Sales.Customers as C
JOIN Sales.Orders as O On c.custid= O.custid
JOIN Sales.OrderDetails AS OD on O.orderid=OD.orderid --3.4
--3.4.1 select q.custid, o.orderid
from Sales.Customers q
join Sales.Orders o on q.custid= o.custid select q.custid, o.orderid
from Sales.Customers q
left join Sales.Orders o on q.custid= o.custid select q.custid, o.orderid
from Sales.Customers q
left join Sales.Orders o on q.custid= o.custid
where o.orderid is null --
select C.custid ,COUNT(*)
from Sales.Customers C
left join Sales.Orders as O on c.custid=O.custid
group by C.custid select C.custid ,COUNT(O.orderid)
from Sales.Customers C
left join Sales.Orders as O on c.custid=O.custid
group by C.custid --3.6.1
set nocount on;
use TSQLFundamentals2008;
if OBJECT_ID('dbo.NUMS', 'U') is not null drop table dbo.NUMS;
create table dbo.NUMS
(
n int not null primary key
); declare @i as int =1;
begin tran
while @i <= 100000
begin
insert into dbo.NUMS(n) values(@i);
set @i = @i + 1;
end
commit tran
set nocount off; --3.6.2
select E.empid,e.firstname, e.lastname, n.n
from HR.Employees as E
join dbo.NUMS N on N.n < 5 select E.empid,e.firstname, e.lastname, n.n
from HR.Employees as E
cross join dbo.NUMS N
where N.n < 5
order by n.n, E.empid select e.empid, DATEADD(day, n- 1,'') as dt
from HR.Employees as E
Cross Join NUMS as D
where d.n <= datediff(day,'','') + 1
order by e.empid --3.6.2
select C.custid,COUNT(O.orderid),Sum(OD.qty)
from Sales.Customers as C
left join Sales.Orders as O on C.custid = O.custid
left join Sales.OrderDetails as OD on O.orderid = OD.orderid
where C.country ='USA'
group by C.custid select C.custid,COUNT(distinct O.orderid),Sum(OD.qty)
from Sales.Customers as C
left join Sales.Orders as O on C.custid = O.custid
left join Sales.OrderDetails as OD on O.orderid = OD.orderid
where C.country =N'USA'
group by C.custid --3.6.3
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid --3.6.4
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid
where O.orderid Is NUll --3.6.5
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Join Sales.Orders as O on C.custid=O.custid
where orderdate ='' --3.6.6
select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid
where orderdate ='' or O.orderdate is NUll select C.custid, C.companyname, O.orderid, O.orderdate
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid and orderdate ='' --3.6.7
select C.custid, C.companyname, O.orderid, O.orderdate,
Case
when O.orderid Is Not null then 'Yes'
else 'NO'
End as HasOrderOn20170212
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid and orderdate =''
order by C.custid; select distinct C.custid, C.companyname, O.orderid, O.orderdate,
Case
when O.orderid Is Not null then 'Yes'
else 'NO'
End as HasOrderOn20170212
from Sales.Customers as C
Left Join Sales.Orders as O on C.custid=O.custid and orderdate =''
order by C.custid;
学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础的更多相关文章
- 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章
第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...
- 《microsoft sql server 2008技术内幕 t-sql语言基础》
第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...
- 2008技术内幕:T-SQL语言基础
2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...
- 2008技术内幕:T-SQL语言基础 单表查询摘记
这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...
- 2008技术内幕:T-SQL语言基础 联接查询摘记
续 2008技术内幕:T-SQL语言基础 单表查询摘记 第三章 联接查询 Microsoft SQL Server 2008 支持四种表运算符 join(ANSI标准).apply(T-SQL扩展). ...
- 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...
- SQL Server 2008空间数据应用系列四:基础空间对象与函数应用
原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...
- SQL Server 2008 R2升级到SQL Server 2012 SP1
1.建议对生产环境对的数据库升级之前做好备份,以防不测. 2.从SQL Server 2008 R2 升级到SQL Server 2012 SP1,需要先安装SQL Server 2008 R2 的S ...
- 安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决
Sql Server 2008 问题小总结 http://www.lihengyu.com/blog/4877.html 安装 SQL Server 2008 和管理工具 SQL Server 200 ...
随机推荐
- vue相对路径修改
如果静态文件不是部署在网站根目录下,vue-cli将给你造成巨大的麻烦. 你不能直接把build好的文件抛进一个目录.你不能直接在本地打开用vue做好的静态网站. 改成相对路径,主要需要做两步. 1. ...
- Spring - IoC(12): 属性占位符
使用属性占位符可以将 Spring 配置文件中的部分元数据放在属性文件中设置,这样可以将相似的配置(如 JDBC 的参数配置)放在特定的属性文件中,如果只需要修改这部分配置,则无需修改 Spring ...
- Spring securiuty 过滤器
1. HttpSessionContextIntegrationFilter 位于过滤器顶端,第一个起作用的过滤器. 用途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个Sec ...
- webstorm es6 语法报错
设置settings javascript language version后 <script>标签加个 type <script type="text/ecmascrip ...
- Ubuntu10.04中利用V4L2读取摄像头数据并保存成文件【转】
转自:http://blog.chinaunix.net/uid-29339876-id-4042245.html 利用V4L2读取UVC摄像头数据并保存成视频文件,主要参考http://linuxt ...
- IC卡文件系统的逻辑结构【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172028.HTM 文件系统是COS的重要模块之一,它负责组织.管理.维护IC卡内存储的所有数据.文件系统的设计和实现 ...
- easyui 在子tabs中打开新tabs(关于easyUI在子页面增加显示tabs的一个问题)
现在说的是在子页面点个按钮也能触发增加子页面的情况. 情景是,在父页面上有个div如: <div class="easyui-tabs" id="main" ...
- C#格式化时间,货币
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- 理解Java中【包】的概念
Java中用package关键字定义一个包,下面通过几个实验,理解Java中的包的概念和作用. 实验1:先看一个无包的情形 在G盘下新建一个Test.java,如图1: 写下面这些代码 <spa ...
- 如何设置Google Chrome的界面显示语言
昨天不小心,把Chrome浏览器的界面语言换成了中文, 结果换不回去英文了!!! 这是为啥呀? 我本来使用的是英文界面,换成中文却不让换回原来的语言,这怎么也说不过去吧. Google了一会子也没找到 ...