第 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语法基础的更多相关文章

  1. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

  2. 《microsoft sql server 2008技术内幕 t-sql语言基础》

    第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...

  3. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

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

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

  5. 2008技术内幕:T-SQL语言基础 联接查询摘记

    续 2008技术内幕:T-SQL语言基础 单表查询摘记 第三章 联接查询 Microsoft SQL Server 2008 支持四种表运算符 join(ANSI标准).apply(T-SQL扩展). ...

  6. 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法

    关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...

  7. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  8. SQL Server 2008 R2升级到SQL Server 2012 SP1

    1.建议对生产环境对的数据库升级之前做好备份,以防不测. 2.从SQL Server 2008 R2 升级到SQL Server 2012 SP1,需要先安装SQL Server 2008 R2 的S ...

  9. 安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决

    Sql Server 2008 问题小总结 http://www.lihengyu.com/blog/4877.html 安装 SQL Server 2008 和管理工具 SQL Server 200 ...

随机推荐

  1. js获取当前url地址参数中文乱码问题

    网上看了一些关于此问题的文章,都说的不清不楚,有些更是乱七八糟,完全没法看,故此找了一篇能用的,借鉴作为笔记. //首先获取到当前页面的地址栏信息 var url = window.location. ...

  2. 动态规划:DAG-嵌套矩形

    据说DAG是动态规划的基础,想一想还真的是这样的,动态规划的所有状态和转移都可以归约成DAG DAG有两个典型模型,一个是嵌套矩形问题一个是硬币问题,这里仅介绍一个嵌套矩形问题 等二轮复习的时候再补上 ...

  3. Python基础(2)_if、for、while流程控制

    一.流程控制 1.条件语句 1.1单分支 1.2多分支 条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. a = 5 if a > 2: print('yes') 根据Py ...

  4. Linux基础(1)

    一.Linux的安装及相关配置 1.VMware Workstation安装CentOS7.0 图文版 详细步骤可以看连接:http://blog.csdn.net/alex_my/article/d ...

  5. 【STSRM13】花六游鸟小

    [题意]给定n个节点的树,每个节点有一个m位二进制数,数字可以随时按位取反,每个数位有一个价值,定义每个点的最大价值是从根到这个点路上的数字(可以取反)或起来的数字中,1有价值0无价值,加起来得到的最 ...

  6. [bzoj4515][Sdoi2016]游戏-树链剖分+李超线段树

    Brief Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,A ...

  7. BZOJ 100题纪念

  8. Flask应用部署

    1. 介绍 前面介绍了<Linux下Nginx使用>, 但是Nginx是一个提供静态文件访问的web服务 首先我们介绍一下Web服务器, 应用服务器和应用框架的关系 客户端: 浏览器或者a ...

  9. RabbitMQ消息队列(一): 简单队列

    1. 示例选用python的pika模块进行测试,需要预先安装pika模块: https://pypi.python.org/pypi/pika/0.10.0#downloads 上述地址下载源码,加 ...

  10. Linux内核态抢占机制分析【转】

    转自:http://blog.csdn.net/yiyeguzhou100/article/details/53097665 目录(?)[-] 1非抢占式和可抢占式内核的区别 21 用户态抢占User ...